众所周知,在 GPU 跑可编程管线的时候,着色器是并行运行的,每个着色器入口函数都会在 GPU 中并行执行。每个着色器对一大片统一格式的数据进行冲锋,体现 GPU 多核心的优势,可以小核同时处理数据;不过,有的数据对每个着色器都是一样的,这种数据的类型是“uniform”,也叫做统一值。
这篇文章罗列了原生 WebGL 1/2 中的 uniform 资料,以及 WebGPU 中的 uniform 资料,有一些例子供参考,以用来比对它们之间的差异。
1. WebGL 1.0 Uniform
1.1. 用 WebGLUniformLocation 寻址
在 WebGL 1.0 中,通常是在 JavaScript 端保存 WebGLUniformLocation
以向着色器程序传递 uniform 值的。
使用 gl.getUniformLocation()
方法获取这个 location,有如下几种方式
- 全名:
gl.getUniformLocation(program, 'u_someUniformVar')
- 分量:通常是向量的一部