Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Passing own struct into opengl es 2.0 shader

I want to try a lighting example from the book OpenGL ES 2.0 Programming Guide. In the shader they have made two structures.

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;
};

They have also made two uniforms, based on these structures.

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

The problem is, I do not know how to pass own structures into the actual shader.

I want to create the same structures in my main code and pass the objects into the shader. How is this possible?

Regards Niclas

like image 922
tyuip Avatar asked Nov 05 '10 21:11

tyuip


1 Answers

You can't, OpenGL ES doesn't have that functionality, to upload you have to get the location of each of your nested variables and call glUniform* on each of them.

For example:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
like image 93
Dr. Snoopy Avatar answered Oct 11 '22 00:10

Dr. Snoopy