[][src]Trait nova_math::traits::Pack

pub trait Pack {
    type GLSLOutput;
    type HLSLOutput;
    type GLSLOutputArray;
    type HLSLOutputArray;
    type CPUOutput;
    fn into_packed_glsl(self) -> Self::GLSLOutput;
fn into_packed_hlsl(self) -> Self::HLSLOutput;
fn into_packed_glsl_array(self) -> Self::GLSLOutputArray;
fn into_packed_hlsl_array(self) -> Self::HLSLOutputArray;
fn into_packed_cpu(self) -> Self::CPUOutput; }

Packing the underlying data of a vector or matrix

Associated Types

Loading content...

Required methods

fn into_packed_glsl(self) -> Self::GLSLOutput

Convert the struct into packed data ready to be uploaded and consumed with hlsl standard conventions.

This will often round vectors up to alignment multiple sizes with padding bytes and is important for matrices as hlsl shaders are expecting the matrices to be row major.

Warning

If the matrix this is implemented on is row major it will have to perform an implict transpose and so CAN CHANGE the underlying data beyond adding GPU required padding.

fn into_packed_hlsl(self) -> Self::HLSLOutput

Convert the struct into packed data ready to be uploaded and consumed with hlsl standard conventions.

This will often round vectors up to alignment multiple sizes with padding bytes and is important for matrices as hlsl shaders are expecting the matrices to be row major.

Warning

If the matrix this is implemented on is column major it will have to perform an implict transpose and so CAN CHANGE the underlying data beyond adding GPU required padding

fn into_packed_glsl_array(self) -> Self::GLSLOutputArray

Convert the struct into packed data ready to be uploaded and consumed with hlsl standard conventions.

This function produces a semantically similar result to into_packed_hlsl but differs in that for some GPU packing conventions (read: std430) the padding for an item, like a vec3, differs whether it is on it's own or if it is an array element.

This will often round vectors up to alignment multiple sizes with padding bytes and is important for matrices as hlsl shaders are expecting the matrices to be row major.

Warning

If the matrix this is implemented on is row major it will have to perform an implict transpose and so CAN CHANGE the underlying data beyond adding GPU required padding.

fn into_packed_hlsl_array(self) -> Self::HLSLOutputArray

Convert the struct into packed data ready to be uploaded and consumed with hlsl standard conventions.

This function produces a semantically similar result to into_packed_hlsl but differs in that for some GPU packing conventions (read: std430) the padding for an item, like a vec3, differs whether it is on it's own or if it is an array element.

This will often round vectors up to alignment multiple sizes with padding bytes and is important for matrices as hlsl shaders are expecting the matrices to be row major.

Warning

If the matrix this is implemented on is column major it will have to perform an implict transpose and so CAN CHANGE the underlying data beyond adding GPU required padding.

fn into_packed_cpu(self) -> Self::CPUOutput

Convert the struct into packed data for general purpose use on the CPU. This would be ideal for things like serialization where you don't need to conform to special GPU alignment and padding rules.

This should, by general convention, just produce a flat array of the individual components and should match the underlying number of components (3 for a Vec3, etc).

Warning

There should be no padding in the results of this function.

Loading content...

Implementors

impl Pack for F32Pack[src]

impl Pack for F64Pack[src]

impl<T: Real> Pack for TMat4x4P<T>[src]

impl<T: Real> Pack for TVec2P<T>[src]

impl<T: Real> Pack for TVec3P<T>[src]

impl<T: Real> Pack for TVec4P<T>[src]

Loading content...