opengl4.3 uniform block & UNIFORM_BUFFER

在opengl4.3中有一种buffer叫做UNIFORM_BUFFER. 这种buffer可以在shader中使用。 在shader中的声明为一个uniform block. 以下为一个uniform 的实例:

layout(std140) uniform Transform {
mat4 M1;
layout(column_major) mat4 M2;
mat3 N1;
};

通常的使用方法为:

glGenBuffer()
glBindBuffer(GL_UNIFORM_BUFFER,);
glBufferData(); //生成buffer,并复制数据

UniformBlockBinding( uint program,uint uniformBlockIndex, uint uniformBlockBinding );   //绑定buffer的数据到shader的uniform block.
其中uniformBlockBinding为前面建立的buffer引用,uniformBlockIndex为shader中为transform分配的Index. 这个index由编译器指定,可以通过glGetUniformBlockIndex( uint program, const char *uniformBlockName ) 来获取。

绑定之后,buffer中的数据就可以在shader中引用了。但是有一点需要注意,就是这个buffer和shader里面的数据的格式,在shader中声明这个uniform block 的时候通过layout(std140)来指定buffer的格式。如此,shader中就可以准确的知道buffer中的数据格式了。



本文地址: http://www.bagualu.net/wordpress/archives/2605 转载请注明




发表评论

电子邮件地址不会被公开。 必填项已用*标注