GLSL中几个修饰符的简单讲解

uniform
attribute
varying

---Uniform---

Uniform 外部application传递给vertex/fragment shader变量修饰。
A。他是通过 glUniform**()
B. 在Uniform、vertex, fragment shader程序内部,Uniform和contst类型,不能被shader修改

注意
1.被uniform修饰的变量,只能被shader使用,不能写入
2.如果uniform在vertex/fragment 两者的声明方式一样,则他们可以被vertex/fragment共享。理解为:

uniform float a; 在顶点着色器和片源着色器写的一模一样

使用场景:
1.变换矩阵、材质、光照、颜色等

使用:

uniform:修饰符 mat4:类型 viewProjMatrix:变量名
uniform mat4 viewProjMatrix; // 投影与视图模型矩阵
uniform mat4 viewMatrix; // 模型视图矩阵
uniform mat4 lightPosition; // 光源位置

---attribute---

1.attribute变量,只能在vertex Shader中使用。(不能在片源着色器中使用和声明)
2.在application中glBindAttribLocation()函数,来绑定每个变量的位置,
然后再使用glVertexAttribPointer()为变量赋值,
可以使用glGetAttribLocation来获取变量

使用场景:
1.顶点坐标、法线、纹理坐标、顶点颜色等等

使用:
attribute vec4 a_position;

gl_position = a_position * viewProjMatrix;

----varying---

varying:是vertex与fragment shader之间做数据传递使用。如果需要做传递,则必须保证vertex shader与 fragment shader中两者的声明
必须保持一直(修饰符,类型,变量名)否则,不可以实现数据传递。

使用场景:
1.纹理坐标、顶点颜色等等

你可能感兴趣的:(GLSL中几个修饰符的简单讲解)