wgpu
wgpu 是一个跨平台、安全、纯 Rust 的图形 API。它原生运行于 Vulkan、Metal、D3D12 和 OpenGL;并在 wasm 上运行于 WebGL2 和 WebGPU 之上。
该 API 基于 WebGPU 标准,但完全是一个原生 Rust 库。它作为 Firefox、Servo 和 Deno 中 WebGPU 集成的核心。
入门
请参阅我们在线的示例 https://wgpu.rs/examples/。你可以在 examples 查看 Rust 源代码,并使用 cargo run --bin wgpu-examples <example> 直接运行它们。
学习 wgpu
如果你是 wgpu 和图形编程的新手,我们建议从 Learn Wgpu 开始。
此外,WebGPU Fundamentals 是一个 WebGPU 教程,它与我们的 API 非常相似,只是去除了 Rust 和 Javascript 之间的差异。
Wiki
我们有一个 wiki,其中包含有关有用的架构模式、调试技巧以及更多入门信息的内容。
需要帮助?想要贡献?
wgpu 社区使用 Matrix 和 Discord 进行讨论。
其他语言
要在 C 或数十种其他语言中使用 wgpu,请查看 wgpu-native。这些是 wgpu 的 C 绑定,并有一个最新的库列表,用于将支持引入其他语言。
Learn WebGPU (for C++) 是一个学习如何从 C++ 使用 wgpu-native 的好资源。
快速链接
| 文档 | 示例 | 变更日志 |
|---|---|---|
| v30 | v30 | v30 |
trunk | trunk | trunk |
欢迎贡献者!有关更多信息,请参阅 CONTRIBUTING.md。
支持的平台
| API | Windows | Linux/Android | macOS/iOS | Web (wasm) |
|---|---|---|---|---|
| Vulkan | ✅ | ✅ | 🌋 | |
| Metal | ✅ | |||
| DX12 | ✅ | |||
| OpenGL | 🆗 (GL 3.3+), or 📐 | 🆗 (GL ES 3.0+) | 📐 | 🆗 (WebGL2) |
| WebGPU | ✅ |
✅ = 一级支持
🆗 = 降级/尽力支持
📐 = 需要 ANGLE 转换层 (仅限 GL ES 3.0)。在 macOS/iOS 上,使用 angle 特性。在 Windows 上,gles 默认使用 WGL;使用 cfg(windows_angle) 构建以改用 ANGLE。
🌋 = 需要 MoltenVK 转换层
🛠️ = 不支持,但欢迎贡献
环境变量
测试、示例和 ::from_env() 方法使用一组标准化的环境变量来控制 wgpu 的行为。
WGPU_BACKEND后跟一个逗号分隔的列表,列出您想要使用的后端(vulkan、metal、dx12或gl)。WGPU_ADAPTER_NAME后跟您想要使用的适配器名称的区分大小写的子字符串(例如,1080将匹配NVIDIA GeForce 1080ti)。WGPU_DX12_COMPILER后跟您希望使用的 DX12 着色器编译器(dxc、static-dxc或fxc)。请注意,dxc要求dxcompiler.dll(最低 v1.8.2502)位于工作目录中,并且static-dxc要求启用static-dxccrate 特性。否则,它将回退到fxc。
有关更多环境变量,请参阅文档。
运行 CTS 时,请使用变量 DENO_WEBGPU_ADAPTER_NAME、DENO_WEBGPU_BACKEND、DENO_WEBGPU_POWER_PREFERENCE、DENO_WEBGPU_DX12_COMPILER 和 DENO_WEBGPU_STRICT_COMPLIANCE。
仓库概览
要了解 gfx-rs 生态系统中的所有组件,请参阅全局视图。
MSRV 策略
简而言之:如果您使用 wgpu,我们的 MSRV 是 1.87。如果您运行我们的测试或示例,我们的 MSRV 是 1.93。
如果没有正当理由,我们将避免提高 wgpu 的 MSRV,并且此类更改被视为破坏性更改。
具体细节
由于复杂的依赖关系,我们有三种 MSRV 策略:
wgpu的 MSRV 是 1.87wgpu-core(因此wgpu-hal、naga、naga-types和wgpu-types)的 MSRV 是 1.87。- 工作区的其余部分 MSRV 为 1.93。
这在 CI 中强制执行(在 "/.github/workflows/ci.yml" 中),分别使用 WGPU_MSRV、CORE_MSRV 和 REPO_MSRV 变量。
此版本只能在破坏性版本中升级,尽管我们每三个月发布一个破坏性版本。
以下规则适用:
wgpu-corecrate 绝不应要求高于 Firefox nightly 构建 MSRV 的 MSRV,该值由python/mozboot/mozboot/util.py中MINIMUM_RUST_VERSION的值决定。wgpucrate 绝不应要求高于 Servo MSRV 的 MSRV,该值由Cargo.toml中其 rust-version 声明的值决定- 仓库 MSRV 绝不应要求高于
stable - 3的 MSRV。例如,如果 stable 版本为 1.97,则仓库 MSRV 不应高于 1.94。这是为了允许使用较新更新的 操作系统提供的 rust 的用户能够构建我们的仓库。建议与 NixOS 进行交叉核对,尽管 这并非强制要求。
测试与环境变量
有关测试的信息,包括各类测试的位置以及如何运行测试。
跟踪 WebGPU 和 WGSL 草案规范
wgpu crate 旨在成为 WebGPU API 的惯用 Rust 翻译。
该规范及其着色语言 WGSL
目前仍处于“工作草案”阶段,
虽然总体框架保持稳定,
但细节经常变化。
在规范稳定之前,wgpu crate 及其实现的 WGSL 版本
可能与规范存在差异,
因为实现正在追赶规范。
wgpu 支持哪些 WGSL 特性取决于你的使用方式:
-
作为原生代码运行时,
wgpu使用 Naga 将 WGSL 代码转换为你平台原生 GPU API 的着色语言。 Naga 正在努力追赶 WGSL 规范, 通过 bugs 跟踪各种问题, 但没有关于与规范差异的简明总结。 -
在 Web 浏览器中运行(通过编译为 WebAssembly) 且未启用
"webgl"特性时,wgpu依赖于浏览器自身的 WebGPU 实现。 WGSL 着色器直接传递给浏览器, 因此由浏览器决定你可以使用哪些 WGSL 特性。 -
当在 Web 浏览器中运行且启用了
wgpu的"webgl"功能时,wgpu使用 Naga 将 WGSL 程序转换为 GLSL。 这与将wgpu作为原生代码运行时使用的 Naga 版本相同。