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日 |
#1314 在 Rust 模式
每月74 次下载
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