2010-12-15 139 views
2

Donc j'essaie d'amener un projet C++ utilisant Qt et OpenGL écrit et compilé sur une machine Linux chez moi à la machine Windows 7, mais je rencontre des difficultés. J'ai d'abord appris que certaines choses gl (comme GL_TEXTURE0) n'étaient plus définies car gl.h ne les définissait pas pour les fenêtres. Aussi, le glext.h que j'ai ne définit pas certaines fonctions comme glActiveTexture. Ces deux problèmes que j'ai trouvés pourraient être résolus en introduisant un nouveau glext.h.Windows/opengl glext.h build issue

Mon problème le plus immédiat semble être que je ne l'apporte pas correctement. Si je le fais:

#define GL_GLEXT_LEGACY  //should prevent old glext.h from being included 
#define GL_GLEXT_PROTOTYPES //should make glActiveTexture be defined 
#include <qgl.h>     
#include "glext.h"   //local up-to-date glext.h 
#include <QGLShaderProgram> 

alors make me dit que j'ai des références non définies à glActiveTexture. Si j'inclue QGLShaderProgram avant glext.h, j'ai toujours ce problème, mais make m'avertit aussi que je redéfinis un certain nombre de choses qui sont définies dans QGLShaderProgram et glext, donc je sais que le dernier fichier est inclus. Toute aide serait vraiment appréciée.

+0

Pour votre information, il est presque toujours une mauvaise idée (et le plus souvent ne fonctionnera pas) juste télécharger un fichier d'en-tête arbitraire de l'Internet pour remplacer l'un de votre système en-têtes. OpenGL est un peu un cas particulier car il est implémenté par les pilotes graphiques, donc la manière typique d'y accéder sous Windows (sans Qt) est d'obtenir des pointeurs sur les fonctions lors de l'exécution. Une bibliothèque d'extension comme GLEW rend cela beaucoup plus facile. –

Répondre

0

Si vous utilisez Qt, vous devriez probablement utiliser qmake - et il suffit d'ajouter

QT + = opengl

à votre fichier de projet qmake.

+0

Merci pour la réponse. En fait, j'ai utilisé qmake (désolé, j'aurais dû être plus clair). Ajouter opengl à ma configuration de projet ne semblait pas non plus le faire. Je suis assez sûr que cela a quelque chose à voir avec les inclusions ... Ce projet compilé très bien sur Linux (avec les fonctions manquantes de glext déclarées comme des fonctions de style c) – mprice

+0

@mprice - petite édition, désolé. Mais vraiment une bonne installation Qt devrait prendre soin des inclus pour vous. J'ai Qt + opengl projets qui compilent sur Windows et Linux avec aucun changement d'en-tête. Pour les choses non-qt dans le passé, j'ai parfois besoin de #include sur certaines plates-formes et pas d'autres. – sje397

1

Vous êtes sur la bonne voie, mais comme Nick Meyer l'a écrit, vous devez obtenir des pointeurs sur les fonctions lors de l'exécution.

Il existe déjà un exemple agréable et propre dans le répertoire d'installation de Qt, au moins depuis 4.6. Vérifiez "Boxes" depuis le répertoire "demos". Il y a glextensions.h/cpp qui prend en charge les fonctions nécessaires dans Qt sens, à l'aide de Qt QGLContext etc.

1

Si vous êtes paresseux comme moi, juste un saut à http://glew.sourceforge.net et l'utiliser, pas besoin de bricoler avec différents fichiers d'en-tête et récupération manuelle des pointeurs de fonction. Il est aussi simple que

/* in every source file using OpenGL */ 
#include <GL/glew.h> 

et

/* for each OpenGL context */ 
if(createGLContext(...) == SUCCESSFULL) 
    glewInit()