我想这是纯 C++ 问题和 OpenGL 问题之间的一种交叉。我有一个统一的缓冲区,并在其中分配 sizeof(ShaderData) 字节的空间。我在着色器的 GPU 端使用 std140 布局。
根据 std140 规则,我需要在结构的各个位置添加填充,以确保向量之类的内容正确对齐。下面的结构是一个例子(对于我的灯):
struct ShaderData {
float Light_Intensity;
float _pad1[3]; // align following vec3 on 4N boundary
Math::Vec3f Light_Position;
float _pad2; // align following vec4 on 4N boundary
Math::Colour4f Light_Ambient;
Math::Colour4f Light_Diffuse;
Math::Colour4f Light_Specular;
float Light_AttenuationMin;
float Light_AttenuationMax;
} MyShaderData;
这是人们通常在 C++ 中做事的方式,还是有特殊的关键字或 pragma 用于对齐结构 CPU 端的各个元素,这些元素更整洁?