std140和bool对齐

时间:2014-11-20 14:08:55

标签: opengl shader

根据OpenGL规范4.5,std140布局块中的bool保留1个字节(sizeof(GLboolean) == 1)。 但是当我得到b的偏移时,它是4。 误解在哪里?

layout (std140) uniform Uniforms
{
    bool a;
    bool b;
};

以下结构将4个字节扩展为64个。为什么工程师创建了如此超级资源浪费的标准?

layout (std140) uniform Uniforms
{
    bool a[4];
};

1 个答案:

答案 0 :(得分:2)

GLboolean与GLSL中的bool完全不同。

GLSL中最小的标量数据类型是32位,因此所有内容都与4个字节的倍数对齐。对于小于32位的任何内容,您通常希望自己打包并解包整数或浮点值,因此我会考虑使用uint代替。

如果您自己打包,可以在一个bool中存储32个uint值。