众所周知,在 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') - 分量:通常是向量的一部分,譬如
gl.getUniformLocation(program, 'u_someVec3[0]')是获取第 0 个元素(元素类型是 vec3)的 location - 结构体成员:
gl.get
本文对比了WebGL 1.0/2.0与WebGPU在Uniform方面的差异,详细介绍了如何在WebGL中设置Uniform,包括矩阵赋值、标量与向量赋值、纹理传递。在WebGPU中,Uniform分为标量/向量/矩阵、纹理和采样器,并通过资源绑定组进行统一管理,减少了CPU到GPU的通信成本,提高了性能。
订阅专栏 解锁全文
2264

被折叠的 条评论
为什么被折叠?



