2012-04-04 12 views
5

Estoy trabajando en un programa de sombreador glsl como parte de un complemento que se ejecuta dentro de una aplicación de "fuente cerrada". La aplicación (maya) está escrita usando opengl 2.1, pero nuestras tarjetas gráficas admiten opengl/glsl 4.1 y quiero usar sombreados de teselación y geometría en mi programa. La aplicación configura la ventana OpenGL y la pila matriz/modelo/vista tradicional y no tengo control sobre esa parte del código.GLSL 4.1 con gl_ModelViewProjectionMatrix

Mi pasante vertex shader utiliza GLSL 1.2 y funciona bien:

// GLSL VERTEX SHADER 
#version 120 

void main() 
{ 
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
} 

Mi paso a través de sombreado geomery utiliza GLSL 4.1 y también funciona bien dentro de la aplicación:

// 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(); 
} 

Pero esto es solo una prueba de paso. En mi sombreador de geometría real, necesito hacer algunos cálculos en el espacio-mundo, pero los puntos de sombreado de geometría están en el espacio de vista. Mi pregunta es: ¿puedo acceder a gl_ModelViewProjectionMatrix dentro de un sombreador de geometría 4.1? Entiendo que la pila de matriz tradicional ha quedado obsoleta en glsl 4.1 a favor de variables uniformes, pero no puedo cambiar la aplicación. No puedo usar glsl 1.2 en mi shader de geometría porque necesito el tipo de entrada lines_adjacency. ¿Debo copiar la matriz en una variable uniforme en la fuente de C++ de mi complemento? ¿O hay una "puerta trasera" para acceder directamente desde Glsl 4.1? ¿O algo más en lo que no estoy pensando?

Respuesta

7

Puede utilizar el modo de compatibilidad (si su aplicación GL lo soporta) diciendo:

#version 410 compatibility 

en el sombreado. Esto volverá a habilitar todo el estado uniforme global obsoleto (entre otras cosas)