【问题标题】:How to pass uniform array of struct to shader via C++ code如何通过 C++ 代码将统一的结构数组传递给着色器
【发布时间】:2014-05-11 10:04:22
【问题描述】:

例如。 在 FragmentShader 中:-

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

uniform LightSource Light[4];

main(){
        //somecode
}

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

【问题讨论】:

  • 这是用于 OpenGL 还是 OpenGL ES?在 GL (3.1+) 中,最好的方法是使用统一缓冲区。
  • @AndonM.Coleman 我可以将它与 GLES 2.0 一起使用吗?
  • 不,这就是为什么我要求您更具体地使用您的标签。您已将此标记为 ES 和 GL。

标签: opengl opengl-es shader


【解决方案1】:

您需要获取每个数组元素的结构的每个字段的位置,并分别发送值。请参阅 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);

【讨论】:

    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多