我工作的一个GLSL着色器程序作为一个“封闭源代码”应用程序中运行的插件的一部分。 应用程序(玛雅)正在使用的OpenGL 2.1编写的,但我们的显卡支持OpenGL / GLSL 4.1,我想使用曲面细分和几何着色器在我的计划。 应用程序建立了OpenGL视口和传统的模型/视图矩阵堆栈,我不具有对代码的那部分控制。
我传递的顶点着色器使用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();
}
但是,这只是一个传递测试。 在我真正的几何着色器,我需要做的世界空间的一些计算,但几何着色器点是考虑到空间。 我的问题是:我可以访问gl_ModelViewProjectionMatrix 4.1几何着色器里面? 据我了解,传统的矩阵堆栈已经GLSL 4.1赞成统一的变量被弃用,但我不能改变应用程序。 因为我需要的lines_adjacency输入型我不能使用GLSL 1.2在我的几何着色器。 我需要的矩阵复制到我的插件的C ++源统一的变量? 或者是有一个“后门”直接从GLSL 4.1得到它? 或别的东西,我没有想到的?