【发布时间】:2024-01-04 13:04:01
【问题描述】:
我有以下统一缓冲区:
layout(std140) uniform Light
{
vec4 AmbientLight;
vec4 LightIntensity;
vec3 LightPosition;
float LightAttenuation;
};
在缓冲数据和需要添加的填充时,我遇到了一些问题。我已经阅读了http://ptgmedia.pearsoncmg.com/images/9780321552624/downloads/0321552628_AppL.pdf,它说我必须在 vec3 的末尾添加额外的 4 个字节用于填充 - 所以我将为“Light”上传总共 13 个字节。然而,当我这样做时,'LightAttenuation' 会得到我在'LightPosition' 上填充的值,而不是提前一个字节,所以当我不填充时,我会在着色器中得到正确的值。这是为什么呢?
【问题讨论】:
-
"我已阅读 [PDF] 中的内容" 谁在乎它说什么? The OpenGL specification 是主要来源;其他一切都是次要的。而且std140布局的描述并不像人们说的那么难读。