Struct glium::VertexBuffer [] [src]

pub struct VertexBuffer<T> where T: Copy {
    // some fields omitted
}

A list of vertices loaded in the graphics card's memory.

Methods

impl<T> VertexBuffer<T> where T: Vertex

fn new<F>(facade: &F, data: &[T]) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds a new vertex buffer.

Note that operations such as write will be very slow. If you want to modify the buffer from time to time, you should use the dynamic function instead.

Example

#[derive(Copy, Clone)]
struct Vertex {
    position: [f32; 3],
    texcoords: [f32; 2],
}

implement_vertex!(Vertex, position, texcoords);

let vertex_buffer = glium::VertexBuffer::new(&display, &[
    Vertex { position: [0.0,  0.0, 0.0], texcoords: [0.0, 1.0] },
    Vertex { position: [5.0, -3.0, 2.0], texcoords: [1.0, 0.0] },
]);

fn dynamic<F>(facade: &F, data: &[T]) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds a new vertex buffer.

This function will create a buffer that is intended to be modified frequently.

fn persistent<F>(facade: &F, data: &[T]) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds a new vertex buffer.

fn immutable<F>(facade: &F, data: &[T]) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds a new vertex buffer.

fn empty<F>(facade: &F, elements: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds an empty vertex buffer.

The parameter indicates the number of elements.

fn empty_dynamic<F>(facade: &F, elements: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds an empty vertex buffer.

The parameter indicates the number of elements.

fn empty_persistent<F>(facade: &F, elements: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds an empty vertex buffer.

The parameter indicates the number of elements.

fn empty_immutable<F>(facade: &F, elements: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds an empty vertex buffer.

The parameter indicates the number of elements.

impl<T> VertexBuffer<T> where T: Copy

unsafe fn new_raw<F>(facade: &F, data: &[T], bindings: VertexFormat, elements_size: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Builds a new vertex buffer from an indeterminate data type and bindings.

Example

use std::borrow::Cow;

let bindings = Cow::Owned(vec![(
        Cow::Borrowed("position"), 0,
        glium::vertex::AttributeType::F32F32,
    ), (
        Cow::Borrowed("color"), 2 * ::std::mem::size_of::<f32>(),
        glium::vertex::AttributeType::F32,
    ),
]);

let data = vec![
    1.0, -0.3, 409.0,
    -0.4, 2.8, 715.0f32
];

let vertex_buffer = unsafe {
    glium::VertexBuffer::new_raw(&display, &data, bindings, 3 * ::std::mem::size_of::<f32>())
};

unsafe fn new_raw_dynamic<F>(facade: &F, data: &[T], bindings: VertexFormat, elements_size: usize) -> Result<VertexBuffer<T>, CreationError> where F: Facade

Dynamic version of new_raw.

fn slice(&self, range: Range<usize>) -> Option<VertexBufferSlice<T>>

Accesses a slice of the buffer.

Returns None if the slice is out of range.

fn get_bindings(&self) -> &VertexFormat

Returns the associated VertexFormat.

fn per_instance(&self) -> Result<PerInstance, InstancingNotSupported>

Creates a marker that instructs glium to use multiple instances.

Instead of calling surface.draw(&vertex_buffer, ...) you can call surface.draw(vertex_buffer.per_instance(), ...). This will draw one instance of the geometry for each element in this buffer. The attributes are still passed to the vertex shader, but each entry is passed for each different instance.

impl<T> VertexBuffer<T> where T: Copy + Send + 'static

fn into_vertex_buffer_any(self) -> VertexBufferAny

DEPRECATED: use .into() instead. Discard the type information and turn the vertex buffer into a VertexBufferAny.

Methods from Deref<Target=BufferView<[T]>>

fn new<F>(facade: &F, data: &T, ty: BufferType, mode: BufferMode) -> Result<BufferView<T>, BufferCreationError> where F: Facade

Builds a new buffer containing the given data. The size of the buffer is equal to the size of the data.

fn empty_unsized<F>(facade: &F, ty: BufferType, size: usize, mode: BufferMode) -> Result<BufferView<T>, BufferCreationError> where F: Facade

Builds a new buffer of the given size.

fn get_context(&self) -> &Rc<Context>

Returns the context corresponding to this buffer.

fn get_size(&self) -> usize

Returns the size in bytes of this buffer.

fn is_persistent(&self) -> bool

Returns true if this buffer uses persistent mapping.

fn write(&self, data: &T)

Uploads some data in this buffer.

Panic

Panics if the length of data is different from the length of this buffer.

fn invalidate(&self)

Invalidates the content of the buffer. The data becomes undefined.

You should call this if you only use parts of a buffer. For example if you want to use the first half of the buffer, you invalidate the whole buffer then write the first half.

This operation is a no-op if the backend doesn't support it.

fn read(&self) -> Result<T, ReadError>

Reads the content of the buffer.

fn map(&mut self) -> Mapping<T>

Maps the buffer in memory for both reading and writing.

fn map_read(&mut self) -> ReadMapping<T>

Maps the buffer in memory for reading.

fn map_write(&mut self) -> WriteMapping<T>

Maps the buffer in memory for writing only.

fn as_slice_any(&self) -> BufferViewAnySlice

Builds a slice-any containing the whole subbuffer.

fn empty<F>(facade: &F, ty: BufferType, mode: BufferMode) -> Result<BufferView<T>, BufferCreationError> where F: Facade

Builds a new buffer of the given size.

fn empty_array<F>(facade: &F, ty: BufferType, len: usize, mode: BufferMode) -> Result<BufferView<[T]>, BufferCreationError> where F: Facade

Builds a new buffer of the given size.

fn len(&self) -> usize

Returns the number of elements in this buffer.

fn slice(&self, range: Range<usize>) -> Option<BufferViewSlice<[T]>>

Builds a slice of this subbuffer. Returns None if out of range.

fn slice_mut(&mut self, range: Range<usize>) -> Option<BufferViewMutSlice<[T]>>

Builds a slice of this subbuffer. Returns None if out of range.

fn as_slice(&self) -> BufferViewSlice<[T]>

Builds a slice containing the whole subbuffer.

fn as_mut_slice(&mut self) -> BufferViewMutSlice<[T]>

Builds a slice containing the whole subbuffer.

fn read_as_texture_1d<S>(&self) -> Result<S, ReadError> where S: Texture1dDataSink<T>

Reads the content of the buffer.

Trait Implementations

impl<T> From<BufferView<[T]>> for VertexBuffer<T> where T: Vertex + Copy

fn from(buffer: BufferView<[T]>) -> VertexBuffer<T>

impl<T> Deref for VertexBuffer<T> where T: Copy

type Target = BufferView<[T]>

fn deref(&self) -> &BufferView<[T]>

impl<T> DerefMut for VertexBuffer<T> where T: Copy

fn deref_mut(&mut self) -> &mut BufferView<[T]>

impl<'a, T> IntoVerticesSource<'a> for &'a VertexBuffer<T> where T: Copy

fn into_vertices_source(self) -> VerticesSource<'a>

Derived Implementations

impl<T: Debug> Debug for VertexBuffer<T> where T: Copy, T: Debug

fn fmt(&self, __arg_0: &mut Formatter) -> Result