Crate glslt[−][src]
glslt is the main library that supports the GLSL Template compiler transforms. If you are
building a system that relies on transforming GLSLT code, you’ll want to interact with this
library directly instead of the command-line interface provided by glsltcc
.
Usage
Rust crate
The glslt crate manipulates syntax trees generated by the glsl crate (note that the fork currently used is https://github.com/vtavernier/glsl/tree/dev/).
use glslt::glsl_lang::ast::*; use glslt::transform::{Unit, TransformUnit}; let glsl_src = r#" float sdf3d(in vec3 p); float colort(); float sdSphere(vec3 p, float r) { return length(p) - r; } float opElongate(in sdf3d primitive, in colort C, in vec3 p, in colort D, in vec3 h) { vec3 q = p - clamp(p, -h, h); return C() * primitive(q) * D(); } void mainImage(out vec4 fragColor, in vec2 fragCoord) { float sz = 5.; fragColor = vec4(vec3(opElongate(sdSphere(_p, sz), 1.0, vec3(fragCoord, 0.), 2.0, vec3(1., 2., 3.))), 1.0); } "#; // Parse the GLSLT source code let tu = glslt::parse::parse_source_default(glsl_src).expect("failed to parse GLSLT source"); // Create the transform unit let mut unit = Unit::new(); // Parse declarations for decl in (tu.0).0.into_iter() { unit.parse_external_declaration(decl).expect("failed to parse declaration"); } // Generate the result let tu = unit.into_translation_unit().expect("failed to generate output"); // Transpile the syntax tree to GLSL source let mut output_src = String::new(); glsl_lang::transpiler::glsl::show_translation_unit( &mut output_src, &tu, glsl_lang::transpiler::glsl::FormattingState::default(), ).expect("failed to generate GLSL");
Python library
If you installed the glslt library via pip install glslt
or maturin develop
, you may use the Python interface to the GLSLT compiler.
import glslt
# Parse the `sdf.glsl` file with `my-glsl-lib/include` being a system include
# directory for #include resolution
translation_unit = glslt.parse_files(["sdf.glsl"], ["my-glsl-lib/include"])
# Create a new minimizing transform unit
unit = glslt.MinUnit()
# Add the parsed declarations to the transform unit
unit.add_unit(translation_unit)
# Get the output of the transform
result = unit.to_translation_unit(["mainImage"])
# Print the GLSL code
print(result.to_glsl())
Re-exports
pub use glsl_lang; |
pub use transform::transform; |
pub use transform::transform_min; |
Modules
api | API wrapper module |
glsl_ext | glsl_lang extensions |
parse | Parsing utilities |
transform | GLSLT transform utilities definitions |
Enums
Error | GLSLT transform error type |
Constants
PREFIX | Prefix for generated names for functions and captured parameters |
Type Definitions
Result | GLSLT Result |