Expand description

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

Usage

Rust crate

The glslt crate manipulates syntax trees generated by the glsl-lang crate.

use glslt::glsl_lang::{ast::*, parse::IntoParseBuilderExt};
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: TranslationUnit = glsl_src
    .builder()
    .context(&glslt::parse::make_parse_context(None))
    .parse()
    .expect("failed to parse GLSLT source")
    .0;

// Create the transform unit
let mut unit = Unit::new();

// Parse declarations
for decl in tu.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

translation_unit = glslt.parse_files(["sdf.glsl"], ["my-glsl-lib/include"])

unit = glslt.MinUnit()

unit.add_unit(translation_unit)

result = unit.to_translation_unit(["mainImage"])

print(result.to_glsl())

Re-exports

pub use glsl_lang;
pub use transform::transform;
pub use transform::transform_min;

Modules

API wrapper module
glsl_lang extensions
GLSLT transform utilities definitions
GLSLT utilities

Structs

Global trasnform parameters

Enums

GLSLT transform error type

Constants

Prefix for generated names for functions and captured parameters

Type Definitions

GLSLT Result