web-dev-qa-db-ja.com

C ++コードを介して構造体の均一な配列をシェーダーに渡す方法

例えば。 FragmentShaderで:-

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

uniform LightSource Light[4];

main(){
        //somecode
}

Light[4]の値を送信するにはどうすればよいですか。

15
jpm

各配列要素の構造体の各フィールドの場所を取得し、値を個別に送信する必要があります。参考のためにOpenGLwikiページを参照してください: 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);
23
user3256930