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
3,655 每月下载次数
在 39 个 crate 中使用 (通过 glsl-layout)
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