Смещения в одном UBO, используемые в нескольких шейдерах

Я использую один единый блок, как это:

uniform matrices
{
    mat4 pv_matrix;
    mat4 screen_matrix;
};

в разных шейдерах с одинаковой точкой привязки, определенной явно UniformBlockBinding,

Для работы с объектом Uniform Buffer необходимо запросить смещения следующим образом:

int offsets = new int[Length];
GL.GetActiveUniforms(id_program, Length, indices,
ActiveUniformParameter.UniformOffset, offsets);

И я называю этот код для каждой шейдерной программы с одинаковым результатом.

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

Имеет ли смысл звонить много раз, или этого должно быть достаточно, чтобы звонить ему?

1 ответ

Решение

По умолчанию однородные блоки расположены в shared упорядоченность. Таким образом, вам нужно только запросить макет в одной программе; любое объявление блока, которое также shared и точно соответствует тому, что будет иметь тот же макет.

Или вы могли бы просто использовать std140 макет и ничего не запрашивать .

Другие вопросы по тегам