[][src]Struct shader_types::DynamicOffsetMember

#[repr(C, align(256))]pub struct DynamicOffsetMember<T>(pub T);

Pads a structure for use with dynamic offsets in graphics apis.

All dynamic offsets need to be aligned to 256 bytes. This automatically aligns your types to 256s.

Given a shader of:

uniform Uniforms {
    mat4 mvp;
    mat4 mv;
};

An array of rust structs can be made and used:

use shader_types::{Mat4, DynamicOffsetMember};

// Implementations don't matter
fn generate_mvp(_: usize) -> [f32; 16] {
    // ...
}
fn generate_mv(_: usize) -> [f32; 16] {
    // ...
}
fn set_uniform_buffer(_: &[DynamicOffsetMember<Uniforms>]) {
    // ...
}
fn bind_uniform_with_offset(_: usize) {
    // ...
}
fn render_object(_: usize) {
    // ...
}

#[repr(C)]
struct Uniforms {
    mvp: Mat4,
    mv: Mat4,
}

// Generate buffer
let mut vec: Vec<DynamicOffsetMember<Uniforms>> = Vec::new();
for obj_idx in 0..10 {
    vec.push(DynamicOffsetMember(Uniforms {
        mvp: Mat4::from(generate_mvp(obj_idx)),
        mv: Mat4::from(generate_mv(obj_idx)),
    }))
}

// Use Buffer
set_uniform_buffer(&vec);
for obj_idx in 0..10 {
    let offset = obj_idx * size_of::<DynamicOffsetMember<Uniforms>>();
    // Offset must be aligned by 256
    assert_eq!(offset % 256, 0);
    bind_uniform_with_offset(offset);
    render_object(obj_idx);
}

Trait Implementations

impl<T: Clone> Clone for DynamicOffsetMember<T>[src]

impl<T: Copy> Copy for DynamicOffsetMember<T>[src]

impl<T: Debug> Debug for DynamicOffsetMember<T>[src]

impl<T: Default> Default for DynamicOffsetMember<T>[src]

impl<T: Eq> Eq for DynamicOffsetMember<T>[src]

impl<T: Hash> Hash for DynamicOffsetMember<T>[src]

impl<T: Ord> Ord for DynamicOffsetMember<T>[src]

impl<T: PartialEq> PartialEq<DynamicOffsetMember<T>> for DynamicOffsetMember<T>[src]

impl<T: PartialOrd> PartialOrd<DynamicOffsetMember<T>> for DynamicOffsetMember<T>[src]

impl<T: Pod> Pod for DynamicOffsetMember<T>[src]

impl<T> StructuralEq for DynamicOffsetMember<T>[src]

impl<T> StructuralPartialEq for DynamicOffsetMember<T>[src]

impl<T: Zeroable> Zeroable for DynamicOffsetMember<T>[src]

Auto Trait Implementations

impl<T> RefUnwindSafe for DynamicOffsetMember<T> where
    T: RefUnwindSafe

impl<T> Send for DynamicOffsetMember<T> where
    T: Send

impl<T> Sync for DynamicOffsetMember<T> where
    T: Sync

impl<T> Unpin for DynamicOffsetMember<T> where
    T: Unpin

impl<T> UnwindSafe for DynamicOffsetMember<T> where
    T: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.