#shader #graphics #gamedev #gfx #automatic #debug-mode #reloading

gfx_shader_watch

用于实时监视着色器和动态重新加载管道状态的 GFX 工具

12 个版本

0.6.2 2023 年 5 月 19 日
0.6.1 2022 年 9 月 8 日
0.6.0 2019 年 2 月 12 日
0.5.0 2018 年 11 月 6 日
0.3.3 2017 年 7 月 13 日

#197图形 API

Download history 44/week @ 2024-03-28 42/week @ 2024-04-04

每月 75 次下载

Apache-2.0

22KB
310

gfx_shader_watch crates.io 文档

gfx-rs 提供一个 PsoCell 容器,

  • (调试模式) 监视着色器文件更改并自动重新加载
  • (发布模式) 在编译时包含着色器文件字节

监视和自动加载着色器文件更改允许在不重新启动程序或重新编译的情况下更快地开发着色器代码。然而,在发布最终二进制文件时,简单地将其包含在源代码中会更方便。自然地,这个库可以自动执行所需的方式。

工作原理

有两种 PsoCell 变体 SimplePsoCell & WatcherPsoCell,前者仅构建一次其 PipelineState 并提供访问权限。后者指向它将监视的着色器源文件,当文件更改时,它将在下一次访问时重新加载其 PipelineState。为了便于在发布模式下使用 SimplePsoCell 和在调试模式下使用 WatcherPsoCell,提供了 debug_watcher_pso_cell! & debug_watcher_pso_cell_type! 宏。

代码示例

#[macro_use] extern crate gfx;
#[macro_use] extern crate gfx_shader_watch;

use gfx_shader_watch::*;
use gfx::Primitive;
use gfx::state::Rasterizer;

pub fn main() {
    // {code to setup window / gfx factory etc }

    // Container has SimplePsoCell or WatcherPsoCell type, depending on compile mode
    // if you need to refer to the type, use the `debug_watcher_pso_cell_type!` macro
    let mut pso_cell = debug_watcher_pso_cell!(
        pipe = mypipeline,
        vertex_shader = "shader/vert.glsl",
        fragment_shader = "shader/frag.glsl",
        factory = factory,
        primitive = Primitive::TriangleList,
        raterizer = Rasterizer::new_fill()).expect("psocell");

    let mut running = true;
    while running {
        // ...
        encoder.draw(&slice, pso_cell.pso(), &data);
        // ...
    }
}

示例

尝试运行 cargo run --example watch-shaders,你应该看到一个白色三角形。现在打开 examples/shader/frag.glsl 并修改它(例如,将 gl_FragColor = white; -> gl_FragColor = red;)。你会看到三角形用新的代码着色,而无需重新加载程序。

最低支持的 Rust 编译器

这个软件包使用最新的稳定版Rust进行维护。最新稳定版rust

依赖项

~1–8.5MB
~65K SLoC