统一变量
uniform vec4 v4;
uniform 修饰的变量。
1.统一变量的命名空间在顶点着色器和片段着色器中都是共享的。如果顶点和片段着色器一起链接到一个程序对象,则会共享同一组统一变量。所以如果顶点和片段着色器中都声明一个统一变量,则两个声明必须匹配
2.统一变量通常保存在硬件中,这个区域被称作“常量存储”,是硬件中为存储常量值而分配的特殊空间。
3.常量储存的大小固定,所以会限制统一变量的使用数量。可以查询程序支持的最大个数。gl_MaxVertextUniformVectors 和gl_MaxFragmenttUniformVectors
统一变量块:更有优势呦~
uniform TransformBlock
{
mat4 m4;
mat3 m3;
}
1.只需要设置一次,就可以在多个程序中共享
2.一般可以存储更大量的统一变量数据。
3.统一缓冲区对象之间切换比一次单独加载一个统一变量更高效(空间换时间)
布局限定符
1.使用layout指定,如layout(shared, column_major) uniform;
2.默认的为shared,column_major,也就是共享、列优先顺序布局
3.如果使用packed模式,则在使用时必须查询偏移位置,且无法在着色器合程序之间共享。