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]

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

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

pub fn set_data(&self, ctx: &mut Context, indices: &[u32], offset: usize)[src]

Sends new index data to the GPU.

Panics

Panics if the offset is out of bounds.

Trait Implementations

impl Clone for 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]

Performs copy-assignment from source. Read more

impl Debug for IndexBuffer[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl PartialEq<IndexBuffer> for IndexBuffer[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]

This method tests for !=.

impl StructuralPartialEq for IndexBuffer[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

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]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

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.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

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.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.