我有一个带有统一块的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
(仅在着色器侧)时,它就可以工作。
这是什么问题?
答案 0 :(得分:0)
如果成员是标量或向量的数组,则基本比对 和数组步幅设置为匹配单个数组的基本对齐方式 元素,根据规则(1),(2)和(3),并四舍五入到 vec4的基本比对。数组的末尾可能有填充;的 数组后成员的基本偏移量四舍五入为 基本比对的下一个倍数。
因此数组中的浮点数将舍入为vec4大小。