Crate glsl_layout2
source ·Expand description
This crates provides data types to build structures ready to upload into UBO.
Data layout will match one for uniform blocks declared with layout(std140)
.
See specs for alignment rules.
Examples
#[derive(Debug, Default, Clone, Copy, Uniform)]
struct Foo {
x: int,
y: vec3,
z: float,
w: mat4x4,
a: [f32; 3],
b: f32,
}
type UFoo = <Foo as Uniform>::Std140;
assert_eq!(
offset_of!(UFoo: y),
round_up_to(size_of::<int>(), 16), // `vec3` has alignment of size `vec4`
"Offset of field `y` must be equal of size of `x` rounded up to the alignment",
);
assert_eq!(
offset_of!(UFoo: z),
round_up_to(offset_of!(UFoo: y) + size_of::<vec3>(), 4),
"Field `z` must follow `y`. `y` should not have padding at the end",
);
assert_eq!(
offset_of!(UFoo: b),
offset_of!(UFoo: a) + size_of::<[[f32; 4]; 3]>(),
"Field `b` must follow `a`. But `a` has padding at the end.",
);
let foo_uniform = Foo {
x: 2,
y: [0.0; 3].into(),
z: 0.0,
w: [[0.0; 4]; 4].into(),
a: [0.0; 3].into(),
b: 0.0,
}.std140();
Structs
- Array of
Element
s. This type implements useful traits for converting from unwrapped types. - Array ref iterator Iterate over references to inner values.
- Aligning wrapper. Elements for array are aligned to 16 bytes (size of vec4) at least.
- Boolean value.
- Vector of 2
boolean
values.foo: bvec2
is equivalent to glsl’sbvec2 foo;
- Vector of 3
boolean
values.foo: bvec3
is equivalent to glsl’sbvec3 foo;
- Vector of 4
boolean
values.foo: bvec4
is equivalent to glsl’sbvec4 foo;
- Vector of 2
double
value.foo: dvec2
is equivalent to glsl’sdvec2 foo;
- Vector of 3
double
value.foo: dvec3
is equivalent to glsl’sdvec3 foo;
- Vector of 4
double
value.foo: dvec4
is equivalent to glsl’sdvec4 foo;
- Vector of 2
int
values.foo: ivec2
is equivalent to glsl’sivec2 foo;
- Vector of 3
int
values.foo: ivec3
is equivalent to glsl’sivec3 foo;
- Vector of 4
int
values.foo: ivec4
is equivalent to glsl’sivec4 foo;
- Vector of 2
uint
values.foo: uvec2
is equivalent to glsl’suvec2 foo;
- Vector of 3
uint
values.foo: uvec3
is equivalent to glsl’suvec3 foo;
- Vector of 4
uint
values.foo: uvec4
is equivalent to glsl’suvec4 foo;
- Vector of 2
float
values.foo: vec2
is equivalent to glsl’svec2 foo;
- Vector of 3
float
values.foo: vec3
is equivalent to glsl’svec3 foo;
- Vector of 4
float
values.foo: vec4
is equivalent to glsl’svec4 foo;
Traits
- Special marker trait implemented only for
std140
types. - Structure to transform data from rust’s structure to the raw data ready to upload to UBO. Users should prefer to use
derive(Uniform)
instead of implementing this manually.
Type Definitions
- Matrix of 2 x 2 boolean values.
- Matrix of 2 x 2 boolean values.
- Matrix of 2 x 3 boolean values.
- Matrix of 2 x 4 boolean values.
- Matrix of 3 x 3 boolean values.
- Matrix of 3 x 2 boolean values.
- Matrix of 3 x 3 boolean values.
- Matrix of 3 x 4 boolean values.
- Matrix of 4 x 4 boolean values.
- Matrix of 4 x 2 boolean values.
- Matrix of 4 x 3 boolean values.
- Matrix of 4 x 4 boolean values.
- Matrix of 2 x 2 double-precision floating-point values.
- Matrix of 2 x 2 double-precision floating-point values.
- Matrix of 2 x 3 double-precision floating-point values.
- Matrix of 2 x 4 double-precision floating-point values.
- Matrix of 3 x 3 double-precision floating-point values.
- Matrix of 3 x 2 double-precision floating-point values.
- Matrix of 3 x 3 double-precision floating-point values.
- Matrix of 3 x 4 double-precision floating-point values.
- Matrix of 4 x 4 double-precision floating-point values.
- Matrix of 4 x 2 double-precision floating-point values.
- Matrix of 4 x 3 double-precision floating-point values.
- Matrix of 4 x 4 double-precision floating-point values.
- Double-precision floating-point value.
- floating-point value.
- Matrix of 2 x 2 signed integer values.
- Matrix of 2 x 2 signed integer values.
- Matrix of 2 x 3 signed integer values.
- Matrix of 2 x 4 signed integer values.
- Matrix of 3 x 3 signed integer values.
- Matrix of 3 x 2 signed integer values.
- Matrix of 3 x 3 signed integer values.
- Matrix of 3 x 4 signed integer values.
- Matrix of 4 x 4 signed integer values.
- Matrix of 4 x 2 signed integer values.
- Matrix of 4 x 3 signed integer values.
- Matrix of 4 x 4 signed integer values.
- Signed integer value.
- Matrix of 2 x 2 floating-point values.
- Matrix of 2 x 2 floating-point values.
- Matrix of 2 x 3 floating-point values.
- Matrix of 2 x 4 floating-point values.
- Matrix of 3 x 3 floating-point values.
- Matrix of 3 x 2 floating-point values.
- Matrix of 3 x 3 floating-point values.
- Matrix of 3 x 4 floating-point values.
- Matrix of 4 x 4 floating-point values.
- Matrix of 4 x 2 floating-point values.
- Matrix of 4 x 3 floating-point values.
- Matrix of 4 x 4 floating-point values.
- Unsigned integer value.
- Matrix of 2 x 2 unsiged integer values.
- Matrix of 2 x 2 unsiged integer values.
- Matrix of 2 x 3 unsiged integer values.
- Matrix of 2 x 4 unsiged integer values.
- Matrix of 3 x 3 unsiged integer values.
- Matrix of 3 x 2 unsiged integer values.
- Matrix of 3 x 3 unsiged integer values.
- Matrix of 3 x 4 unsiged integer values.
- Matrix of 4 x 4 unsiged integer values.
- Matrix of 4 x 2 unsiged integer values.
- Matrix of 4 x 3 unsiged integer values.
- Matrix of 4 x 4 unsiged integer values.