#wgpu #tokio #async #gamedev #future #graphics

wgpu_tokio

使用 tokio 为 wgpu 提供的异步绑定

7 个版本

0.12.6 2022 年 3 月 15 日
0.12.5 2022 年 3 月 11 日

#343 in 渲染

自定义许可

15KB
200 代码行

WGPU Tokio

这个 crate 提供了在异步方式下使用 wgpu 的辅助特质。这个 crate 依赖于 tokio 来进行异步调度。

原因

在游戏开发中使用 tokio 带来了许多好处。使用多个线程可以让我们充分利用 CPU。而且 tokio 的绿色线程抽象既便宜又高效。

然而,直接在 tokio 的上下文中调用 wgpu 的 api 并不是一个好主意。大多数情况下,它们会阻塞代码以进行与 GPU 的聊天等操作。这将阻塞当前的 worker 线程,并阻止其他任务在等待 wgpu 完成时执行。

更好的解决方案是将这项工作卸载到专门的线程池,并让其运行,然后在完成时通知 tokio。

这个 crate 做了所有这些,并将其放入一个整洁的特质中。

用法

确保你有适当的依赖项

[dependencies]
wgpu = "0.12"
wgpu_tokio = "0.12"

然后在你的代码中确保你正在使用这个特质

use wgpu_tokio::DeviceAsyncExt;

这个特质要求设备位于 Arc 后面。然后就可以进行操作了。

async fn do_something(device: Arc<Device>) {
    let my_buffer = device.create_buffer_async(...).await;
}

许可

本项目受 MIT 许可证 的许可。

依赖项

~5–18MB
~229K SLoC