OpenGL的GLSL语法基础
OpenGL GLSL语法基础
基本类型
sampler
采样器类型,作为访问纹理图像的不透明句柄。
类型转换
GLSL中变量的类型转换非常严格,没有隐式类型转换,比C++的要求更严格。不同类型间的转换需要使用类似构造函数的语法。
向量和矩阵
向量特性
- 向量不是数组(例如
float coeff[3]
才是数组) - OpenGL的向量使用列主序,与C/C++不同,相当于斜对角镜像
- 向量默认是float类型,如vec2/3/4,mat2/3/4或mat2x3,mat3x4
- 整型向量使用ivec前缀
- 布尔向量使用bvec前缀
矩阵表示
mat3x4表示三列四行的矩阵,对应C++中的[4][3]矩阵
限定符
布局限定符(layout)
- 只能用于顶点着色器的输入
- 顶点着色器的输出和片段着色器不可使用
1 | layout(location = 0) in vec4 vPosition; // 指定输入变量vPosition的绑定位置为0 |
数据传输
1 | // 将顶点数组传入着色器向量 |
类型限定符
in
用于声明着色器的输入变量
out
声明着色器阶段的输出变量,这些变量会传递到下一个着色器阶段
invariant
确保多道渲染时着色器计算结果的一致性,避免因计算顺序等因素导致的误差
uniform
- 指定uniform类型变量,其值在绘制调用间保持不变
- 操作uniform的方法:
1 | glUseProgram(programId); |
评论