Я задавал себе вопрос о UBO и способах доступа к ним в GLSL с помощью единообразных блоков.
Следуя официальной документации, если я хочу разработать массив источников света, я, вероятно, напишу:
layout(std140, binding = 0) uniform LightBlock
{
vec4 position;
vec4 direction;
vec4 color;
...
} lights[8];
Теперь я вижу много примеров, где унифицированный блок записывается так:
struct LightStruct
{
vec4 position;
vec4 direction;
vec4 color;
...
};
layout(std140, binding = 0) uniform LightBlock
{
LightStruct lights[8];
};
В чем разница между этими двумя способами?
I думаю, это может помочь уменьшить количество единообразных переменных, используемых в шейдере, но я не уверен.