Crate rs2glsl

source ·
Expand description

Automatic code convertion from Rust to GLSL.

use rs2glsl::prelude::*;

#[glsl]
fn smooth_min(a: f32, b: f32, k: f32) -> f32 {
    let mut h: f32 = a - b;

    h = 0.5 + 0.5 * h;

    if h < 0.0 {
        h = 0.0;
    }
    if h > 1.0 {
        h = 1.0;
    }

    return interpolation(a, b, h) - k * h * (1.0 - h);
}

#[glsl]
fn interpolation(a: f32, b: f32, t: f32) -> f32 {
    return a * (1.0 - t) + b * t;
}

let expected = r#"
float smooth_min(float a, float b, float k) {
    float h = a - b;
    h = 0.5 + 0.5 * h;
    if (h < 0.0) {
        h = 0.0;
    }
    if (h > 1.0) {
        h = 1.0;
    }
    return interpolation(a, b, h) - k * h * (1.0 - h);
}
"#;

assert_eq!(expected.trim(), GLSL_SMOOTH_MIN.definition());

Modules

  • Macro implementations
  • All types, traits, and functions for use with GLSL
  • All traits defined in rs2glsl.
  • GLSL types in Rust

Traits

  • An abstract Item representing an entity in GLSL code. May be implemented by GLSL constants, types, and functions.