多个着色器中使用的一个UBO中的偏移

时间:2017-09-12 15:03:37

标签: c# opengl glsl opentk buffer-objects

我使用一个这样的统一块:

uniform matrices
{
    mat4 pv_matrix;
    mat4 screen_matrix;
};

在具有由UniformBlockBinding明确定义的相同绑定点的不同着色器中。

要使用统一缓冲区对象,需要以这种方式查询偏移量:

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

我为每个具有相同结果的着色器程序调用此代码。

如果我理解正确,则偏移量表示统一缓冲区对象的结构,该结构是所有被调用程序的结构。

多次通话是否有意义,或者它应该足够称之为?

1 个答案:

答案 0 :(得分:3)

默认情况下,统一块以shared顺序排列。因此,您只需要在一个程序中查询布局;任何也是shared且完全匹配的块声明将具有相同的布局。

或者您可以使用std140布局而不是查询任何内容。