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 中
3,301 次每月下载
用于 38 个 Crates(12 个直接使用)
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