5 个版本
0.2.1 | 2024年6月22日 |
---|---|
0.2.0 | 2023年11月2日 |
0.1.5 |
|
0.1.3 | 2023年8月6日 |
#1764 在 游戏开发
每月473次下载
22KB
401 行
WGSL Inline
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 显示如下
导出项
此包使用 naga-to-tokenstream
从 Rust 程序中提取除着色器源代码之外的信息。有关生成的项的完整列表,请参阅 naga-to-tokenstream。您可以使用与此包同名的功能标志启用 naga-to-tokenstream
包的 encase
、glam
和 naga
功能。
压缩
此包带有“压缩”功能标志 minify
。当启用时,所有包含的着色器源代码将在编译时减小大小(删除变量名和多余的空白)。这旨在用于发布构建,删除调试信息以增加着色器解析启动时间并减少读取延迟。
wgsl-inline = { version = "0.2", features = ["minify"] }
依赖项
~5–13MB
~157K SLoC