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

jpm*_*jpm 15 opengl shader opengl-es

例如.在FragmentShader中: -

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

uniform LightSource Light[4];

main(){
        //somecode
}
Run Code Online (Sandbox Code Playgroud)

现在我该如何发送值Light[4].

use*_*930 23

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

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

GLuint loc = glGetUniformLocation(shader_program_id, "Light[0].Type");
glUniform1i(loc, value);
Run Code Online (Sandbox Code Playgroud)