C# 多个着色器中使用的一个UBO中的偏移
我使用一个统一块,如下所示:C# 多个着色器中使用的一个UBO中的偏移,c#,opengl,glsl,opentk,buffer-objects,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, ActiveUniformParamete
uniform matrices
{
mat4 pv_matrix;
mat4 screen_matrix;
};
在具有由UniformBlockBinding
明确定义的相同绑定点的不同着色器中
要使用统一缓冲区对象,需要通过以下方式查询偏移:
int offsets = new int[Length];
GL.GetActiveUniforms(id_program, Length, indices,
ActiveUniformParameter.UniformOffset, offsets);
我为每个着色器程序调用这段代码,结果相同
如果我理解正确,偏移量表示统一缓冲区对象的结构,它是所有被调用程序的一个
多次调用有意义吗?还是只需调用一次就足够了?默认情况下,统一块按
共享的顺序排列。因此,您只需要在一个程序中查询布局;任何块声明也是共享的
,并且与该块声明完全匹配,将具有相同的布局
或者您可以只使用std140
布局,而不查询任何内容。默认情况下,统一块在共享
顺序中布局。因此,您只需要在一个程序中查询布局;任何块声明也是共享的
,并且与该块声明完全匹配,将具有相同的布局
或者您可以只使用std140布局,而不查询任何内容