8 个版本
0.2.1 | 2024 年 3 月 27 日 |
---|---|
0.2.0 | 2024 年 2 月 13 日 |
0.1.6 | 2023 年 3 月 15 日 |
0.1.5 | 2022 年 10 月 21 日 |
0.1.1 | 2020 年 8 月 19 日 |
1043 在 图形 API 中
每月 39 次下载
用于 2 crate
31KB
521 行代码
内联 SPIR-V
inline-spirv
简化您编写着色器的方式。尽管作为游戏开发者,我们通常在运行时编译不同对象和材料的着色器阶段组合以获得最佳灵活性;但有时我们确实想尝试一些新想法并快速启动。这个 crate 帮助您在 Rust 代码中或在外部文件中编译 GLSL/HLSL 着色器为 SPIR-V;并将它们直接嵌入到二进制文件中,这样您就无需担心所有编译问题。
使用方法
内联着色器源代码
use inline_spirv::include_spirv;
let spv: &'static [u32] = inline_spirv!(r#"
#version 450 core
void main() { gl_Position = vec4(0, 0, 0, 1); }
"#, vert);
包含外部着色器源文件
use inline_spirv::include_spirv;
let spv: &'static [u32] = include_spirv!("assets/vert.hlsl", vert, hlsl, entry="Main");
包含预编译的 SPIR-V 二进制文件
use inline_spirv::include_spirv;
let spv: &'static [u32] = include_spirv!("assets/vert.spv");
有关完整选项列表,请参阅文档。
技巧
宏可能非常详细,尤其是当您有很多 #include
指令时,因此请记住您可以为自身定义别名和更定制的宏。
use inline_spirv::include_spirv as include_spirv_raw;
macro_rules! include_spirv {
($path:expr, $stage:ident) => {
include_spirv_raw!(
$path,
$stage, hlsl,
entry="my_entry_pt",
D VERBOSE_DEFINITION,
D ANOTHER_VERBOSE_DEFINITION="verbose definition substitution",
I "long/path/to/include/directory",
)
}
}
// ...
let vert: &[u32] = include_spirv!("examples/demo/assets/demo.hlsl", vert);
许可证
此项目根据您的选择采用以下任一许可证:
- Apache 许可协议第 2.0 版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖关系
~2–15MB
~206K SLoC