我正在研究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
: