Opengl GLSL均匀块中的静态阵列

Opengl GLSL均匀块中的静态阵列,opengl,glsl,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 GenPar

我有一个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;
}
但是,对于x>0的octaveWeight[x],如果x=0,则不会传递数据。当我仅在着色器侧将浮动的静态数组更改为两个vec4时,它就可以工作了

这里有什么问题?

请参阅:

如果成员是标量或向量数组,则基对齐 和阵列跨距设置为与单个阵列的基准对齐方式相匹配 元素,并四舍五入到 vec4的基础对齐。数组的末尾可能有填充;这个 数组后面的成员的基偏移向上舍入到 基础路线的下一个倍数

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