11 个版本
0.2.7 | 2021年5月5日 |
---|---|
0.2.6 | 2020年6月8日 |
0.2.4 | 2020年5月24日 |
0.2.2 | 2019年8月18日 |
0.1.1 | 2019年2月26日 |
#72 in #detail
9KB
178 行
vk-shader-macros
将 GLSL 编译为 SPIR-V 常量的过程宏。
与标准 include_bytes
宏不同,路径目前是相对于 crate 根目录解析的。这是由于过程宏 API 中的临时限制。
示例
const VERT: &[u32] = include_glsl!("shaders/example.vert");
const FRAG: &[u32] = include_glsl!("shaders/example.glsl", kind: frag);
const RGEN: &[u32] = include_glsl!("shaders/example.rgen", target: vulkan1_2); // vulkan1_2 is required to build with GL_EXT_ray_tracing
默认情况下生成调试信息;传递 strip
到宏中以省略它,或者使用启用了 strip
功能的 crate 进行构建。
为什么是 [u32]
?
SPIR-V 是一个 32 位字的流,而不是字节,这在消费它的 API 中得到了反映。特别是,将一个不是 4 字节对齐的 [u8]
的 SPIR-V 传递给 Vulkan 是未定义的行为。以原生格式存储 SPIR-V 确保这种情况永远不会发生,而不需要复制或使用不安全的代码。
依赖关系
此 crate 当前依赖于外部的 shaderc 库。默认情况下,它将尝试使用已安装的 shaderc 库。但是,如果不存在,它将回退到从源代码构建,需要在构建环境中提供 git、cmake、python 3 和支持的 C++ 编译器。当使用预编译的 shaderc 时,必须注意使用与 shaderc crate 检出的版本二进制兼容的版本。您可以通过在 vk-shader-macros 上启用 build-from-source
功能来强制 shaderc 从源代码构建。
依赖关系
~30MB
~660K SLoC