2010-11-19 29 views
4

Je veux utiliser GLEW avec Qt sous Windows (7 si cela est important). Ce que j'ai fait, c'était aller sur le site Web de GLEW, télécharger le paquet pour windows, puis mettre le glew.dll dans le dossier system32. Dans mon fichier pro, j'ai référencé les fichiers .lib avec LIBS += .../path_to_the_libs/glew32.lib et la même chose pour glew32s.lib (je ne sais pas ce que ce dernier est pour). Dans ma sous-classe QGLWidget, je me suis assuré que glew.h est inclus avant <QGLWidget> et donc avant gl.h et glu.h. Dans la fonction main() la première chose que je fais est d'appeler glewInit et d'appeler glGetError mais mon application se termine avec un code étrange, comme un très grand nombre négatif. Je soupçonne qu'il y a quelque chose que je fais mal (je suis relativement nouveau à Qt et OpenGL et absolument nouveau à GLEW), mais je soupçonne aussi que l'une des erreurs majeures est que les libs, Je suppose, ont été construits avec MSVC et ne peuvent donc pas être liés avec MinGW ... De toute façon, quelqu'un peut-il s'il vous plaît fournir une instruction étape par étape comment installer GLEW avec Qt et l'utiliser? Je l'apprécierais beaucoup. Nous vous remercions à l'avanceComment utiliser GLEW avec Qt?

Edit: Les gars, peut-être que je suis trop demander, mais je voudrais vraiment vraiment une étape par étape instruction :)

+0

est pas glew32s.lib version statique? Vous avez besoin d'une lib, pas les deux. – alxx

+0

si le compilateur diffère vraiment, vous devez compiler GLEW vous-même. – alxx

+0

GLEW compilé via MSVC devrait fonctionner sur MinGW. – Kos

Répondre

7

Vous n'êtes pas censé appelez glewInit() avant de préparer votre contexte OpenGL. Appelez-le juste avant vos premiers appels gl*, pas au début de main. Cela devrait faire l'affaire.

Aussi, n'utilisez pas glew32.lib et glew32s.lib simultanément - le premier est à utiliser avec le fichier DLL et le dernier est statique (votre fichier .exe devient plus grand mais vous n'avez pas à distribuer votre application avec le fichier .dll). Décider et utiliser soit. Qt 4.7 peut créer n'importe quel contexte OpenGL

+0

Merci! Je vais essayer sous peu –

+2

Cela a beaucoup aidé!Pour les réimplémteurs de QGLWidget: Le meilleur endroit pour placer l'appel à 'glewInit()' est en haut de votre fonction 'initializeGL()'. Cela entraînera 'glewInit()' à être appelé pour chaque widget GL que vous créez, mais cela ne semble pas déranger. –

0

Utilisez QGLFormat.setProfile() et QGLFormat.setVersion()

Le seul inconvénient est que vous n'avez toujours pas de liaisons OpenGL 3+.

étape par étape solution:

  1. Faire nouvelle sous-classe de QGLWindget.
  2. Dans le constructeur de la nouvelle classe, configurez le nouveau QGLContext avec les nombres OpenGL appropriés.
  3. Appelez glewInit().
  4. Transmettre le contexte au constructeur QGLWidnet.

Si je me souviens bien, il devrait le faire! GLEW dll doit être placé dans les dossiers système appropriés, et les options de compilation attachées, mais elles sont les mêmes que pour GLEW sans QT.

+0

comment accéder aux appels API OpenGL 3 sans GLEW? –

+0

Maintenant, c'est une question différente! –