Правильная структура структуры в GLSL-связях - PullRequest
2 голосов
/ 09 ноября 2019

Я пытался использовать следующий код для создания глобального списка дескрипторов текстур без привязки, отправленных в графический процессор с помощью UBO.

struct Material
{
    sampler2D diff;
    sampler2D spec;
    sampler2D norm;

};


layout(std140, binding = 2) uniform Materials
{
    Material materials[64];
};

Однако я думаю, что я заполняю буфернеправильно в c ++, без учета правильных смещений и т. д. Я не могу найти ничего о том, как макет std140 обрабатывает sampler2D. Как я должен это делать? Какие смещения мне нужно учитывать?

1 Ответ

3 голосов
/ 09 ноября 2019

Нет ничего особенного в ручках в этом отношении. Стандарт гласит:

Если элемент является скалярным потребляющим N базовых машинных единиц, базовое выравнивание равно N.

Сэмплеры по сути являются 64-битными целыми числами, так какчто касается "скаляров". Таким образом, базовое выравнивание этих членов - 64-битные целые числа. Но это не очень важно, потому что в std140 выравнивание структуры всегда округляется до размера vec4. Так что структура будет занимать 32 байта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...