2014-05-11 4 views
7

für zB übergeben. in FragmentShader: -Wie man uniform Array von Struktur zu Shader über C++ - Code

struct LightSource 
{ 
     int Type; 
     vec3 Position; 
     vec3 Attenuation; 
     vec3 Direction; 
     vec3 Color; 
}; 

uniform LightSource Light[4]; 

main(){ 
     //somecode 
} 

Nun, wie kann ich Werte für Light[4] senden.

+0

Ist das für OpenGL oder OpenGL ES? In GL (3.1+) wäre dies am besten mit einem Uniform Buffer möglich. –

+0

@ AndonM.Coleman kann ich es mit GLES 2.0 verwenden? – jpm

+0

Nein, und darum habe ich Sie gebeten, mit Ihren Tags genauer zu sein. Sie haben dies für ES und GL markiert. –

Antwort

15

Sie müssen die Position jedes Felds der Struktur für jedes Array-Element ermitteln und den Wert separat senden. Siehe die OpenGL Wiki Seite als Referenz: http://www.opengl.org/wiki/Uniform_(GLSL)#Uniform_management.

Zum Beispiel den Wert des Lichts auf [0] .Type würden Sie wie folgt vorgehen:

GLuint loc = glGetUniformLocation(shader_program_id, "Light[0].Type"); 
glUniform1i(loc, value);