#vulkan #rendering-engine #smart-pointers #descriptor #shader #render-graph #screen

screen-13

灵感来自QBasic的简单易用的Vulkan渲染引擎

38个版本

0.11.4 2024年7月17日
0.11.2 2024年2月27日
0.9.1 2023年12月29日
0.9.0 2023年9月8日
0.1.0 2020年7月5日

#4渲染引擎

每月40次下载

MIT/Apache

5MB
16K SLoC

Screen 13

Crates.io Docs.rs LoC

Screen 13 是一个灵感来自 QBasic 的简单易用的Vulkan渲染引擎。

[dependencies]
screen-13 = "0.11"

概述

Screen 13 使用智能指针提供高性能的 Vulkan 驱动程序。驱动程序可以手动创建用于无头渲染,或使用内置的事件循环抽象自动创建。

use screen_13::prelude::*;

fn main() -> Result<(), DisplayError> {
    EventLoop::new().build()?.run(|frame| {
        // It's time to do some graphics! 😲
    })
}

用法

Screen 13 提供了一个完全通用的渲染图结构,用于简单和静态类型地访问渲染过程中使用的所有资源。`RenderGraph` 结构允许将 Vulkan 智能指针资源绑定为“节点”,这些节点可以在图中任何位置使用。该图本身与交换链访问无关,可用于执行通用命令流。

渲染图的特性

  • 计算、图形和光线追踪管道
  • 自动Vulkan管理(渲染过程、子过程、描述符、池等)
  • 自动渲染过程调度、重排序、合并,带有资源别名
  • 与现有Vulkan代码兼容
  • 可选的从磁盘热重载 着色器
render_graph
    .begin_pass("Fancy new algorithm for shading a moving character who is actively on fire")
    .bind_pipeline(&gfx_pipeline)
    .read_descriptor(0, some_image)
    .read_descriptor(1, another_image)
    .read_descriptor(3, some_buf)
    .clear_color(0, swapchain_image)
    .store_color(0, swapchain_image)
    .record_subpass(move |subpass| {
        subpass.push_constants(some_u8_slice);
        subpass.draw(6, 1, 0, 0);
    });

调试日志

此crate使用 log 进行低开销日志记录。

要启用日志记录,请将环境变量RUST_LOG设置为tracedebuginfowarnerror,并初始化您选择的日志提供程序。示例使用pretty_env_logger

您还可以过滤消息,例如

RUST_LOG=screen_13::driver=trace,screen_13=warn cargo run --example ray_trace
TRACE screen_13::driver::instance > created a Vulkan instance
DEBUG screen_13::driver::physical_device > physical device: NVIDIA GeForce RTX 3090
DEBUG screen_13::driver::physical_device > extension "VK_KHR_16bit_storage" v1
DEBUG screen_13::driver::physical_device > extension "VK_KHR_8bit_storage" v1
DEBUG screen_13::driver::physical_device > extension "VK_KHR_acceleration_structure" v13
...

性能分析

该crate使用profiling并支持多个分析提供程序。未使用分析时,分析无成本。

要启用分析,请使用带有profile-with-*功能之一的编译选项进行编译,并初始化您选择的分析提供程序。

示例代码使用puffin

cargo run --features profile-with-puffin --release --example vsm_omni
Flamegraph of performance data

快速入门

包含了一些可能对您有帮助的示例

  • hello_world.rs — 在屏幕上显示窗口。请从这里开始。
  • triangle.rs — 着色器和索引/顶点缓冲区的完整设置;< 100 LOC。
  • shader-toy/ — 使用原始着色器代码重现了双通道着色器玩具。

请参阅示例代码文档入门指南以获取更多信息。

注意:所需开发包和库在入门指南中列出。所有新用户都应阅读并理解指南。

历史

小时候,我被赋予了访问装有GW-Basic的计算机的权限;后来又有一台装有QBasic的计算机。我所有的最爱程序都是从

CLS
SCREEN 13

这些命令清除了文本屏幕,并设置了320x200 256色调色板的视频模式。还有其他视频模式可用,但没有哪个像256色那样有“魔力”。

Basic提供的其他命令,如DRAW,允许您快速构建简单的游戏,因为您不需要掌握编译和链接的全部内容。我认为今天我们应该有类似的功能,所以我开始了这个项目,以使未来的开发者能够快速完成任务。

灵感

Screen 13是从我们社区中其他人分享的学习和经验中构建的。以下是一些我发现有用的存储库:

  • Bevy:一个用Rust构建的简单数据驱动游戏引擎
  • Granite - 开源Vulkan渲染器
  • Kajiya - 使用Rust和Vulkan制作的实验性实时全局光照渲染器

依赖关系

~10–44MB
~740K SLoC