ombre 0.6.7

Shadowy game and graphics library for Rust
Documentation
//! Vertex and index buffers.
use std::mem;

use super::id;

/// Identifier for an index or vertex buffer.
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
pub struct BufferId(id::Id);

impl BufferId {
    /// Get the next id.
    pub(crate) fn next() -> Self {
        Self(id::next())
    }
}

/// Buffer source.
pub enum BufferSource<'a, T> {
    /// A slice of data.
    Slice(&'a [T]),
    /// An empty pre-allocated buffer.
    Empty {
        /// Size in bytes of buffer.
        size: usize,
    },
}

impl<'a, T> BufferSource<'a, T> {
    /// Empty buffer of `elements * size_of::<T>` bytes.
    pub fn empty(elements: usize) -> BufferSource<'a, T> {
        BufferSource::Empty {
            size: elements * mem::size_of::<T>(),
        }
    }

    /// Buffer from a slice of `T`.
    pub fn slice(data: &'a [T]) -> BufferSource<'a, T> {
        BufferSource::Slice(data)
    }
}

/// Type of object the buffer holds.
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum BufferKind {
    Vertex,
    Index,
}

/// How the buffer will be used.
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum BufferUsage {
    /// Buffer will never be updated.
    Immutable,
    /// Buffer will be updated occasionally.
    Dynamic,
    /// Buffer will be updated often.
    Stream,
}