#glsl #graphics #gamedev

glsl-layout-derive

glsl-layout crate提供的自定义 derive

6个版本 (3个重大更新)

使用旧的 Rust 2015

0.4.0 2021年1月11日
0.3.2 2019年8月17日
0.3.0 2019年2月25日
0.2.0 2018年6月6日
0.1.1 2018年5月17日

#89#glsl

Download history 703/week @ 2024-01-06 855/week @ 2024-01-13 618/week @ 2024-01-20 537/week @ 2024-01-27 422/week @ 2024-02-03 834/week @ 2024-02-10 1075/week @ 2024-02-17 593/week @ 2024-02-24 897/week @ 2024-03-02 914/week @ 2024-03-09 889/week @ 2024-03-16 946/week @ 2024-03-23 1046/week @ 2024-03-30 679/week @ 2024-04-06 1030/week @ 2024-04-13 804/week @ 2024-04-20

3,655 每月下载次数
39 个 crate 中使用 (通过 glsl-layout)

MIT/Apache

6KB
122

GLSL-LAYOUT

该crate提供数据类型和特质,以构建可以上传到UBO的结构。

使用方法

通过过程宏使用 derive Uniform 将生成具有与使用 layout(std140) 声明的统一块相同数据布局的关联类型 Std140。结构体中所有 derive Uniform 的成员都必须实现 Uniform

实现 Uniform 应该通过 derive 完成。手动实现是可能的。这需要提供关联类型 Std140,它必须实现 Std140 特质。但特质 Std140 被标记为 unsafe,所以请小心。

特质 Uniform 还需要 Copy

典型使用场景是

#[derive(Copy, Clone, Uniform)]
struct FragmentArgs {
    pos: vec3,
    dir: vec3,
    count: uint,
}

write_to_buffer(&FragmentArgs {
    pos: [0.0, 1.0, 2.0].into(),
    dir: [3.0, 4.0, 5.0].into(),
    count: 42,
}.std140());

数据类型

有来自 glsl 的基本数据类型

  • 布尔型(名称 bool 已经被占用)
  • 整型
  • 无符号整型
  • 浮点型
  • 双精度浮点型

还有更复杂的数据类型

  • 向量 - (vec2, vec3, vec4, bvec2, ivec2, uvec2, dvec2 等)
  • 矩阵 - (mat2x3, dmat4 等)
  • 数组 -

许可协议

glsl-layout 是免费且开源软件,根据 MIT 许可协议Apache License 2.0 的条款进行分发。

贡献

除非您明确声明,否则您根据 Apache-2.0 许可协议定义的任何有意提交以包含在作品中的贡献,将根据上述条款双许可,不附加任何额外的条款或条件。

已知问题

在 MacOS 上

如果均匀块包含结构体数组,并且使用动态索引(变量而非字面量)访问该数组,它可能会加载与vec4(16字节)大小不匹配的成员的错误字节。在这种情况下,手动填充可能是解决方案。

依赖项

~1.5MB
~33K SLoC