在多个着色器中使用的一个 UBO 中的偏移量
the offsets in one UBO used in multiple shaders
我像这样使用一个统一块:
uniform matrices
{
mat4 pv_matrix;
mat4 screen_matrix;
};
在具有由 UniformBlockBinding
明确定义的相同绑定点的不同着色器中。
要使用统一缓冲区对象,需要以这种方式查询偏移量:
int offsets = new int[Length];
GL.GetActiveUniforms(id_program, Length, indices,
ActiveUniformParameter.UniformOffset, offsets);
我为每个着色器程序调用此代码,结果相同。
如果我理解正确,偏移量表示统一缓冲区对象的结构,它是所有被调用程序的对象。
多次调用有意义还是调用一次就足够了?
默认情况下,统一块按 shared
顺序排列。这样,您只需要在一个程序中查询布局;任何也是 shared
并且完全匹配的块声明将具有相同的布局。
或者您可以只使用 std140
布局而不查询 任何内容。
我像这样使用一个统一块:
uniform matrices
{
mat4 pv_matrix;
mat4 screen_matrix;
};
在具有由 UniformBlockBinding
明确定义的相同绑定点的不同着色器中。
要使用统一缓冲区对象,需要以这种方式查询偏移量:
int offsets = new int[Length];
GL.GetActiveUniforms(id_program, Length, indices,
ActiveUniformParameter.UniformOffset, offsets);
我为每个着色器程序调用此代码,结果相同。
如果我理解正确,偏移量表示统一缓冲区对象的结构,它是所有被调用程序的对象。
多次调用有意义还是调用一次就足够了?
默认情况下,统一块按 shared
顺序排列。这样,您只需要在一个程序中查询布局;任何也是 shared
并且完全匹配的块声明将具有相同的布局。
或者您可以只使用 std140
布局而不查询 任何内容。