2012-04-04 52 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實現支持的話)。這將重新啓用所有被棄用的全球統一狀態(除其他事項外)