7 个版本

0.3.4 2023年4月30日
0.3.3 2023年4月29日
0.2.1 2023年4月16日
0.1.0 2023年4月16日

#1314Rust 模式

Download history 20/week @ 2024-03-12 4/week @ 2024-04-02

每月74 次下载

MIT 许可证

8KB
52

rs2glsl

自动将 Rust 代码转换为 GLSL 以用于 GPU 编程。

示例

你可以这样编写 Rust 代码

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;
}

它会被转换为以下 GLSL 代码。

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);
}

你可以这样访问示例 GLSL 定义

GLSL_SMOOTH_MIN.definition()

玩得开心!


lib.rs:

自动将 Rust 代码转换为 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());

依赖关系

~280–740KB
~17K SLoC