在着色器存储对象中使用它时,我无法使以下结构起作用:
着色器中的定义:
struct Object
{
vec4 color;
mat3 transform;
float depth;
float pObjIndex;
//float align1;
//float align2;
};
layout (std430, binding = 0) buffer Objects
{
Object objects[];
};
Run Code Online (Sandbox Code Playgroud)
我的理解是对象结构在 GLSL 中通过其最大成员 vec4 对齐,即通过 16 字节边界对齐。(mat3 被视为 vec3 的 3 元素数组,并按 12 字节边界对齐)。vec4、mat3 和 2 个浮点数给出 72 个字节。当我用两个浮点数将结构填充到最接近的 16 字节倍数 - 80 - 时,它无法正常工作,就像没有填充一样。
这个结构的布局的两个变体 - 填充有 2 个浮点数而没有任何填充 - 不正确吗?
的mat3实际上是3个vec4S作为各自VEC3是3个浮筒对准以16个字节(或至少它可能不跨越16字节边界)
struct Object
{
float[4] color;
float[4][3] transform;
float depth;
float pObjIndex;
//float align1;
//float align2;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4276 次 |
| 最近记录: |