GLSL统一块中的静态数组

时间:2018-12-14 15:10:25

标签: opengl glsl

我有一个带有统一块的GLSL计算着色器:

#define MAX_OCTAVE_COUNT 8

layout(std140) uniform Parameters {
    float time;
    int octaveCount, octaveSize, executionCount;
    float octaveWeight[MAX_OCTAVE_COUNT];
    int chunkSize;
} params;

我将这种结构(D语言)传递给它:

struct GenParams {
    GLfloat time;
    GLint octaveCount, octaveSize, executionCount;
    GLfloat[MAX_OCTAVE_COUNT] octaveWeight;
    GLint chunkSize;
}

但是,对于octaveWeight[x],其中x > 0,不会传递数据(对于x = 0,则是)。当我将浮点数的静态数组更改为两个vec4(仅在着色器侧)时,它就可以工作。

这是什么问题?

1 个答案:

答案 0 :(得分:0)

请参阅:https://computergraphics.stackexchange.com/questions/4454/opengl-es-3-uniform-buffer-object-with-float-array

  

如果成员是标量或向量的数组,则基本比对   和数组步幅设置为匹配单个数组的基本对齐方式   元素,根据规则(1),(2)和(3),并四舍五入到   vec4的基本比对。数组的末尾可能有填充;的   数组后成员的基本偏移量四舍五入为   基本比对的下一个倍数。

因此数组中的浮点数将舍入为vec4大小。