2012-04-04 30 views
5

"Kapalı kaynak" uygulamasının içinde çalışan bir eklentinin parçası olarak glsl shader programında çalışıyorum. Uygulama (maya) opengl 2.1 kullanılarak yazılmıştır, ancak grafik kartlarımız opengl/glsl 4.1'i desteklemektedir ve programımda mozaikleme ve geometri gölgelendiricilerini kullanmak istiyorum. Uygulama, opengl viewport'u ve geleneksel model/view matrisi yığınını ayarlar ve kodun o kısmı üzerinde kontrole sahip değilim.GLSL 4.1 with gl_ModelViewProjectionMatrix

My geçiş tepe tarayıcı GLSL 1.2 kullanır ve iyi çalışır:

// GLSL VERTEX SHADER 
#version 120 

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

My geçiş Geometri shader glsl 4.1 kullanır ve ayrıca uygulama içinde çalışıyor:

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

Ama bu sadece bir geçiş testi. Benim gerçek geometri gölgelendiricimde, dünya uzayında bazı hesaplamalar yapmam gerekiyor, ancak geometri gölgelendirici noktaları görünüm alanında. Sorum şu: bir 4.1 geometri gölgelendiricisinde gl_ModelViewProjectionMatrix'e erişebilir miyim? Geleneksel matris yığınının glsl 4.1'de tek tip değişkenler lehine kullanımdan kaldırıldığını anlıyorum, ancak uygulamayı değiştiremiyorum. Geometri gölgelendiricimde glsl 1.2 kullanamıyorum çünkü lines_adjacency giriş tipine ihtiyacım var. Eklentimin C++ kaynağında matrisi tek tip bir değişkene kopyalamam gerekir mi? Veya doğrudan glsl 4.1'den almak için bir "arka kapı" var mı? Ya da başka bir şey düşünmüyorum?

cevap

7

Sen söyleyerek uyumluluk modunu (GL uygulama destekliyorsa) kullanabilirsiniz:

#version 410 compatibility 

gölgelendiricideki. Bu, onaylanmamış tüm dünyadaki tekdüzen devletini (diğer şeylerin yanı sıra) yeniden etkinleştirecek