Передача собственной структуры в шейдер opengl es 2.0 - PullRequest
10 голосов
/ 06 ноября 2010

Я хочу попробовать пример освещения из книги OpenGL ES 2.0 Руководство по программированию. В шейдере они сделали две структуры.

struct directional_light   
{  

    vec3 direction; // normalized light direction in eye space  
    vec3 halfplane; // normalized half-plane vector  

    vec4 ambient_color;
    vec4 diffuse_color;
    vec4 specular_color;
};

struct material_properties 
{ 
    vec4 ambient_color; 
    vec4 diffuse_color; 
    vec4 specular_color; 
    float specular_exponent;
};

Они также сделали две униформы, основанные на этих структурах.

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

Проблема в том, что я не знаю, как передать собственные структуры в настоящий шейдер.

Я хочу создать те же структуры в своем основном коде и передать объекты в шейдер. Как это возможно?

С уважением Никлас

1 Ответ

11 голосов
/ 08 ноября 2010

Вы не можете, OpenGL ES не имеет такой функциональности, чтобы загрузить, вы должны получить местоположение каждой из ваших вложенных переменных и вызвать glUniform * для каждой из них.

Например:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
...