Skip to main content

Renderable

Trait Renderable 

Source
pub trait Renderable: Sized {
    type Buffer: BufferClient;
    type Descriptor: DescriptorClient;
    type DataAccessor: AccessorClient;
    type IndexAccessor: AccessorClient;
    type Texture: TextureClient;
    type Material: MaterialClient;
    type Vertices: VerticesClient;

    // Required methods
    fn init_buffer_data_client(
        &mut self,
        client: &mut Self::Buffer,
        buffer_data: &BufferData<'_, Self>,
    );
    fn init_buffer_desc_client(
        &mut self,
        client: &mut Self::Descriptor,
        buffer_desc: &BufferDescriptor<'_, Self>,
    );
    fn init_index_accessor_client(
        &mut self,
        client: &mut Self::IndexAccessor,
        buffer_view: &BufferIndexAccessor<'_, Self>,
    );
    fn init_data_accessor_client(
        &mut self,
        client: &mut Self::DataAccessor,
        buffer_view: &BufferDataAccessor<'_, Self>,
    );
    fn create_vertices_client(
        &mut self,
        vertices: &Vertices<'_, Self>,
    ) -> Self::Vertices;
    fn create_texture_client(
        &mut self,
        texture: &Texture<'_, Self>,
    ) -> Self::Texture;
    fn create_material_client<M>(
        &mut self,
        object: &Object<'_, M, Self>,
        material: &M,
    ) -> Self::Material
       where M: Material;
    fn init_material_client<M: Material>(
        &mut self,
        client: &mut Self::Material,
        material: &M,
    );
}
Expand description

The Renderable trait must be implemented by a type that is a client of the 3D model system. It provides associated types for a renderable context (this might be a particular shader program within a OpenGL context, for example), and then its own structures that are used to hold BufferData, textures, materials, and sets of renderable Vertices.

Required Associated Types§

Source

type Buffer: BufferClient

The renderer’s type that reflects a BufferData

A BufferData is a slice of u8 that contains some data (indices, vertex data, etc) for an object

Source

type Descriptor: DescriptorClient

The renderer’s type that reflects a BufferDescriptor

A buffer descriptor is a slice of a BufferData that contains multiple records, each of which contains a number of fields for different VertexAttr

Source

type DataAccessor: AccessorClient

The renderer’s type that reflects a BufferDataAccessor

A BufferDataAccessor is a reference to a single entry in a BufferDescriptor; hence it might be ‘Position’ for a vertex, from a large array of vertex records in an object

Source

type IndexAccessor: AccessorClient

The renderer’s type that reflects a BufferIndexAccessor

A BufferIndexAccessor represents a slice of a BufferData containing indices for accessing an array of vertex records for rendering a primitive in an object

Source

type Texture: TextureClient

The renderer’s type that represents a texture; this is supplied to material creation, and hence is less a product of the renderer and more an input to the 3D model library

Source

type Material: MaterialClient

The renderer’s type that reflects a Material; this is expected to be an extraction of the aspects of a material that the renderer pipelines can apply.

Source

type Vertices: VerticesClient

The renderer’s type that reflects a [BufferAccessor] of indices and the associated [BufferAccessor]s of attributes supported by a particular pipeline within the renderer

Required Methods§

Source

fn init_buffer_data_client( &mut self, client: &mut Self::Buffer, buffer_data: &BufferData<'_, Self>, )

Initialize a buffer data client - it will have been created using default()

This is invoked by the base library only when the client invoked ‘create_client’ for a data buffer

Source

fn init_buffer_desc_client( &mut self, client: &mut Self::Descriptor, buffer_desc: &BufferDescriptor<'_, Self>, )

Initialize a buffer descriptor client - it will have been created using default()

Source

fn init_index_accessor_client( &mut self, client: &mut Self::IndexAccessor, buffer_view: &BufferIndexAccessor<'_, Self>, )

Initialize the client of an index accessor of a buffer data

Source

fn init_data_accessor_client( &mut self, client: &mut Self::DataAccessor, buffer_view: &BufferDataAccessor<'_, Self>, )

Initialize the client of a data accessor of a buffer data

Source

fn create_vertices_client( &mut self, vertices: &Vertices<'_, Self>, ) -> Self::Vertices

Create a client

Source

fn create_texture_client( &mut self, texture: &Texture<'_, Self>, ) -> Self::Texture

Create a client

Source

fn create_material_client<M>( &mut self, object: &Object<'_, M, Self>, material: &M, ) -> Self::Material
where M: Material,

Create a client

Source

fn init_material_client<M: Material>( &mut self, client: &mut Self::Material, material: &M, )

Create a client for a reason - reason 0 is reserved Can we lose this?

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§