2014-05-11 3 views
7

, например. в FragmentShader: -Как передать единый массив структуры в шейдер через код C++

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

uniform LightSource Light[4]; 

main(){ 
     //somecode 
} 

Теперь, как я могу отправить значения Light[4].

+0

Является ли это для OpenGL или OpenGL ES? В GL (3.1+) лучший способ сделать это будет с Uniform Buffer. –

+0

@ AndonM.Coleman могу ли я использовать его с GLES 2.0? – jpm

+0

Нет, и именно поэтому я просил вас быть более конкретными с вашими тегами. У вас есть метки для ES и GL. –

ответ

15

Вам нужно будет получить местоположение каждого поля структуры для каждого элемента массива и отправить его отдельно. См. Страницу Wiki для OpenGL для справки: http://www.opengl.org/wiki/Uniform_(GLSL)#Uniform_management.

Например, чтобы установить значение Light [0] .Type вы могли бы сделать следующее:

GLuint loc = glGetUniformLocation(shader_program_id, "Light[0].Type"); 
glUniform1i(loc, value); 
Смежные вопросы