用于连接 shader 的上一阶段;
centroid 为质心采样关键字,用于避免伪像,不可用于顶点着色器;
顶点着色器中的 out 和片段着色器中的 in 名称相同时构成接口,必须具有相同的类型和精度;
in vec4 position;
centroid in vec2 TexCoord;
flat in vec3 myColor;
用于连接 shader 的下一阶段;
centroid 为质心采样关键字,用于避免伪像 ,不可用于顶点着色器;
顶点着色器中的 out 和片段着色器中的 in 名称相同时构成接口,必须具有相同的类型和精度;
out vec3 normal;
centroid out vec2 TexCoord;
invariant centroid out vec4 Color;
flat out vec3 myColor;
它通过application调用函数glUniform()函数赋值的。
uniform是全局的(Global),全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。
它不能被shader程序修改.(shader只能用,不能改,只能等外部程序重新重置或更新。)
uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
uniform sampler2D tex;
只能从客户端把数据传递到顶点着色器,也只能在顶点着色器里面使用(它不能在fragment shader中声明attribute变量,也不能被fragment shader中使用)。
一般用来修饰顶点数据、纹理坐标、颜色、法线,即一切和坐标、和颜色有关的数据。
在application中,一般用函数glBindAttribLocation()来绑定每个attribute变量的位置,然后用函数glVertexAttribPointer()为每个attribute变量赋值。
attribute vec4 position;
用于连接顶点着色器和片段着色器,从顶点着色器向片段着色器传递变量。
一般vertex shader修改varying变量的值,然后fragment shader使用该varying变量的值。
因此varying变量在vertex和fragment shader二者之间的声明必须是一致的
(application不能使用此变量,该变量是可变化的)
varying vec3 normal;
它通过application调用函数glUniform()函数赋值的。
uniform是全局的(Global),全局意味着uniform变量必须在每个着色器程序对象中都是独一无二的,而且它可以被着色器程序的任意着色器在任意阶段访问。
它不能被shader程序修改.(shader只能用,不能改,只能等外部程序重新重置或更新。)
uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。
uniform sampler2D tex;
变量gl_Position
它并没有类型in、out或是uniform的声明,而是直接使用,且在后面的程序中也未被引用。原来它是默认是归一化的裁剪空间坐标,xyz各个维度的范围为-1到1,仅能在顶点着色器中使用,既是输入也是输出。gl_Position赋值范围就是float的取值范围(32位),只不过只有[-1,1]区间的片元被绘制。它是vec4类型的,不能重声明为dvec4等类型。
变量gl_FragColor
控制输出的颜色(rgba),(在片段着色器中通过out的方式,在3.3版本之前,默认不需要out),如果你在片段着色器中没有定义输出颜色,OpenGL会把你的物体渲染为黑色(或白色)。