#glsl #graphics #gamedev

glsl-layout2

提供数据类型和特质,以构建准备上传到UBO的结构

1 个不稳定版本

0.5.1 2023年4月23日

#1079 in 图形API

MIT/Apache

41KB
769

GLSL-LAYOUT

这个包提供了数据类型和特质,以构建准备上传到UBO的结构。

用法

使用proc-macro派生Uniform将生成与使用layout(std140)声明的统一块具有相同数据布局的关联类型Std140。结构中派生自Uniform的所有成员都必须实现Uniform

实现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上

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

依赖项

~0.2–2MB
~52K SLoC