1 个不稳定版本
0.5.1 | 2023年4月23日 |
---|
#1079 in 图形API
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