GLSL 4.1与gl_ModelViewProjectionMatrix

时间:2012-04-04 15:08:50

标签: opengl glsl maya

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

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

// GLSL VERTEX SHADER
#version 120

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

我的传递几何着色器使用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获取它?或者其他我不想的东西?

1 个答案:

答案 0 :(得分:7)

您可以通过以下方式使用兼容模式(如果您的GL实施支持它):

#version 410 compatibility
着色器中的

。这将重新启用所有已弃用的全局统一状态(以及其他内容)