将自己的结构传递给opengl es 2.0着色器

时间:2010-11-05 21:10:29

标签: iphone opengl-es shader opengl-es-lighting

我想尝试一下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 个答案:

答案 0 :(得分:11)

你不能,OpenGL ES没有那个功能,要上传你必须获得每个嵌套变量的位置,并在每个变量上调用glUniform *。

例如:

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