在Shader存储对象中使用它时,我无法使用以下结构:
着色器中的定义:
struct Object
{
vec4 color;
mat3 transform;
float depth;
float pObjIndex;
//float align1;
//float align2;
};
layout (std430, binding = 0) buffer Objects
{
Object objects[];
};
我的理解是,对象结构在GLSL中由其最大成员(即vec4,即16字节边界)对齐。 (mat3被视为vec3的3元素数组,并以12字节边界对齐)。 vec4,mat3和2浮点数为72个字节。当我将结构填充到最近的16字节倍数 - 80 - 有两个浮点数时,它没有正常工作,就像没有填充一样。
此结构的两种变体布局 - 带有2个浮点数的填充且没有任何填充 - 不正确吗?
答案 0 :(得分:3)
mat3
实际上是3 vec4
s,因为每个vec3是3个浮点数,与16个字节对齐(或者至少它不能跨越16个字节的边界)
struct Object
{
float[4] color;
float[4][3] transform;
float depth;
float pObjIndex;
//float align1;
//float align2;
};