/ / 'gl_VerticesIn': nicht deklarierter Bezeichner - opengl, glsl, geometry-shader

'gl_VerticesIn': nicht deklarierter Bezeichner - opengl, glsl, geometry-shader

Warum bekomme ich diesen Fehler beim Kompilieren eines GLSL-Geometrie-Shaders?

FEHLER: 0:15: "gl_VerticesIn": nicht deklarierter Bezeichner

Hier ist der Shader:

// makes wireframe triangles.


#version 330
#extension GL_ARB_geometry_shader4 : enable


layout(triangles) in;
layout(line_strip, max_vertices = 4) out;


void main(void)
{
for (int i = 0; i < gl_VerticesIn; i++)
{
gl_Position = gl_in[i].gl_Position;
EmitVertex();
}

gl_Position = gl_in[0].gl_Position;
EmitVertex();

EndPrimitive();
}

Scheint einfach für mich, aber ich kann nicht viele Informationen auf "gl_VerticesIn" finden, von denen ich dachte, dass sie ein eingebautes sein sollte. Wenn ich "gl_VerticesIn" gerade durch "3" ersetze, funktioniert alles.

Ich benutze ein GeForce GTX 765M und OpenGL 3.3 Core-Profil. Ich habe diesen Fehler nicht mit einer anderen GPU. Meine Fahrer sind auf dem neuesten Stand.

Antworten:

8 für die Antwort № 1

Das wichtigste zuerst, gl_VerticesIn wird nur in deklariert GL_ARB_geometry_shader4 und Geometrie-Shader sind Ader in GLSL 3.30. Es gibt keinen Grund, die Erweiterungsform von Geometrieshadern zu verwenden, die mit Ihrer Shader-Version erstellt wurden, Sie machen nur den GLSL-Compiler und den Linker-Job dadurch verwirrender.

Nun, um Ihr Problem tatsächlich zu lösen:

Anstatt zu verwenden gl_VerticesIn, benutzen gl_in.length (). Es ist wirklich so einfach.

Und natürlich wäre es auch eine gute Idee, die redundante Erweiterungsrichtlinie zu entfernen.