根据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];
};
答案 0 :(得分:2)
GLboolean
与GLSL中的bool
完全不同。
GLSL中最小的标量数据类型是32位,因此所有内容都与4个字节的倍数对齐。对于小于32位的任何内容,您通常希望自己打包并解包整数或浮点值,因此我会考虑使用uint
代替。
如果您自己打包,可以在一个bool
中存储32个uint
值。