transhader

Crates.iotranshader
lib.rstranshader
version0.1.1
sourcesrc
created_at2024-04-01 14:39:45.965127
updated_at2024-04-07 18:58:11.054964
descriptionTranspile shaders on the fly using procedural macros.
homepage
repositoryhttps://github.com/drafteddev/transhader
max_upload_size
id1192583
size37,951
DraftedDev (DraftedDev)

documentation

https://docs.rs/transhader

README

Tran(shader)

License Crates.io Downloads

Transpile shaders from one language to another using procedural macros.

Features

Functionality is split into different modules which allow you to transpile from/to any supported language. The default feature already includes all of them.

Supported Frontend Languages

  • 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.

Supported Backend Languages

  • 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.

Why?

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.

How?

Transhader uses naga and Rust's procedural macro system to generate optimal shader code. Configure shader transpiler options using the Rusty-Object-Notation.

Drawbacks

  • 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).

License

Transhader is dual licensed under the MIT and Apache 2.0 licenses.

Commit count: 24

cargo fmt