GLSL 4.1 gl_ModelViewProjectionMatrix(GLSL 4.1 wit

2019-09-16 08:15发布

我工作的一个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得到它? 或别的东西,我没有想到的?

Answer 1:

你可以这样使用兼容模式(如果你的GL实现支持它):

#version 410 compatibility

在着色器。 这将重新启用所有已过时全球统一的状态(除其他事项外)



文章来源: GLSL 4.1 with gl_ModelViewProjectionMatrix
标签: opengl glsl maya