#glsl #graphics #shader #rendering #language

rpu

RPU 是一种用于在CPU上渲染过程图形的与GLSL兼容的语言

12个版本

0.3.0 2024年5月13日
0.2.5 2024年5月7日
0.1.5 2024年4月30日
0.1.1 2023年7月20日
0.1.0 2022年7月31日

#151图形API

每月 21 次下载
rpuc 中使用

MIT 许可证

320KB
8K SLoC

header

RPU 是一种用于在CPU上渲染过程图形的与GLSL兼容的编程语言。

更多信息请访问 rpu-lang.org.

用法

要执行一个函数

let fib = r#"
int fib(int n) {
  if (n <= 1) return n;
  return fib(n - 2) + fib(n - 1);
}

export int main(int x) {
    return fib(x);
}"#;

let rpu = RPU::new();
let use_64_bit = true;
if let Ok(rc) = rpu.compile_and_run(source, "main", [WasmValue::I64(10)], use_64_bit) {
    assert_eq!(
        rc, Ok(vec![WasmValue::I64(55)])
    );
}

如果您只想编译为WAT,可以调用

let rc = compile_to_wat(source);

它返回一个包含WAT源代码的String。

要作为着色器运行WAT源代码,请使用

let mut buffer = ColorBuffer::new(800, 600);
let rc = rpu.compile_wat_and_run_as_shader(&wat, "shader", &mut buffer, use_64_bit);

颜色缓冲区将包含着色器的输出。这将在一个线程中运行着色器。要并行运行着色器,请使用

let mut buffer = Arc::new(Mutex::new(ColorBuffer::new(800, 600)));
let rc = rpu.compile_wat_and_run_as_tiled_shader(&wat, "shader", &mut buffer, (80, 80), 1, use_64_bit);

其中 (80, 80) 是瓦片大小。缓冲区被包裹在一个 Arc<Mutex<>> 中,以允许多个线程写入它。'1' 是要计算的迭代次数(如果着色器是路径追踪器)。

依赖项

~5–17MB
~240K SLoC