glsl内置变量
1. 顶点着色器内置变量
1.1 gl_VertexID
-
类型:
int
-
说明:返回当前顶点的索引(从 0 开始)。在使用顶点数组时,每个顶点都会有一个唯一的索引。
1.2 gl_InstanceID
-
类型:
int
-
说明:返回当前实例化渲染的实例索引。当进行实例化渲染时(即渲染多个相同的物体),该变量提供实例的编号。
1.3 gl_Position
-
类型:
vec4
-
说明:返回顶点在裁剪空间中的位置。在顶点着色器中,必须设置该变量以定义每个顶点的位置。它决定了顶点的位置以及如何在屏幕上显示。
1.4 gl_PointSize
-
类型:
float
-
说明:定义点精灵的大小。当使用点绘制时,该变量可以用来调整点的大小。
1.5 gl_FragCoord
-
类型:
vec4
-
说明:这是片段着色器中的一个内置变量,表示片段的位置,包含
x
(窗口空间的水平坐标)、y
(垂直坐标)、z
(深度值)和w
(齐次坐标,通常为 1)。
1.6 gl_FrontFacing
-
类型:
bool
-
说明:指示当前处理的片段是否是前面朝向的。如果为
true
,则表示当前片段是前面朝向的;如果为false
,则是后面朝向的。可以用来在片段着色器中处理正面和背面的颜色。
1.7 gl_TexCoord
(已经过时,使用 gl_FragCoord
替代)
-
类型:
vec4
-
说明:这个变量在顶点着色器中用于传递纹理坐标,但它已被废弃,建议使用
gl_FragCoord
替代。
2. 片段着色器内置变量
2.1 gl_FragColor
-
类型:
vec4
-
说明:片段着色器的输出颜色。通常在片段着色器中用来设置每个片段的最终颜色值,
gl_FragColor
被写入屏幕的像素位置。
2.2 gl_FragDepth
-
类型:
float
-
说明:设置片段的深度值。在深度测试时,片段的深度值会被与现有的深度值进行比较。如果它小于现有的深度值,片段将被保留。
2.3 gl_FragCoord
-
类型:
vec4
-
说明:返回当前片段在窗口坐标空间的位置。
x
和y
是屏幕空间的坐标,z
是片段的深度值,w
通常是 1.0。
2.4 gl_PointCoord
-
类型:
vec2
-
说明:在点绘制模式下,片段着色器使用该变量来获取当前片段在点大小内的位置(坐标范围是 [0,1])。对于点精灵来说,这可以用来计算纹理坐标等。
3. 光栅化阶段相关内置变量
3.1 gl_ClipDistance
-
类型:
float[]
-
说明:用于在裁剪过程中存储裁剪平面的距离。在顶点着色器或几何着色器中,您可以设置
gl_ClipDistance
数组的元素来裁剪不符合条件的片段。
3.2 gl_ClipVertex
-
类型:
vec4
-
说明:该变量通常在几何着色器中设置。它用于指定裁剪空间中的顶点位置。
4. 管线状态信息
4.1 gl_MaxVertexAttribs
-
类型:
int
-
说明:返回当前平台支持的最大顶点属性数量。
4.2 gl_MaxVertexUniformVectors
-
类型:
int
-
说明:返回顶点着色器中每个程序可以使用的最大顶点着色器常量的数量。
4.3 gl_MaxFragmentUniformVectors
-
类型:
int
-
说明:返回片段着色器中每个程序可以使用的最大片段着色器常量的数量。
5. 内置常量和定义
5.1 PI
-
类型:
float
-
说明:圆周率常量,约等于 3.14159。
5.2 E
-
类型:
float
-
说明:自然对数的底数常量,约等于 2.71828。
5.3 MAX_VERTEX_ATTRIBS
-
类型:
int
-
说明:返回支持的最大顶点属性数量。
5.4 MAX_TEXTURE_IMAGE_UNITS
-
类型:
int
-
说明:返回最多支持的纹理单位数量。
6. 扩展变量(与渲染目标相关)
6.1 gl_Layer
-
类型:
int
-
说明:在多层渲染时,控制渲染目标的层。
6.2 gl_ViewportIndex
-
类型:
int
-
说明:指定当前渲染目标的视口索引。
总结
GLSL 提供了丰富的内置变量,帮助开发者在顶点着色器、片段着色器等阶段与 OpenGL 渲染管线进行交互。这些内置变量通常是为了提供渲染过程中需要的坐标、颜色、深度、法线等信息。例如,gl_Position
用于顶点着色器,定义顶点的空间位置,而 gl_FragColor
则用于片段着色器,指定片段的最终颜色。通过合理使用这些内置变量,您可以方便地控制图形渲染的各个方面。