Struct tetra::graphics::mesh::IndexBuffer [−][src]
pub struct IndexBuffer { /* fields omitted */ }
Expand description
Index data, stored in GPU memory.
An index buffer can be used as part of a Mesh
, in order to describe which vertex data should be drawn,
and what order it should be drawn in.
For example, to draw a square with raw vertex data, you need to use six vertices (two triangles, with three vertices each). This is inefficient, as two of those vertices are shared by the two triangles! Using an index buffer, you can instruct the graphics card to use vertices multiple times while constructing your square.
Index data is made up of u32
values, each of which correspond to the zero-based index of a vertex.
For example, to get the mesh to draw the third vertex, then the first, then the second, you would
create an index buffer containing [2, 0, 1]
.
Performance
Creating an IndexBuffer
is a relatively expensive operation. If you can, store them in your
State
struct rather than recreating them each frame.
Cloning an IndexBuffer
is a very cheap operation, as the underlying data is shared between the
original instance and the clone via reference-counting.
This does mean, however, that updating an IndexBuffer
will also update any other clones of
that IndexBuffer
.
Implementations
impl IndexBuffer
[src]
impl IndexBuffer
[src]pub fn new(ctx: &mut Context, indices: &[u32]) -> Result<IndexBuffer>
[src]
pub fn new(ctx: &mut Context, indices: &[u32]) -> Result<IndexBuffer>
[src]Creates a new index buffer.
The buffer will be created with the BufferUsage::Dynamic
usage hint - this can
be overridden via the with_usage
constructor.
Errors
TetraError::PlatformError
will be returned if the underlying graphics API encounters an error.
pub fn with_usage(
ctx: &mut Context,
indices: &[u32],
usage: BufferUsage
) -> Result<IndexBuffer>
[src]
pub fn with_usage(
ctx: &mut Context,
indices: &[u32],
usage: BufferUsage
) -> Result<IndexBuffer>
[src]Creates a new index buffer, with the specified usage hint.
The GPU may optionally use the usage hint to optimize data storage and access.
Errors
TetraError::PlatformError
will be returned if the underlying graphics API encounters an error.
Trait Implementations
impl Clone for IndexBuffer
[src]
impl Clone for IndexBuffer
[src]fn clone(&self) -> IndexBuffer
[src]
fn clone(&self) -> IndexBuffer
[src]Returns a copy of the value. Read more
fn clone_from(&mut self, source: &Self)
1.0.0[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]Performs copy-assignment from source
. Read more
impl Debug for IndexBuffer
[src]
impl Debug for IndexBuffer
[src]impl PartialEq<IndexBuffer> for IndexBuffer
[src]
impl PartialEq<IndexBuffer> for IndexBuffer
[src]fn eq(&self, other: &IndexBuffer) -> bool
[src]
fn eq(&self, other: &IndexBuffer) -> bool
[src]This method tests for self
and other
values to be equal, and is used
by ==
. Read more
fn ne(&self, other: &IndexBuffer) -> bool
[src]
fn ne(&self, other: &IndexBuffer) -> bool
[src]This method tests for !=
.
impl StructuralPartialEq for IndexBuffer
[src]
Auto Trait Implementations
impl !RefUnwindSafe for IndexBuffer
impl !Send for IndexBuffer
impl !Sync for IndexBuffer
impl Unpin for IndexBuffer
impl !UnwindSafe for IndexBuffer
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
[src]
impl<T> ToOwned for T where
T: Clone,
[src]type Owned = T
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn to_owned(&self) -> T
[src]Creates owned data from borrowed data, usually by cloning. Read more
pub fn clone_into(&self, target: &mut T)
[src]
pub fn clone_into(&self, target: &mut T)
[src]🔬 This is a nightly-only experimental API. (toowned_clone_into
)
recently added
Uses borrowed data to replace owned data, usually by cloning. Read more