[][src]Struct solstice::mesh::VertexMesh

pub struct VertexMesh<V> { /* fields omitted */ }

The Mesh represents a set of vertices to be drawn by a shader program and how to draw them. A well-formed Vertex implementation will provide information to the mesh about it's layout in order to properly sync the data to the GPU. A derive macro exists in Vertex that will derive this implementation for you.

use solstice::vertex::{VertexFormat, AttributeType};
#[repr(C, packed)]
struct TestVertex {
    position: [f32; 2],
    color: [f32; 4],
}

impl solstice::vertex::Vertex for TestVertex {
    fn build_bindings() -> &'static [VertexFormat] {
        &[VertexFormat {
            name: "position",
            offset: 0,
            atype: AttributeType::F32F32,
            normalize: false,
        }, VertexFormat {
            name: "color",
            offset: std::mem::size_of::<[f32; 2]>(),
            atype: AttributeType::F32F32F32F32,
            normalize: false
        }]
    }
}

let vertex_data = vec![
    TestVertex {
        position: [0.5, 0.],
        color: [1., 0., 0., 1.]
    },
    TestVertex {
        position: [0., 1.0],
        color: [0., 1., 0., 1.]
    },
    TestVertex {
        position: [1., 0.],
        color: [0., 0., 1., 1.]
    },
];

Vertex data is then copied into the mesh.

This example is not tested
let mut mesh = solstice::mesh::Mesh::new(&mut ctx, 3);
mesh.set_vertices(&vertex_data, 0);

Once constructed, a Mesh is of an immutable size but the draw range can be modified to effectively change it's size without changing the underlying memory's size.

This example is not tested
let mut mesh = solstice::mesh::Mesh::new(&mut ctx, 3000).unwrap();
mesh.set_draw_range(Some(0..3)); // draws only the first three vertices of the 3000 allocated

Implementations

impl<V> VertexMesh<V> where
    V: Vertex
[src]

pub fn new(ctx: &mut Context, size: usize) -> Result<Self, GraphicsError>[src]

Construct a Mesh with a given number of vertices.

pub fn with_data(
    ctx: &mut Context,
    vertices: &[V]
) -> Result<Self, GraphicsError>
[src]

pub fn with_buffer(buffer: Buffer) -> Self[src]

pub fn set_vertices(&self, ctx: &mut Context, vertices: &[V], offset: usize)[src]

Write new data into a range of the Mesh's vertex data.

pub fn set_draw_range(&mut self, draw_range: Option<Range<usize>>)[src]

Sets the range of vertices to be drawn. Passing None will draw the entire mesh.

pub fn set_draw_mode(&mut self, draw_mode: DrawMode)[src]

Sets how the vertex data should be tesselated.

pub fn draw_range(&self) -> Range<usize>[src]

pub fn draw_mode(&self) -> DrawMode[src]

Trait Implementations

impl<V: Debug> Debug for VertexMesh<V>[src]

impl<V: Vertex> Mesh for VertexMesh<V>[src]

impl<V: Vertex, '_> Mesh for &'_ VertexMesh<V>[src]

impl<V: Vertex> MeshAttacher for VertexMesh<V>[src]

Auto Trait Implementations

impl<V> RefUnwindSafe for VertexMesh<V> where
    V: RefUnwindSafe

impl<V> Send for VertexMesh<V> where
    V: Send

impl<V> Sync for VertexMesh<V> where
    V: Sync

impl<V> Unpin for VertexMesh<V> where
    V: Unpin

impl<V> UnwindSafe for VertexMesh<V> where
    V: 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, 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.