Смещения в одном 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
макет и ничего не запрашивать .