#graphics #web-gpu #wrapper #wgpu #target #api-wrapper #bindings

cart-tmp-wgpu

Rust WebGPU API 包装器

1 个不稳定版本

0.1.0 2020 年 8 月 10 日

#42#web-gpu

Download history 48/week @ 2024-03-11 29/week @ 2024-03-18 31/week @ 2024-03-25 70/week @ 2024-04-01 27/week @ 2024-04-08 37/week @ 2024-04-15 32/week @ 2024-04-22 25/week @ 2024-04-29 17/week @ 2024-05-06 25/week @ 2024-05-13 31/week @ 2024-05-20 22/week @ 2024-05-27 24/week @ 2024-06-03 14/week @ 2024-06-10 24/week @ 2024-06-17 24/week @ 2024-06-24

90 每月下载次数

MPL-2.0 许可证

195KB
4K SLoC

注意:这是一个临时分支,以便 Bevy 可以使用稍微新一点的 WGPU 版本。当发布新的 WGPU-RS 版本时,我们将回归到官方版本。

wgpu-rs

Build Status Crates.io Docs.rs

Matrix Matrix

wgpu-rs 是 wgpu-core 上的惯用 Rust 包装器。[链接](https://github.com/gfx-rs/wgpu)。它旨在满足 Rust 社区在通用图形和计算需求。

wgpu-rs 可以针对原生支持的后端和 WASM 直接进行。

Cube Shadow MipMap Skybox vange-rs Brawl GLX map Harmony

用法

如何运行示例

所有示例都位于 examples 目录下。

这些示例使用在 Cargo 文档中找到的默认示例运行语法。例如,要运行 cube 示例

cargo run --example cube

hello-trianglehello-compute 示例显示了没有任何辅助代码的裸机设置。对于 hello-compute,传递用空格分隔的 4 个数字作为参数

cargo run --example hello-compute 1 2 3 4

在 Web 上运行示例 (wasm32-unknown-unknown)

在 Web 上运行仍处于开发中。您可能需要在浏览器中启用实验性标志。检查浏览器实现状态在 webgpu.io。值得注意的是,wgpu-rs 常常在赶上上游 WebGPU API 变化方面领先。我们保持 gecko 分支指向应在最新 Firefox 上工作的代码。

要针对 wasm32-unknown-unknown 目标运行示例,首先像往常一样构建示例,然后运行 wasm-bindgen

# Checkout `gecko` branch that matches the state of Firefox
git checkout upstream/gecko
# Install or update wasm-bindgen-cli
cargo install -f wasm-bindgen-cli
# Build with the wasm target
RUSTFLAGS=--cfg=web_sys_unstable_apis cargo build --target wasm32-unknown-unknown --example hello-triangle
# Generate bindings in a `target/generated` directory
wasm-bindgen --out-dir target/generated --web target/wasm32-unknown-unknown/debug/examples/hello-triangle.wasm

target/generated 目录中创建一个 index.html 文件并添加以下代码

<html>
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <script type="module">
      import init from "./hello-triangle.js";
      init();
    </script>
  </body>
</html>

现在在 target/generated 目录中运行一个本地 Web 服务器,以在浏览器中查看 hello-triangle。例如 python -m http.server

如何编译示例中的着色器

目前,示例中的着色器是用 GLSL 4.50 编写的,并手动编译为 SPIR-V。将来 WGSL 将成为 WebGPU 的着色器语言,但尚未实现支持。

目前,可以通过运行 make 将着色器编译成 SPIR-V,这需要您拥有 glslangglslangValidator 二进制文件。

朋友们

向以下与 wgpu-rs 配合得最好的项目致敬

  • wgpu_glyph - 用于您的文本渲染需求
  • coffee - 一个完整的 2D 引擎
  • iced - 一个跨平台 GUI 库
  • rgx - 一个 2D 图形库
  • imgui-wgpu - Dear ImGui 接口
  • pixels - 创建硬件加速像素帧缓冲区的最简单方式
  • kas - 工具抽象系统
  • oxidator - RTS 游戏引擎
  • nannou - 一个创意编码框架
  • harmony - 一个现代 2D/3D 引擎
  • wgpu-pbr - 游戏的实时 PBR 渲染器

此外,支持 wgpu-rs 的库

  • conrod - 基于着色器的 UI
  • grr-2d - 实验性 2D 渲染器
  • lyon - 一个路径细分库

开发

如果您需要测试对 gfx-rs 或其他依赖的本地修复,最简单的方法是添加一个 Cargo 补丁。例如,在 Windows 上工作于 DX12 后端时,您可以检出 gfx-rs 仓库的 "hal-0.2" 分支并将其添加到 "Cargo.toml" 的末尾

[patch.crates-io]
gfx-backend-dx12 = { path = "../gfx/src/backend/dx12" }
gfx-hal = { path = "../gfx/src/hal" }

如果需要更改版本,您需要执行 cargo update -p gfx-backend-dx12

依赖项

~2–12MB
~134K SLoC