WebGPU为什么要封装三套api?
-
摘录的相关介绍:WebGPU是一套基于浏览器的图形API,浏览器封装了现代图形API(Dx12、Vulkan、Metal)。
有两个问题:
1、为什么不像webgl那样只对Vulkan进行封装呢,是为了更好的性能吗,据我了解,Vulkan除了macos都是支持的。2、目前的封装是这么一种调用顺序吗:
if(windows && supportDX12) Dx12;
else if(mac || ios) Metal;
else Vulkan;只找到一个相关的讨论,但并不怎么理解他们讨论的内容。。。[讨论地址]
google的dawn:
- D3D12 on Windows 10
- Metal on macOS and iOS
- Vulkan on Windows, Linux, ChromeOS, Android and Fuchsia
- OpenGL as best effort where available
-
-
很大程度上,WebGPU 的出现就是为了 Mac OS & IOS,WebGL 发展缓慢的一个很重要的原因就是苹果不支持,直到这两年才将WebGL的标准移植到 Metal,所以WebGPU 制定之初,就是为了满足 Metal,毕竟Mac & IOS 也占据了半壁江山
除此之外,D3D12是目前最先进的图形API,性能也确实是最好的,所以对于支持D3D12的设备,优先使用D3D12肯定是最好的。 -
封装顺序你写的基本是正确的, Dawn 的官网已经说明了:
但这个顺序,对大部分程序来说不是运行时的选择,而会是编译时的选择,针对不同操作系统打包时,只编译其中一种就行,比如,win10就编译D3D12的部分,Mac编译 Metal, 其他系统才会编译 Vulkan。
-