Sto lavorando ad un programma glsl shader come parte di un plugin che gira all'interno di un'applicazione "closed source". L'applicazione (maya) è scritta usando opengl 2.1, ma le nostre schede grafiche supportano opengl/glsl 4.1 e voglio usare tassellatura e shader geometrici nel mio programma. L'applicazione imposta il viewport opengl e il tradizionale stack model/view matrix e non ho il controllo su quella parte del codice.GLSL 4.1 con gl_ModelViewProjectionMatrix
mio pass-through vertex shader utilizza GLSL 1.2 e funziona bene:
// GLSL VERTEX SHADER
#version 120
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
mio pass-through geomery Shader utilizza GLSL 4.1 e funziona anche bene all'interno dell'applicazione:
// 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();
}
Ma questo è solo un test pass-through. Nel mio vero shader di geometria ho bisogno di fare alcuni calcoli nello spazio del mondo, ma i punti dello shader della geometria sono nello spazio di vista. La mia domanda è: posso accedere a gl_ModelViewProjectionMatrix all'interno di uno shader di geometria 4.1? Capisco che il tradizionale stack matrix sia stato deprecato in glsl 4.1 a favore di variabili uniformi, ma non posso cambiare l'applicazione. Non posso usare glsl 1.2 nel mio shader di geometria perché ho bisogno del tipo di input lines_adjacency. Devo copiare la matrice in una variabile uniforme nella sorgente C++ del mio plugin? O c'è una "porta di servizio" per arrivare direttamente da glsl 4.1? O qualcos'altro a cui non sto pensando?