#wgsl #shader #wgpu #graphics #gamedev

wgsl-inline

用于在 Rust 中嵌入 WGSL 的宏

5 个版本

0.2.1 2024年6月22日
0.2.0 2023年11月2日
0.1.5 2023年10月27日
0.1.3 2023年8月6日

#1764游戏开发

Download history 80/week @ 2024-04-23 30/week @ 2024-04-30 2/week @ 2024-05-28 40/week @ 2024-06-04 8/week @ 2024-06-11 145/week @ 2024-06-18 16/week @ 2024-06-25

每月473次下载

MIT 许可证

22KB
401

WGSL Inline

crates.io docs.rs crates.io

WGSL Inline 添加了一个宏 wgsl!,该宏接受 WGSL 源代码并验证它,将任何错误报告给 Rust 编译器。

请注意,此包适用于小型着色器 - 如果您有一个大程序,包含许多着色器,您可能更喜欢 include-wgsl-oil 包,该包允许着色器使用 naga-oil 预处理器导入其他着色器文件。

示例

在您的 Cargo.toml

wgsl-inline = "0.2"

然后在您的 Rust 源代码中

mod my_shader {
    wgsl_inline::wgsl!{
        struct VertexOutput {
            @builtin(position) position: vec4<f32>,
            @location(0) frag_uv: vec2<f32>,
        }

        @vertex
        fn main(
            @location(0) position: vec4<f32>,
            @location(1) uv: vec2<f32>
        ) -> VertexOutput {
            var output: VertexOutput;
            output.position = position;
            output.frag_uv = uv;
            return output;
        }
    }
}

fn main() {
    // The generated `SOURCE` constant contains the source code,
    // with the added guarantee that the shader is valid.
    println!("shader source: {}", my_shader::SOURCE);
}

错误检查

错误作用域会传播到导致错误的宏中的标记。也就是说,您的 IDE 应该能够告诉您哪部分着色器代码无效,而无需离开 Rust!例如,我的 IDE 显示如下

Image of a WGSL compile error in an IDE

导出项

此包使用 naga-to-tokenstream 从 Rust 程序中提取除着色器源代码之外的信息。有关生成的项的完整列表,请参阅 naga-to-tokenstream。您可以使用与此包同名的功能标志启用 naga-to-tokenstream 包的 encaseglamnaga 功能。

压缩

此包带有“压缩”功能标志 minify。当启用时,所有包含的着色器源代码将在编译时减小大小(删除变量名和多余的空白)。这旨在用于发布构建,删除调试信息以增加着色器解析启动时间并减少读取延迟。

wgsl-inline = { version = "0.2", features = ["minify"] }

依赖项

~5–13MB
~157K SLoC