2012-04-04 26 views
5

Tôi đang làm việc trên chương trình shader glsl như là một phần của plugin chạy bên trong ứng dụng "nguồn đóng". Ứng dụng (maya) được viết bằng cách sử dụng opengl 2.1, nhưng card đồ họa của chúng tôi hỗ trợ opengl/glsl 4.1 và tôi muốn sử dụng các trình đổ bóng và hình học trong chương trình của mình. Ứng dụng thiết lập khung nhìn opengl và ngăn xếp ma trận mô hình/khung nhìn truyền thống và tôi không có quyền kiểm soát phần mã đó.GLSL 4.1 với gl_ModelViewProjectionMatrix

pass-through vertex của tôi sử dụng GLSL 1.2 và hoạt động tốt:

// GLSL VERTEX SHADER 
#version 120 

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

pass-through geomery shader của tôi sử dụng GLSL 4.1 và cũng hoạt động tốt bên trong ứng dụng:

// 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(); 
} 

Nhưng điều này chỉ là một thử nghiệm vượt qua. Trong shader hình học thực sự của tôi, tôi cần phải thực hiện một số phép tính trong không gian thế giới nhưng các điểm đổ bóng hình học nằm trong khung nhìn. Câu hỏi của tôi là: tôi có thể truy cập gl_ModelViewProjectionMatrix bên trong trình đổ bóng hình học 4.1 không? Tôi hiểu rằng ngăn xếp ma trận truyền thống đã không còn được sử dụng trong phiên bản 4.1 của các biến đồng nhất, nhưng tôi không thể thay đổi ứng dụng. Tôi không thể sử dụng glsl 1.2 trong shader hình học của tôi vì tôi cần kiểu đầu vào lines_adjacency. Tôi có cần phải sao chép ma trận vào một biến thống nhất trong nguồn C++ của plugin của tôi không? Hoặc là có một "cửa sau" để có được nó trực tiếp từ glsl 4.1? Hoặc cái gì khác tôi không nghĩ đến?

Trả lời

7

Bạn có thể sử dụng chế độ tương thích (nếu thực hiện GL của bạn hỗ trợ nó) bằng cách nói:

#version 410 compatibility 

trong shader. Điều này sẽ có thể khôi phục tất cả trạng thái thống nhất toàn cầu không được chấp nhận (trong số những thứ khác)