2010-11-19 8 views
4

Ich möchte GLEW mit Qt unter Windows (7, wenn das wichtig ist) verwenden.Wie benutzt man GLEW mit Qt?

Was ich getan habe, war auf die GLEW-Website gehen, laden Sie das Paket für Windows, dann legen Sie die glew.dll in System32-Ordner. In meiner Profildatei referenzierte ich die .lib-Dateien mit LIBS += .../path_to_the_libs/glew32.lib und das gleiche für glew32s.lib (nicht sicher, was letzteres ist). In meiner QGLWidget-Unterklasse habe ich sichergestellt, dass glew.h vor <QGLWidget> und daher vor gl.h und glu.h enthalten ist. In der main() Funktion die erste Sache, die ich tue ist Anruf glewInit und Anruf glGetError, aber meine Anwendung beendet mit etwas merkwürdigem Code, wie eine sehr große negative Zahl.

Ich habe den Verdacht, dass es sehr viel gibt, was ich falsch mache (ich bin relativ neu zu Qt und OpenGL und völlig neu zu GLEW), aber ich habe auch den Verdacht, dass einer der Hauptfehler ist, dass die libs, Ich nehme an, wurden mit MSVC gebaut und können daher nicht mit MinGW in Verbindung gebracht werden ... Wie auch immer, kann jemand bitte eine Schritt-für-Schritt-Anleitung geben, wie man GLEW mit Qt installiert und benutzt? Ich würde es sehr schätzen. Vielen Dank im Voraus

Edit: Jungs, vielleicht zu viel Ich frage, aber ich würde wirklich wirklich wie ein Schritt-für-Schritt-Anleitung :)

+0

ist nicht glew32s.lib statische Version? Du brauchst eine Lib, nicht beides. – alxx

+0

Wenn der Compiler wirklich anders ist, müssen Sie GLEW selbst kompilieren. – alxx

+0

GLEW kompiliert über MSVC sollte auf MinGW arbeiten. – Kos

Antwort

7

Sie sind nicht soll Rufen Sie glewInit() an, bevor Sie Ihren OpenGL-Kontext bereit haben. Rufen Sie es kurz vor Ihrem ersten gl* an, nicht am Anfang von main. Das sollte den Trick machen.

Verwenden Sie auch nicht glew32.lib und glew32s.lib gleichzeitig - die ehemalige ist mit der DLL-Datei zu verwenden und die letztere ist statisch (Ihre .exe wird größer, aber Sie müssen nicht Ihre Anwendung mit der DLL verteilen). Entscheiden und verwenden Sie entweder.

+0

Danke! Ich werde es in Kürze versuchen –

+2

Das hat sehr geholfen!Für die Implementierung von QGLWidget: Der beste Ort, um den Aufruf von 'glewInit()' zu setzen, befindet sich oben in der 'initializeGL()' -Funktion. Dieses _will_ führt dazu, dass 'glewInit()' für jedes von Ihnen erstellte GL-Widget aufgerufen wird, aber das scheint nichts zu stören. –

0

Qt 4.7 kann einen beliebigen OpenGL-Kontext erstellen. Verwenden Sie QGLFormat.setProfile() und QGLFormat.setVersion()

Der einzige Nachteil ist, dass Sie noch nicht über OpenGL 3+ Bindungen verfügen.

Schritt für Schritt Lösung:

  1. Knüpfen Sie neue Unterklasse von QGLWindget.
  2. Im Konstruktor der neuen Klasse neue QGLContext mit richtigen OpenGL-Nummern einrichten.
  3. Rufen Sie glewInit() auf.
  4. Führen Sie den Kontext zum Konstruktor QGLWidnet.

Wenn ich mich richtig erinnere, sollte es tun! GLEW DLL sollte in richtigen Systemordnern und Compiler-Optionen angefügt werden, aber sie sind die gleichen wie für GLEW ohne QT.

+0

Zugriff auf OpenGL 3 bezogene API-Aufrufe ohne GLEW? –

+0

Nun, das ist eine andere Frage! –