#glsl-shader #shaders #proc-macro #glsl #hlsl #naga

transhader

使用过程宏动态转换着色器

2个版本

0.1.1 2024年4月7日
0.1.0 2024年4月1日

60数据格式

Download history 231/week @ 2024-04-01 51/week @ 2024-04-08

每月56次 下载

MIT/Apache

16KB
244

Tran(shader)

License Crates.io Downloads

使用过程宏将着色器从一种语言转换为另一种语言。

功能

功能被分成不同的模块,允许您从/到任何支持的语言进行转换。默认功能已包含所有这些。

支持的前端语言

  • from-glsl - 转换OpenGL着色器语言(GLSL)着色器。
  • from-spv - 转换Vulkan的通用可移植中间表示(SPIR-V)着色器。
  • from-wgsl - 转换Web GPU着色器语言(WGSL)着色器。

支持的端后语言

  • to-glsl - 将着色器转换为OpenGL着色器语言(GLSL)着色器。
  • to-msl - 将着色器转换为Metal着色器语言(MSL)着色器。
  • to-spv - 将着色器转换为Vulkan的通用可移植中间表示(SPIR-V)着色器。
  • to-wgsl - 将着色器转换为Web GPU着色器语言(WGSL)着色器。
  • to-hlsl - 将着色器转换为高级着色器语言(HLSL)着色器。

为什么?

一些多后端图形API(如bgfx)需要每个后端都有着色器(OpenGL的GLSL;D3D的HLSL;Metal的MSL;Vulkan的SPIR-V;WebGPU的WGSL)。您可以选择在运行时尝试使用naga转换着色器(这将影响性能),或者使用build.rs脚本为每个着色器进行转换。

这个工具在编译时简单地转换着色器,无需任何麻烦。

如何?

Transhader使用naga和Rust的过程宏系统来生成最优的着色器代码。使用Rusty-Object-Notation配置着色器转换器选项。

缺点

  • 着色器语言支持有限。
  • 编译时间更长,因为着色器是使用过程宏转换的。
  • 减少转译器选项的自定义(尽管我在努力改进)。

许可协议

Transhader采用MIT和Apache 2.0双重许可协议。

依赖项

~6–14MB
~175K SLoC