Struct solstice::mesh::VertexMesh
source · pub struct VertexMesh<V> { /* private fields */ }
Expand description
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)]
#[derive(Copy, Clone, bytemuck::Zeroable, bytemuck::Pod)]
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.
ⓘ
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.
ⓘ
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§
source§impl<V> VertexMesh<V>where
V: Vertex,
impl<V> VertexMesh<V>where V: Vertex,
sourcepub fn new(ctx: &mut Context, size: usize) -> Result<Self, GraphicsError>
pub fn new(ctx: &mut Context, size: usize) -> Result<Self, GraphicsError>
Construct a Mesh with a given number of vertices.
pub fn with_data( ctx: &mut Context, vertices: &[V] ) -> Result<Self, GraphicsError>
pub fn with_buffer(buffer: Buffer) -> Self
sourcepub fn set_vertices(&self, ctx: &mut Context, vertices: &[V], offset: usize)
pub fn set_vertices(&self, ctx: &mut Context, vertices: &[V], offset: usize)
Write new data into a range of the Mesh’s vertex data.
sourcepub fn set_draw_range(&mut self, draw_range: Option<Range<usize>>)
pub fn set_draw_range(&mut self, draw_range: Option<Range<usize>>)
Sets the range of vertices to be drawn. Passing None
will draw the entire mesh.
sourcepub fn set_draw_mode(&mut self, draw_mode: DrawMode)
pub fn set_draw_mode(&mut self, draw_mode: DrawMode)
Sets how the vertex data should be tesselated.
pub fn draw_range(&self) -> Range<usize>
pub fn draw_mode(&self) -> DrawMode
pub fn len(&self) -> usize
Trait Implementations§
source§impl<V: Clone> Clone for VertexMesh<V>
impl<V: Clone> Clone for VertexMesh<V>
source§fn clone(&self) -> VertexMesh<V>
fn clone(&self) -> VertexMesh<V>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<V: Debug> Debug for VertexMesh<V>
impl<V: Debug> Debug for VertexMesh<V>
source§impl<V: Vertex> Mesh for &VertexMesh<V>
impl<V: Vertex> Mesh for &VertexMesh<V>
source§impl<V: Vertex> Mesh for VertexMesh<V>
impl<V: Vertex> Mesh for VertexMesh<V>
source§impl<V: Vertex> MeshAttacher for VertexMesh<V>
impl<V: Vertex> MeshAttacher for VertexMesh<V>
source§impl<V: PartialEq> PartialEq<VertexMesh<V>> for VertexMesh<V>
impl<V: PartialEq> PartialEq<VertexMesh<V>> for VertexMesh<V>
source§fn eq(&self, other: &VertexMesh<V>) -> bool
fn eq(&self, other: &VertexMesh<V>) -> bool
This method tests for
self
and other
values to be equal, and is used
by ==
.