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.