1 个不稳定版本
0.1.0 | 2022 年 3 月 29 日 |
---|
#955 in 图形 API
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/ (bevy,Veloren,blub)都实现了某种常见的 wgpu 封装,以使其编程更容易、更安全。
特性
- 具有类型泛型的缓冲区,以防止错误的类型转换。
- 允许分组绑定的泛型绑定组。
- 绑定组(Layout)构建器。
- 初始化窗口和处理状态的框架。
- 泛型网格和模型结构体。
- 片段/顶点状态构建器。
- 管道布局构建器。
- 用于预定义管道布局的单独的 RenderPassPipeline 类型。
- ComputePipeline 构建器。
- RenderPass 构建器。
- RenderPipeline 构建器。
- 简化使用多个颜色附加层的 Render Target 函数。
- 具有加载和创建函数的纹理。
- 具有泛型类型的 Uniform。
- Vert2 默认顶点结构体。
- Vert3 默认顶点结构体。
目标
尽可能隐藏在wgpu中可能导致panic和/或未定义行为的所有操作,并将其放在rust的安全基础设施之后。并尽量简化简单的图形程序的编写。
短期目标
- 为所有可测试的模块编写单元测试。
- 将所有泛型默认名称从C重命名为T。
依赖项
~81MB
~1.5M SLoC