gfx-rs/wgpu
GitHub: gfx-rs/wgpu
基于 WebGPU 标准的跨平台、安全、纯 Rust 图形与计算 API,统一封装 Vulkan、Metal、D3D12 等底层后端。
Stars: 16525 | Forks: 1221
# wgpu
[](https://github.com/gfx-rs/wgpu/actions)
[](https://codecov.io/gh/gfx-rs/wgpu)
`wgpu` 是一个跨平台、安全、纯 Rust 的图形 API。它原生运行在 Vulkan、Metal、D3D12 和 OpenGL 上;并在 wasm 上基于 WebGL2 和 WebGPU 运行。
该 API 基于 [WebGPU 标准][webgpu],但这是一个完全原生的 Rust 库。它是 Firefox、Servo 和 Deno 中 WebGPU 集成的核心。
## 快速入门
请在 查看我们的在线示例。您可以在 [examples](examples) 查看 Rust 源代码,并使用 `cargo run --bin wgpu-examples ` 直接运行它们。
### 学习 `wgpu`
如果您是 `wgpu` 和图形编程的新手,我们建议从 [Learn Wgpu] 开始。
此外,[WebGPU Fundamentals] 是一个 WebGPU 教程,其内容与我们的 API 非常相似,除了 Rust 和 Javascript 之间的差异。
### 维基 (Wiki)
我们有一个 [wiki](https://github.com/gfx-rs/wgpu/wiki),其中包含有关有用的架构模式、调试技巧以及更多入门信息。
### 需要帮助?想要贡献?
wgpu 社区使用 Matrix 和 Discord 进行讨论。
- [](https://matrix.to/#/#wgpu:matrix.org) - 讨论 wgpu 的开发。
- [](https://matrix.to/#/#wgpu-users:matrix.org) - 讨论库的使用及周边生态系统。
- [
](https://discord.gg/X3MYBNXUMJ) - Rust Gamedev Discord 上的专门支持频道。
### 其他语言
要在 C 或数十种其他语言中使用 wgpu,请查看 [wgpu-native](https://github.com/gfx-rs/wgpu-native)。这些是 wgpu 的 C 绑定,并包含支持其他语言的库的最新列表。
[Learn WebGPU (for C++)] 是学习如何从 C++ 使用 wgpu-native 的好资源。
## 快速链接
| 文档 | 示例 | 变更日志 |
|:---------------------:|:-------------------------:|:-----------------------:|
| [v28][rel-docs] | [v28][rel-examples] | [v28][rel-change] |
| [`trunk`][trunk-docs] | [`trunk`][trunk-examples] | [`trunk`][trunk-change] |
欢迎贡献者!有关更多信息,请参见 [CONTRIBUTING.md][contrib]。
## 支持的平台
| API | Windows | Linux/Android | macOS/iOS | Web (wasm) |
| ------ | ------------------ | ------------------ | ------------------ | ------------------ |
| Vulkan | ✅ | ✅ | 🌋 | |
| Metal | | | ✅ | |
| DX12 | ✅ | | | |
| OpenGL | 🆗 (GL 3.3+) | 🆗 (GL ES 3.0+) | 📐 | 🆗 (WebGL2) |
| WebGPU | | | | ✅ |
✅ = 一流支持
🆗 = 低版本/尽力支持
📐 = 需要 [ANGLE](https://github.com/gfx-rs/wgpu/wiki/Running-on-ANGLE) 转换层(仅限 GL ES 3.0)
🌋 = 需要 [MoltenVK](https://vulkan.lunarg.com/sdk/home#mac) 转换层
🛠️ = 不支持,但接受贡献
## 环境变量
测试、示例和 `::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-dxc` crate 功能。否则,它将回退到 `fxc`。
有关更多环境变量,请参见 [文档](https://docs.rs/wgpu/latest/wgpu/index.html?search=env)。
运行 CTS 时,请使用变量 `DENO_WEBGPU_ADAPTER_NAME`、`DENO_WEBGPU_BACKEND`、`DENO_WEBGPU_POWER_PREFERENCE`。
## 仓库概览
有关 gfx-rs 生态系统中所有组件的概览,请参见 [全景图](./docs/big-picture.png)。
## MSRV 策略
TL;DR:如果您正在使用 `wgpu`,我们的 MSRV 是 **1.87**。如果您正在运行我们的测试或示例,我们的 MSRV 是 **1.93**。
我们将避免在没有充分理由的情况下提升 `wgpu` 的 MSRV,此类更改被视为破坏性更改。
## 测试和环境变量
[关于测试的信息](./docs/testing.md),包括各类测试的位置以及如何运行测试。
## 追踪 WebGPU 和 WGSL 草案规范
`wgpu` crate 旨在成为 [WebGPU API][webgpu spec] 的地道 Rust 翻译。
该规范及其着色语言 [WGSL][wgsl spec]
都仍处于“工作草案”阶段,
虽然总体轮廓稳定,
但细节经常变化。
在规范稳定之前,`wgpu` crate 及其实现的 WGSL 版本
可能会与规范中指定的不同,
因为实现正在追赶。
`wgpu` 支持的确切 WGSL 功能取决于您如何使用它:
- 作为原生代码运行时,`wgpu` 使用 [Naga][naga]
将 WGSL 代码翻译为您平台原生 GPU API 的着色语言。
Naga 正在努力追赶 WGSL 规范,
并有 [bug][naga bugs] 追踪各种问题,
但没有与规范差异的简明摘要。
- 在 Web 浏览器中运行(通过编译为 WebAssembly)
且未启用 `"webgl"` 功能时,
`wgpu` 依赖于浏览器自身的 WebGPU 实现。
WGSL 着色器只是简单地传递给浏览器,
因此这决定了您可以使用的 WGSL 功能。
- 在 Web 浏览器中运行且启用了 `wgpu` 的 `"webgl"` 功能时,
`wgpu` 使用 Naga 将 WGSL 程序翻译为 GLSL。
这使用的 Naga 版本与您将 `wgpu` 作为原生代码运行时相同。
[](https://github.com/gfx-rs/wgpu/actions)
[](https://codecov.io/gh/gfx-rs/wgpu)
`wgpu` 是一个跨平台、安全、纯 Rust 的图形 API。它原生运行在 Vulkan、Metal、D3D12 和 OpenGL 上;并在 wasm 上基于 WebGL2 和 WebGPU 运行。
该 API 基于 [WebGPU 标准][webgpu],但这是一个完全原生的 Rust 库。它是 Firefox、Servo 和 Deno 中 WebGPU 集成的核心。
## 快速入门
请在 具体细节
由于依赖关系复杂,我们有三个 MSRV 策略: - `wgpu` 的 MSRV 是 **1.87** - `wgpu-core`(以及 `wgpu-hal`、`naga` 和 `wgpu-types`)的 MSRV 是 **1.87**。 - 工作区的其余部分 MSRV 为 **1.93**。 这通过 CI(在 "/.github/workflows/ci.yml" 中)使用 `WGPU_MSRV`、`CORE_MSRV` 和 `REPO_MSRV` 变量分别强制执行。 此版本只能在破坏性版本中升级,尽管我们每三个月发布一次破坏性版本。 以下规则适用: - `wgpu-core` crate 的 MSRV 永远不应高于 Firefox 夜间构建的 MSRV,具体由 [`python/mozboot/mozboot/util.py`][moz-msrv] 中的 `MINIMUM_RUST_VERSION` 值决定。 - `wgpu` crate 的 MSRV 永远不应高于 Servo 的 MSRV,具体由 其 [`Cargo.toml`][servo-msrv] 中的 rust-version 声明值决定 - 仓库 MSRV 永远不应高于 `stable - 3`。例如,如果 stable 位于 1.97,则仓库 MSRV 不应高于 1.94。这是为了让那些使用相当更新的操作系统提供的 Rust 的人能够构建我们的仓库。可以考虑与 [NixOS][nixos-msrv] 进行交叉核对,尽管这 不是必需的。标签:3D图形, AI工具, D3D12, Deno, Firefox, GPU编程, Metal, OpenGL, Rust, Servo, Vulkan, WASM, WebGL2, WebGPU, 可视化界面, 图形API, 图形渲染, 并行计算, 底层库, 渲染库, 游戏开发, 着色器, 网络流量审计, 计算机图形学, 通知系统, 通知系统