Die Angabe der GLSL-Version führt zu einem Syntaxfehler bei der Verwendung von LWJGL. Ich habe nicht versucht, dieses Problem außerhalb von LWJGL zu reproduzieren. Dies geschieht auf mehreren Macs mit Lion.
Ich habe sowohl Vertex- als auch Fragment-Shader benutzt, ohne #version
zu benutzen. Aber ich bin dabei, die texture
-Funktion zu verwenden, die eine #version
-Direktive zu benötigen scheint.
Hier ist das einfachste Fehler Beispiel:
%Vor% Wenn Sie diesen Fragment-Shader kompilieren und glGetShaderInfoLog
aufrufen, erhalten Sie folgenden Fehler:
Das Ersetzen von 120
durch andere Werte wie 110
führt ebenfalls zu einem Fehler. Seltsamerweise, wenn ich 130 oder höher verwende, gibt es den gleichen Fehler plus eine Beschwerde über die Version, die nicht unterstützt wird. (Ich weiß, dass mein System nicht über GLSL 1.3 verfügt, aber es ist immer noch seltsam, dass dieser Fehler angezeigt wird, wenn der Compiler so funktioniert, als würde er das Versionstag nicht verstehen.)
Ich bin auf einem Mac mit einer ATI Radeon HD 4670. GL_VERSION
ist 2.1 ATI-7.12.9
und GL_SHADING_LANGUAGE_VERSION
ist 1.20
.
Angesichts dessen sehe ich keinen Grund, warum GLSL 1.20 nicht verfügbar sein sollte. Und es ist wirklich seltsam für mich, dass es #version
ist ein Syntaxfehler, im Gegensatz zu etwas über eine nicht unterstützte GLSL-Version zu sagen.
Gelöst! Es hatte nichts mit OpenGL zu tun. Der Code meines Dateilesers löschte alle Zeilenumbrüche. Das war im Körper des Shaders gut, der Semikolons hatte. Aber die Präprozessordirektive hatte kein Semikolon, um sie vor diesem Fehler zu schützen.
Stellen Sie also sicher, dass der Code, den Sie an glShaderSource übergeben, immer noch Zeilenumbrüche enthält.
Sowohl der Vertex als auch der Fragment-Shader müssen die gleiche Version haben. Wenn Sie also einen #version 120
zum Fragment-Shader hinzufügen, sollten Sie ihn auch zum Vertex-Shader hinzufügen. Aber es ist ein bisschen seltsam, dass dies als Syntaxfehler gemeldet wird. Vielleicht gibt es einen weiteren Fehler, aber beide müssen definitiv das gleiche Versions-Tag haben.
BEARBEITEN: Denken Sie auch daran, dass das Versions-Tag die erste Zeile im Shader-Quellcode sein muss (Zeilenumbrüche und Kommentare sollten nach Spezifikation stimmen, aber wer weiß, was die Treiber denken).