以上是opengl es3.2官方文档中对于 uniform限制符的描述,主要说了几点:
1在shader代码中,它必须申明为全局变量(global variable)。
2它的值在整个图元处理的过程中不会发生改变。
3它的值是只读的(read-only),可以通过api初始化也可以在链接期初始化。
4采样器(用于访问纹理)不需要初始化。
5它可以用来修饰任何基础类型,即使是结构体或各种类型的数组。
本质上说,uniform就是在应用程序和各个shader之间搭建了一个桥梁,让它们之间可以传递一个在各个shader内不可以修改值的变量。
首先在着色器中申明一个uniform修饰的变量
然后在链接期 生成一个uniform变量列表(variable’s initializer),如果需要设置着色器中gScale的值,必须先获取列表中的索引,通过glGetUniformLocation()函数获得。
ShaderProgram表示着色器程序,是通过函数直接创建的
gScale即变量名字
gScaleLocation就是gScale变量在当前uniform变量列表中的索引值(除非再次调用glLinkProgram()函数重新链接项目,否则这个索引值不会改变)。有了这个值之后,在程序中就可以通过
来给这个变量赋值。
函数说明
Reference:
以上是opengl es3.2官方文档中对于 uniform限制符的描述,主要说了几点: