1 个不稳定版本

0.1.0 2024年1月15日

#2095开发工具

MIT/Apache

13KB
228 代码行

让 Rust 和 OpenGL 恋爱

github crates.io docs.rs

Rust 和 OpenGL 之间的数据传递容易出错,错误难以调试。

此 crate 提供了基于 glam crate 的 GLSL 构造的编译时转换。

[dependencies]
glrs = "0.1"

仅在 rustc 1.75 上进行了测试。

路线图

  • 布局感知导入
    • 根据 GLSL 规范定义的布局模式添加填充字节
  • 结构体
    • 基本结构体导入
    • 嵌套结构体导入?
  • 统一体
    • 单文件统一体导入
    • 完整着色器链统一体检查和导入
  • 定义
    • 单文件定义导入(从多个文件导入时可能存在冲突)
  • 接口块

导入结构体

着色器/工具.glsl

struct Player {
  vec3 pos;
  vec3 speed;
};

src/main.rs

#[glrs::import(path = "shaders/utils.glsl", name = "Player")]
#[derive(Debug)]
struct GlPlayer;

fn main() {
    dbg!(GlPlayer {
        pos: glam::vec3(0., 0., 0.),
        speed: glam::vec3(0., 0., 0.),
    });
}

依赖

~5MB
~135K SLoC