Domanda

voglio provare un esempio di illuminazione dal libro OpenGL ES 2.0 Programming Guide. Nello shader hanno fatto due strutture.

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

Essi hanno anche fatto due uniformi, in base a queste strutture.

uniform  material_properties u_material_properties;   
uniform directional_light u_directional_light;

Il problema è che non so come passare proprie strutture in shader reale.

Voglio creare le stesse strutture nel mio codice principale e passare gli oggetti nella shader. Come è possibile?

Saluti Niclas

È stato utile?

Soluzione

Non è possibile, OpenGL ES non avere tale funzionalità, di caricare dovete ottenere la posizione di ciascuno dei vostri variabili nidificati e chiamata glUniform * su ciascuno di loro.

Ad esempio:

GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top