[−][src]Enum glium::buffer::BufferMode
How the buffer is created.
Variants
This is the default mode suitable for any usage. Will never be slow, will never be fast either.
Other modes should always be preferred, but you can use this one if you don't know what will happen to the buffer.
Implementation
Tries to use glBufferStorage
with the GL_DYNAMIC_STORAGE_BIT
flag.
If this function is not available, falls back to glBufferData
with GL_STATIC_DRAW
.
The mode to use when you modify a buffer multiple times per frame. Similar to Default
in
that it is suitable for most usages.
Use this if you do a quick succession of modify the buffer, draw, modify, draw, etc. This is something that you shouldn't do by the way.
With this mode, the OpenGL driver automatically manages the buffer for us. It will try to find the most appropriate storage depending on how we use it. It is guaranteed to never be too slow, but it won't be too fast either.
Implementation
Tries to use glBufferStorage
with the GL_DYNAMIC_STORAGE_BIT
and
GL_CLIENT_STORAGE_BIT
flags.
If this function is not available, falls back to glBufferData
with GL_DYNAMIC_DRAW
.
Optimized for when you modify a buffer exactly once per frame. You can modify it more than once per frame, but if you modify it too often things will slow down.
With this mode, glium automatically handles synchronization to prevent the buffer from being access by both the GPU and the CPU simultaneously. If you try to modify the buffer, the execution will block until the GPU has finished using it. For this reason, a quick succession of modifying and drawing using the same buffer will be very slow.
When using persistent mapping, it is recommended to use triple buffering. This is done by creating a buffer that has three times the capacity that it would normally have. You modify and draw the first third, then modify and draw the second third, then the last part, then go back to the first third, etc.
Implementation
Tries to use glBufferStorage
with GL_MAP_PERSISTENT_BIT
. Sync fences are automatically
managed by glium.
If this function is not available, falls back to glBufferData
with GL_DYNAMIC_DRAW
.
Optimized when you will never touch the content of the buffer.
Immutable buffers should be created once and never touched again. Modifying their content is permitted, but is very slow.
Implementation
Tries to use glBufferStorage
without any flag. Modifications are done by creating
temporary buffers and making the GPU copy the data from the temporary buffer to the real
one.
If this function is not available, falls back to glBufferData
with GL_STATIC_DRAW
.
Trait Implementations
impl Clone for BufferMode
[src]
fn clone(&self) -> BufferMode
[src]
fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl Copy for BufferMode
[src]
impl Debug for BufferMode
[src]
impl Default for BufferMode
[src]
fn default() -> BufferMode
[src]
impl Eq for BufferMode
[src]
impl PartialEq<BufferMode> for BufferMode
[src]
impl StructuralEq for BufferMode
[src]
impl StructuralPartialEq for BufferMode
[src]
Auto Trait Implementations
impl RefUnwindSafe for BufferMode
impl Send for BufferMode
impl Sync for BufferMode
impl Unpin for BufferMode
impl UnwindSafe for BufferMode
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Content for T where
T: Copy,
[src]
T: Copy,
type Owned = T
A type that holds a sized version of the content.
fn read<F, E>(usize, F) -> Result<T, E> where
F: FnOnce(&mut T) -> Result<(), E>,
[src]
F: FnOnce(&mut T) -> Result<(), E>,
fn get_elements_size() -> usize
[src]
fn to_void_ptr(&Self) -> *const ()
[src]
fn ref_from_ptr(*mut (), usize) -> Option<*mut T>
[src]
fn is_size_suitable(usize) -> bool
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,