一、类型限定符:
const, in, out, uniform
1、in: 指定变量为着色器阶段的一个输入,输入可能是顶点属性(用于顶点着色器)或插值变量(用于片段着色器).
片段着色器可进一步限制其输入值,但要和in组合使用才有效:
centroid: 在打开多点采样时,强迫一个片段输入变量的采样位于图元像素的覆盖区域内。
smooth: 以透视校正的方式插值片段输入变量。
flat: 不对片段输入插值。
noperspective: 线性插值片段变量。
2、out: 指定变量为着色器阶段的一个输出.
顶点着色器可以使用centroid关键字限定其输出值,但必须有一个匹配的centroid片段着色器输入。
3、uniform: 指定这个值从应用程序传递个着色器,并在一个特定的图元中保持为常数值。uniform变量是由顶点着色器和片段着色器
共享的,必须声明为全局变量。
eg: uniform vec4 baseColor;
在着色器中,可以通过名字来引用baseColor, 但是为了在应用程序中设置它的值,需要一些额外工作。当GLSL编译器连接到着色
器程序后,它会创建一个表格,其中包含了所有的uniform变量。为了在;应用程序中设置baseColor的值,需要获取baseColor在表
中的索引值:
GLint glGetUniformLocation(GLuint program, const char* name);
获取了uniform变量的相关索引值,就可以设置这个变量的值:
void glUniform2iv(GLuint location TYPE value);
void glUniform3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *values);
void glUniformMatrix3fv(GLint location, GLsizei count,