#图形 #glsl #游戏开发

glsl-layout

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

9 个不稳定版本

0.5.0 2022 年 12 月 6 日
0.4.2 2022 年 8 月 5 日
0.4.1 2022 年 7 月 25 日
0.4.0 2021 年 1 月 11 日
0.1.1 2018 年 5 月 17 日

#760图形 API

Download history 1001/week @ 2024-04-22 904/week @ 2024-04-29 786/week @ 2024-05-06 786/week @ 2024-05-13 941/week @ 2024-05-20 1053/week @ 2024-05-27 882/week @ 2024-06-03 571/week @ 2024-06-10 856/week @ 2024-06-17 901/week @ 2024-06-24 163/week @ 2024-07-01 806/week @ 2024-07-08 907/week @ 2024-07-15 804/week @ 2024-07-22 709/week @ 2024-07-29 703/week @ 2024-08-05

3,301 次每月下载
用于 38 个 Crates(12 个直接使用)

MIT/Apache

41KB
770

GLSL-LAYOUT

此 Crates 提供数据类型和特质,以构建准备好上传到 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 已经被占用)
  • int
  • uint
  • float
  • double

还有更复杂的数据类型

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

许可证

glsl-layout 是免费的、开源软件,根据 MIT 许可证和 Apache 许可证 2.0 的条款分发。

贡献

除非你明确声明,否则根据 Apache-2.0 许可证定义,你提交的任何旨在包含在作品中的贡献都应双重许可,如上所述,没有其他条款或条件。

已知问题

在 MacOS 上

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

依赖关系

~1.2-2.9MB
~72K SLoC