ITADN
gfx-rs/wgpu
gfx-rs/wgpu · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

wgpu

Build Status codecov.io

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 进行讨论。

  • [#wgpu:matrix.org - 讨论 wgpu 的开发。
  • [#wgpu-users:matrix.org - 讨论使用该库及其周边生态系统。
  • #wgpu on the Rust Gamedev Discord - Rust Gamedev Discord 上的专用支持频道。

其他语言

要在 C 或数十种其他语言中使用 wgpu,请查看 wgpu-native。这些是 wgpu 的 C 绑定,并有一个最新的库列表,用于将支持引入其他语言。

Learn WebGPU (for C++) 是一个学习如何从 C++ 使用 wgpu-native 的好资源。

快速链接

文档示例变更日志
v30v30v30
trunktrunktrunk

欢迎贡献者!有关更多信息,请参阅 CONTRIBUTING.md

支持的平台

APIWindowsLinux/AndroidmacOS/iOSWeb (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 后跟一个逗号分隔的列表,列出您想要使用的后端(vulkanmetaldx12gl)。
  • WGPU_ADAPTER_NAME 后跟您想要使用的适配器名称的区分大小写的子字符串(例如,1080 将匹配 NVIDIA GeForce 1080ti)。
  • WGPU_DX12_COMPILER 后跟您希望使用的 DX12 着色器编译器(dxcstatic-dxcfxc)。请注意,dxc 要求 dxcompiler.dll(最低 v1.8.2502)位于工作目录中,并且 static-dxc 要求启用 static-dxc crate 特性。否则,它将回退到 fxc

有关更多环境变量,请参阅文档

运行 CTS 时,请使用变量 DENO_WEBGPU_ADAPTER_NAMEDENO_WEBGPU_BACKENDDENO_WEBGPU_POWER_PREFERENCEDENO_WEBGPU_DX12_COMPILERDENO_WEBGPU_STRICT_COMPLIANCE

仓库概览

要了解 gfx-rs 生态系统中的所有组件,请参阅全局视图

MSRV 策略

简而言之:如果您使用 wgpu,我们的 MSRV 是 1.87。如果您运行我们的测试或示例,我们的 MSRV 是 1.93

如果没有正当理由,我们将避免提高 wgpu 的 MSRV,并且此类更改被视为破坏性更改。

具体细节

由于复杂的依赖关系,我们有三种 MSRV 策略:

  • wgpu 的 MSRV 是 1.87
  • wgpu-core(因此 wgpu-halnaganaga-typeswgpu-types)的 MSRV 是 1.87
  • 工作区的其余部分 MSRV 为 1.93

这在 CI 中强制执行(在 "/.github/workflows/ci.yml" 中),分别使用 WGPU_MSRVCORE_MSRVREPO_MSRV 变量。 此版本只能在破坏性版本中升级,尽管我们每三个月发布一个破坏性版本。

以下规则适用:

  • wgpu-core crate 绝不应要求高于 Firefox nightly 构建 MSRV 的 MSRV,该值由 python/mozboot/mozboot/util.pyMINIMUM_RUST_VERSION 的值决定。
  • wgpu crate 绝不应要求高于 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 版本相同。