2012-04-04 55 views
5

我正在研究glsl着色器程序,作为在“封闭源代码”应用程序中运行的插件的一部分。应用程序(maya)是使用opengl 2.1编写的,但是我们的图形卡支持opengl/glsl 4.1,我想在我的程序中使用镶嵌和几何着色器。该应用程序设置了opengl视口和传统的模型/视图矩阵堆栈,并且我无法控制该部分代码。GLSL 4.1 with gl_ModelViewProjectionMatrix

我传递的顶点着色器使用GLSL 1.2和正常工作:

// GLSL VERTEX SHADER 
#version 120 

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

我的直通geomery着色器使用GLSL 4.1,并在应用程序内正常工作:

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

但这只是一个传递测试。在我的真实几何着色器中,我需要在世界空间中进行一些计算,但几何着色器点在视空间中。 我的问题是:我可以访问4.1几何着色器内的gl_ModelViewProjectionMatrix?据我所知,传统的矩阵堆栈在glsl 4.1中已被弃用,以支持统一变量,但我无法更改应用程序。我无法在我的几何着色器中使用glsl 1.2,因为我需要lines_adjacency输入类型。我是否需要将矩阵复制到我的插件的C++源代码中的统一变量中?或者是否有一个“后门”直接从glsl 4.1获得?还是别的我没有想到的?在着色器

#version 410 compatibility 

回答

7

你可以这样使用兼容模式(如果你的GL实现支持的话)。这将重新启用所有被弃用的全球统一状态(除其他事项外)