WebGL 与 WebGPU

WebGPU作为新的Web标准,提供比WebGL更高效、灵活和现代的图形编程接口。它采用装配式编码风格,允许在WebWorker中访问,实现多线程调度GPU。WebGPU在性能、功能和设计上具有优势,适合高性能渲染需求。与WebAssembly不同,WebGPU专注于图形渲染,两者可结合使用以提升Web应用性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

显卡要安装显卡驱动程序,通过显卡驱动程序暴露的 API 我们就可以操作 GPU 完成图形处理器的操作。问题是,显卡驱动和普通编程界的汇编一样,底层,不好写,于是各大厂就做了封装。于是 OpenGL 应运而生,负责上层接口封装并与下层显卡驱动打交道,但是,众所周知,它的设计风格已经跟不上现代 GPU 的特性了。

上个世纪 90 年代提出了 OpenGL 技术,WebGL 是基于 OpenGL ES 做出来。OpenGL 在那个显卡羸弱的年代发挥了它应有的价值。

Microsoft 为此做出来最新的图形API 是 Direct3D,Apple 为此做出来最新的图形API 是 Metal,有一个有名的组织 -- Khronos 做出来了 Vulkan。这就是现代三大图形 API。

OpenGL 在 2006 年丢给了 Khronos 管,现在各个操作系统基本都没怎么装这个很老的图形驱动了。那么,基于 OpenGL ES 的 WebGL 为什么能跑在各个操作系统的浏览器?因为 WebGL 再往下已经可以不是 OpenGL ES 了,在 Windows 上现在是通过 D3D 转译到显卡驱动的,在 macOS 则是 Metal,只不过时间越接近现在,这种非亲儿子式的实现就越发困难。苹果的 Safari 浏览器最近几年才姗姗支持 WebGL 2.0,而且已经放弃了 OpenGL ES 中 GPGPU 的特性了,或许看不到 WebGL 2.0 的 GPGPU 在 Safari 上实现了。

下一代的 Web 图形接口已经不是 GL 一脉的了,不叫 WebGL 3.0,而是采用了更贴近硬件名称的 WebGPU。WebGPU 从根源上和 WebGL 就不是一个时代的,无论是编码风格还是性能表现上。

WebGL 的编码风格

WebGL 的编程风格延续了 OpenGL 的风格。学习过 WebGL 接口的同学应该用过:gl 变量,即 WebGLRenderingContext 对象,WebGL 2.0 则是 WebGLRenderingContext2。

下面是创建顶点和片元着色器的示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

const vertexShaderCode = `attribute vec4 a_position;

void main() {

    gl_Position = a_position;

}`

 const fragmentShaderCode = `precision mediump float;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值