1 个不稳定版本

0.1.0 2022 年 3 月 29 日

#955 in 图形 API

MIT 许可协议

140KB
3K SLoC

简单的 WGPU

这个工具包为 wgpu 提供了一个封装。它目前还处于早期阶段,可能会发生破坏现有代码的变化。主要目标是使图形应用程序的编写变得简单,而无需使用过于高级的引擎。因此,这个工具包使用泛型重新实现了 wgpu 的一些类型,以提高其安全性和易用性。尽管主要目标是舒适度,但运行时性能不应受到影响。

示例

当类型不匹配时,WGPU 缓冲区可能是不安全的

let buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor{
    label: None,
    contents: bytemuck::cast_slice(data),
    usage: wgpu::BufferUsages::STORAGE | wgpu::BufferUsages::MAP_READ,
});

从 GPU 读取缓冲区时,不能保证缓冲区具有相同的格式。

在这个库中

let buffer = BufferBuilder::new()
    .storage().read().write()
    .append_slice(&[0, 1, 2, 3])
    .build(device);

现在当读取缓冲区时,映射的切片与提供的数据类型相同,因此不会发生“未定义行为”。

这个库还为其一些类型提供了构建器,因为它们比 wgpu 的描述符更容易使用,同时仍然允许详细的配置。

动机

我注意到,几乎在其网站上列出的所有使用 wgpu 的项目(如 https://wgpu.rs/bevyVelorenblub)都实现了某种常见的 wgpu 封装,以使其编程更容易、更安全。

特性

  • 具有类型泛型的缓冲区,以防止错误的类型转换。
  • 允许分组绑定的泛型绑定组。
  • 绑定组(Layout)构建器。
  • 初始化窗口和处理状态的框架。
  • 泛型网格和模型结构体。
  • 片段/顶点状态构建器。
  • 管道布局构建器。
  • 用于预定义管道布局的单独的 RenderPassPipeline 类型。
  • ComputePipeline 构建器。
  • RenderPass 构建器。
  • RenderPipeline 构建器。
  • 简化使用多个颜色附加层的 Render Target 函数。
  • 具有加载和创建函数的纹理。
  • 具有泛型类型的 Uniform。
  • Vert2 默认顶点结构体。
  • Vert3 默认顶点结构体。

目标

尽可能隐藏在wgpu中可能导致panic和/或未定义行为的所有操作,并将其放在rust的安全基础设施之后。并尽量简化简单的图形程序的编写。

短期目标

  • 为所有可测试的模块编写单元测试。
  • 将所有泛型默认名称从C重命名为T。

依赖项

~81MB
~1.5M SLoC