顶点着色器内建特殊变量
gl_VertexID
:输入变量,保存处理的每一个顶点的索引值,一般由高精度修饰
gl_InstanceID
:实例化时保存当前画的图形的编号
gl_Position
:最终计算出来的顶点,高精度浮点型四维向量
gl_PointSize
:每个点的大小
gl_FrontFacing
:布尔值,表示要不要做face-cutting
顶点着色器内建Uniform
struct gl_DepthRangeParameters
{
highp float near;
hightp float far;
hightp float diff;
}
uniform gl_DepthRangeParameters gl_DepthRange;
顶点着色器内建常量
const mediump int gl_MaxVertexAttribs = 16;
const mediump int gl_MaxVertexUniformVectors = 256;
const mediump int gl_MaxVertexOutputVectors = 16;
const mediump int gl_MaxVertexTextureImageUnits = 16;
const mediump int gl_MaxCombinedTextureImageUnits = 32;
片元着色器内建特殊变量
gl_FragCoord
:片元着色器中一个只读变量,这个变量保存片元的窗口相对坐标
gl_FrontFacing
:片元着色器中的一个只读变量,这个布尔变量在图元为正面是true,否则为false
gl_PointCoord
:当你创建了一个点精灵,会返回点精灵的位置
gl_FragDepth
:一个只写的输出变量,在片元着色器写入时,覆盖片元的固定功能深度值,尽量减少手动实现深度值写入,这个功能需要谨慎使用,因为它可能禁用许多GPU的深度优化。例如,许多GPU都有"Early-Z"的功能,在执行片元着色器之前进行深度测试,使用"Early-Z"的好处就是不能通过深度测试的片段就不会被着色(从而降低了着色器调用次数,提高了性能),但是使用gl_FragDepth就必须禁用该功能,因为GPU在执行着色器之前不知道深度值。
片元着色器内建常量
const mediump int gl_MaxFragmentInputVectors = 15
const mediump int gl_MaxTextureImageUnits = 16
const mediump int gl_MaxFragmentUniformVectors = 224
const mediump int gl_MaxDrawBuffers = 4
const mediump int gl_MinProgramTexelOffset = -8
const mediump int gl_MaxProgramTexelOffset = 7
gl_MaxFragmentInputVectors
:片元着色器输入的最大数量
gl_MaxFragmentUniformVectors
:可用纹理图像单元的最大数量
gl_MaxFragmentUniformVectors
:片元着色器可用vec4 uniform变量最大数量
gl_MaxDrawBuffers
:多重渲染目标最大支持数量
常用内建函数
dot
:点乘
cross
:叉乘
texture2D
:用于对纹理采样
normalize
:对一个向量归一化
clamp
:将一个向量固定在一个最小值和最大值之间