1 个不稳定版本
使用旧的 Rust 2015
0.4.0 | 2023 年 4 月 23 日 |
---|
#89 in #glsl
在 glsl-layout2 中使用
6KB
119 行
GLSL-LAYOUT
该包提供数据类型和特质,用于构建可用于上传到 UBO 的结构。
用法
通过 proc-macro derive Uniform
将生成与使用 layout(std140)
声明的 uniform blocks 相同数据布局的关联类型 Std140
。结构中 derive Uniform
的所有成员都必须实现 Uniform
。
应通过 derive 实现 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 上
如果 uniform block 包含结构体的数组,并且使用动态索引(变量而不是字面量)访问此数组,则可能为未对齐到 vec4
(16 字节)大小的成员加载错误的字节。在这种情况下,手动填充可能是解决方案。
依赖项
~270–720KB
~17K SLoC