如何通过C ++代码将统一的struct数组传递给着色器

时间:2014-05-11 10:04:23

标签: opengl opengl-es shader

例如。 在FragmentShader中: -

struct LightSource
{
        int Type;
        vec3 Position;
        vec3 Attenuation;
        vec3 Direction;
        vec3 Color;
};

uniform LightSource Light[4];

main(){
        //somecode
}

现在我如何发送Light[4]的值。

1 个答案:

答案 0 :(得分:21)

您需要为每个数组元素获取结构的每个字段的位置,并分别发送值。请参阅OpenGL wiki页面以获取参考:https://www.khronos.org/opengl/wiki/Uniform_(GLSL)#Uniform_management

例如,要设置Light [0] .Type的值,您将执行以下操作:

GLuint loc = glGetUniformLocation(shader_program_id, "Light[0].Type");
glUniform1i(loc, value);