Pasando propia estructura en OpenGL ES 2.0 shader
-
29-09-2019 - |
Pregunta
Quiero probar un ejemplo de iluminación del libro de OpenGL ES 2.0 Guía de Programación. En el shader que han realizado dos estructuras.
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;
};
También han hecho dos uniformes, sobre la base de estas estructuras.
uniform material_properties u_material_properties;
uniform directional_light u_directional_light;
El problema es que no sé cómo pasar estructuras propias en el shader real.
Quiero crear las mismas estructuras en mi código principal y pasar los objetos en el sombreado. ¿Cómo es esto posible?
Saludos Niclas
Solución
No se puede, OpenGL ES no tienen esa funcionalidad, para cargar usted tiene que conseguir la ubicación de cada una de las variables anidadas y glUniform llamada * en cada uno de ellos.
Por ejemplo:
GLuint loc = glGetUniformLocation(program, "u_material_properties.ambient_color");
glUniform4f(loc, 1.0, 1.0, 1.0, 0.0);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow