Passando proprio struct in OpenGL ES 2.0 dello shader
-
29-09-2019 - |
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
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