Я полагаю, что это что-то среднее между вопросом на чистом C++ и вопросом OpenGL. У меня есть юниформ-буфер, и я выделяю в нем место размером sizeof(ShaderData) байт. Я использую макет 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++, или есть специальные ключевые слова или прагмы для выравнивания отдельных элементов структуры на стороне процессора, которые немного аккуратнее?