54 个版本 (8 个破坏性更新)

2.0.3 2023 年 10 月 10 日
0.10.0 2024 年 5 月 23 日
0.9.13 2024 年 3 月 19 日
0.7.9 2023 年 12 月 1 日
0.5.8 2022 年 4 月 25 日

#432图形 API


用于 frapp

GPL-3.0-or-later

190KB
4K SLoC

待办事项

  • 针对 frenderer 的优化瓦片渲染器
  • 更多后处理示例

lib.rs:

使用 WGPU 构建的友好、模块化渲染器。

Frenderer 可以以三种方式使用(不互斥)

  1. 作为一组独立渲染策略的集合,用于精灵、纹理网格和平面着色网格。
  2. 作为 WGPU 初始化和状态管理的跨平台包装器,提供方便的 render() 函数。
  3. 作为应用程序框架(带有 winit 功能),为游戏模拟和渲染生命周期提供合理的默认值。

frenderer的入口点将取决于其使用方式;对于用例(1),您可以自己使用适配器、设备和队列初始化一个WGPU结构,然后使用内建的sprites::SpriteRenderermeshes::MeshRenderermeshes::FlatRenderercolorgeo::ColorGeo着色几何后处理转换,并使用自己的渲染通道。在用例(2)中,您可以异步使用给定的大小、WGPU实例和GPU表面初始化Renderer,并调用Renderer::render来处理所有绘图;或者,您可以允许events::Driver管理应用程序的事件循环并在适当的时候(使用winit功能标志)初始化frenderer。最后,在用例(3)中,您将使用clock::Clockevents::FrendererEvents的扩展特性和input::Input结构来简化游戏循环的生命周期。

frenderer高度模块化,尤其是在用例(1)中;特别是,frenderer不需要从winit接管事件循环,也不需要独家拥有WGPU实例、设备或适配器。为了方便,不需要这种模块化的用户可以使用Driver初始化窗口和渲染器。一旦获得frenderer::Renderer,您可以通过调用例如[Renderer::sprite_group_add()]来设置二维渲染组,最终调用[frenderer::Renderer::sprites_mut()]或[frenderer::Renderer::sprite_group_resize()]来修改精灵数据,并调用frenderer::Renderer::render来绘制。

目前,frenderer的3D渲染功能相当基础,具有简单的透视相机和不发光的纹理或单色网格。与精灵渲染器一样,主要的性能关注点是使用实例渲染、存储缓冲区(如果可用)、数组纹理和将多个网格打包到单个缓冲区等技术来最小化管线状态更改和绘制调用。

Frenderer 在保留模式下工作,但 "engine-immediate" 示例展示了如何在它之上构建即时模式的渲染 API。

依赖关系

~9–49MB
~756K SLoC