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

问题描述 投票:11回答:1

例如。在FragmentShader中: -

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

uniform LightSource Light[4];

main(){
        //somecode
}

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

opengl opengl-es shader
1个回答
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);
© www.soinside.com 2019 - 2024. All rights reserved.