通常情况下,我们一般都会使用默认的uniform数据类型,比如float,int,vec3等等。如果我们自定义一个结构体,该如何向glsl shader传递自定义结构体uniform数据呢?
// glsl code
...
struct Material {
vec3 ambient;
vec3 diffuse;
vec3 specular;
float shininess;
};
uniform Material material;
...
// opengl code
...
// Set material properties
glUniform3f(glGetUniformLocation(lightingShader.Program, "material.ambient"), 1.0f, 0.5f, 0.31f);
glUniform3f(glGetUniformLocation(lightingShader.Program, "material.diffuse"), 1.0f, 0.5f, 0.31f);
glUniform3f(glGetUniformLocation(lightingShader.Program, "material.specular"), 0.5f, 0.5f, 0.5f); // Specular doesn't have full effect on this object's material
glUniform1f(glGetUniformLocation(lightingShader.Program, "material.shininess"), 32.0f);
...