#glsl #graphics #gamedev

glsl-layout-derive2

glsl-layout 包提供自定义 derive

1 个不稳定版本

使用旧的 Rust 2015

0.4.0 2023 年 4 月 23 日

#89 in #glsl


glsl-layout2 中使用

MIT/Apache

6KB
119

GLSL-LAYOUT

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

用法

通过 proc-macro derive Uniform 将生成与使用 layout(std140) 声明的 uniform blocks 相同数据布局的关联类型 Std140。结构中 derive Uniform 的所有成员都必须实现 Uniform

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

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 许可证 2.0 的条款分发。

贡献

除非您明确声明,否则您提交的任何有意包含在工作中的贡献,根据 Apache-2.0 许可证定义,应如上所述双重许可,而无需任何额外的条款或条件。

已知问题

在 MacOS 上

如果 uniform block 包含结构体的数组,并且使用动态索引(变量而不是字面量)访问此数组,则可能为未对齐到 vec4(16 字节)大小的成员加载错误的字节。在这种情况下,手动填充可能是解决方案。

依赖项

~270–720KB
~17K SLoC