2016-10-14 3 views
1

Ich arbeite daran, eine 3D-Game-Engine mit OpenGL unter Linux zu erstellen. Genauer gesagt benutze ich lwjgl-2.9.3 (die neueste Version ist zum Zeitpunkt dieses Artikels nicht für Linux verfügbar). Ich habe einige der Projekte auf einem Windows 10-Rechner erstellt und kompiliert und funktioniert gut. Allerdings ist es für mich nicht länger machbar, den Windows-Rechner weiter zu benutzen, und mein eigener Computer läuft mit Fedora 24. Ich habe eine Intel Core i3-4012Y-CPU und verwende die integrierte Grafik mit dem mesa 12.0.3-Treiber. Dies ist ein Laptop, der keine Option zum Hinzufügen einer dedizierten GPU bietet. Als ich versuchte, mit dem Projekt auf Linux arbeiten (exakt gleichen Code, ich habe von nichts ändern, was ich aus den Windows-Computern kopiert), gibt Eklipse mir diesen Fehler:OpenGL unter Linux mit Mesa 12.0.3 GLSL 3.30 wird nicht unterstützt

0:1(10): error: GLSL 3.30 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES

ich meine OpenGL geprüft/Mesa Informationen mit diesem Terminal-Befehl: glxinfo | grep OpenGL.

Dies ist die Ausgabe dieses Befehls:

OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Haswell
OpenGL core profile version string: 3.3 (Core Profile) Mesa 12.0.3
OpenGL core profile shading language version string: 3.30
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 12.0.3
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.0 Mesa 12.0.3
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00
OpenGL ES profile extensions:

Ich verstehe nicht, warum wird mein Programm nicht kompilieren. Die 12-Serie-Mesa-Treiber scheinen OpenGL 4.x und aktuelle GLSL-Versionen zu unterstützen, korrekt? Gibt es eine Möglichkeit, dass ich dieses Programm kompilieren kann? Muss ich neue Fahrer bekommen? Zur Zeit dieses Schreibens bin ich mir ziemlich sicher, dass ich die absolut neuesten Treiber habe.

Zusätzlich ist der Mesa-Treiber derjenige, der in den Fedora-Repos bereitgestellt wird, nicht einen, den ich separat kompiliert habe.

Irgendwelche Vorschläge würden geschätzt, da ich bei einem vollständigen Verlust bin. Vielen Dank.

+0

Ich schlage vor, einen Blick auf [SIGGRAPH University: "Eine Einführung in OpenGL-Programmierung"] (https://www.youtube.com/watch?v=6-9XFm7XAT8) – Flint

Antwort

3

Sie müssen einen OpenGL-Core-Kontext anfordern.

Mit der aktuellen Version von Mesa erhalten Sie einen OpenGL 3.0-Kompatibilitätskontext, wenn Sie keinen Kernkontext anfordern. Wenn Sie einen Kernkontext anfordern, erhalten Sie einen OpenGL 3.3-Kernkontext (oder möglicherweise neuer) und Sie können GLSL 3.30 verwenden.

Ähnliches Verhalten gilt für OpenGL auf macOS, außer dass Sie entweder Core-Kontexte 3.3 oder 4.1 erhalten und ansonsten einen 2.1-Kontext erhalten.

Siehe LWJGL Version Selection:

ContextAttribs contextAtrributes = new ContextAttribs(3, 2) 
    .withProfileCore(true); 

Bitte den Vorschlag des Wiki ignorieren withForwardCompatible() zu verwenden, dass die Funktionalität etwas veraltet ist.

Verwandte Themen