内建变量
1、顶点着色器变量
gl_Position
它是顶点着色器的裁剪空间输出位置向量
gl_PointSize
我们能够选用的其中一个图元是GL_POINTS,如果使用它的话,每一个顶点都是一个图元,都会被渲染为一个点。我们可以通过OpenGL的glPointSize函数来设置渲染出来的点的大小
glEnable(GL_PROGRAM_POINT_SIZE);
gl_VertexID
整型变量gl_VertexID储存了正在绘制顶点的当前ID。当(使用glDrawElements)进行索引渲染的时候,这个变量会存储正在绘制顶点的当前索引。当(使用glDrawArrays)不使用索引进行绘制的时候,这个变量会储存从渲染调用开始的已处理顶点数量。
2、片元着色器变量
gl_FragCoord
gl_FragCoord的x和y分量是片段的窗口空间(Window-space)坐标,其原点为窗口的左下角。
gl_FrontFacing
gl_FrontFacing变量是一个bool,如果当前片段是正向面的一部分那么就是true,否则就是false。这个变量只可读取,不可修改。
gl_FragDepth
要想设置深度值,我们直接写入一个0.0到1.0之间的float值到输出变量就可以了:
gl_FragDepth = 0.0; // 这个片段现在的深度值为 0.0
接口块
在shader中可以输入输出类似于结构体的数据块
out VS_OUT
{
vec2 TexCoords;
} vs_out;
void main()
{
gl_Position = projection * view * model * vec4(aPos, 1.0);
vs_out.TexCoords = aTexCoords;
}
in VS_OUT
{
vec2 TexCoords;
} fs_in;
uniform sampler2D texture;
void main()
{
FragColor = texture(texture, fs_in.TexCoords);
}
事例代码中大写的"VS_OUT"我块名,前后必须一致,小写的为实例名,可以变动。