Transpile shaders from one language to another using procedural macros.
Functionality is split into different modules which allow you to transpile from/to any supported language.
The default
feature already includes all of them.
from-glsl
- Transpile OpenGL Shading Language (GLSL) Shaders.from-spv
- Transpile Standard Portable Intermediate Representation for Vulkan (SPIR-V) Shaders.from-wgsl
- Transpile Web GPU Shader Language (WGSL) Shaders.
to-glsl
- Transpile shaders to OpenGL Shading Language (GLSL) Shaders.to-msl
- Transpile shaders to Metal Shading Language (MSL) Shaders.to-spv
- Transpile shaders to Standard Portable Intermediate Representation for Vulkan (SPIR-V) Shaders.to-wgsl
- Transpile shaders to Web GPU Shader Language (WGSL) Shaders.to-hlsl
- Transpile shaders to High Level Shader Language (HLSL) Shaders.
Some Multi-Backend Graphics APIs (like bgfx) require shaders for every backend (GLSL for OpenGL; HLSL for D3D; MSL for Metal; SPIR-V for Vulkan; WGSL for WebGPU). You can either try to transpile your shaders using naga
during Runtime (which would affect performance) or transpile each shader using a build.rs
script.
This tool simply transpiles shaders during compile-time without any hassle.
Transhader uses naga and Rust's procedural macro system to generate optimal shader code. Configure shader transpiler options using the Rusty-Object-Notation.
- Limited shader language support.
- Longer compile-times, since shaders are transpiled using procedural macros.
- Less customization of transpiler options (though I am working on it).
Transhader is dual licensed under the MIT and Apache 2.0 licenses.