Ich arbeite an einem Glsl Shader-Programm als Teil eines Plugins, das innerhalb einer "Closed Source" -Anwendung ausgeführt wird. Die Anwendung (maya) wird mit opengl 2.1 geschrieben, aber unsere Grafikkarten unterstützen opengl/glsl 4.1 und ich möchte Tessellations- und Geometrie-Shader in meinem Programm verwenden. Die Anwendung richtet das OpenGL-Ansichtsfenster und den traditionellen Modell/Ansicht-Matrix-Stack ein und ich habe keine Kontrolle über diesen Teil des Codes.GLSL 4.1 mit gl_ModelViewProjectionMatrix
Mein Pass-Through-Vertex-Shader verwendet GLSL 1.2 und funktioniert gut:
// GLSL VERTEX SHADER
#version 120
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Mein Pass-Through-geomery Shader verwendet GLSL 4.1 und arbeitet auch in der Anwendung fein:
// GLSL GEOMETRY SHADER
#version 410
layout (lines_adjacency) in;
layout (line_strip, max_vertices = 2) out;
void main()
{
gl_Position = gl_in[1].gl_Position;
EmitVertex();
gl_Position = gl_in[2].gl_Position;
EmitVertex();
EndPrimitive();
}
Aber diese ist nur ein Durchgangstest. In meinem realen Geometrie-Shader muss ich einige Berechnungen im Welt-Raum durchführen, aber die Geometrie-Shader-Punkte sind im Sicht-Raum. Meine Frage ist: Kann ich auf die gl_ModelViewProjectionMatrix in einem 4.1 Geometrie-Shader zugreifen? Ich verstehe, dass der traditionelle Matrixstack in Glsl 4.1 zugunsten einheitlicher Variablen veraltet ist, aber ich kann die Anwendung nicht ändern. Ich kann Glsl 1.2 nicht in meinem Geometrieshader verwenden, da ich den Eingabetyp lines_adjacency benötige. Muss ich die Matrix in eine einheitliche Variable in der C++ - Quelle meines Plugins kopieren? Oder gibt es eine "Hintertür", um direkt von Glsl 4.1 zu kommen? Oder etwas anderes, an das ich nicht denke?