pub struct VertexBufferSlice<'b, T>where
T: 'b + Copy,{ /* private fields */ }
Expand description
Represents a slice of a VertexBuffer
.
Implementations§
Source§impl<'b, T> VertexBufferSlice<'b, T>
impl<'b, T> VertexBufferSlice<'b, T>
Sourcepub fn per_instance(&'b self) -> Result<PerInstance<'b>, InstancingNotSupported>
pub fn per_instance(&'b self) -> Result<PerInstance<'b>, InstancingNotSupported>
Creates a marker that instructs glium to use multiple instances.
Instead of calling surface.draw(&vertex_buffer.slice(...).unwrap(), ...)
you can call surface.draw(vertex_buffer.slice(...).unwrap().per_instance(), ...)
.
This will draw one instance of the geometry for each element in this buffer slice.
The attributes are still passed to the vertex shader, but each entry is passed
for each different instance.
Methods from Deref<Target = BufferSlice<'a, [T]>>§
Sourcepub fn get_context(&self) -> &Rc<Context>
pub fn get_context(&self) -> &Rc<Context>
Returns the context corresponding to this buffer.
Sourcepub fn write(&self, data: &T)
pub fn write(&self, data: &T)
Uploads some data in this buffer.
§Implementation
- For persistent-mapped buffers, waits untils the data is no longer used by the GPU then memcpies the data to the mapping.
- For immutable buffers, creates a temporary buffer that contains the data then calls
glCopyBufferSubData
to copy from the temporary buffer to the real one. - For other types, calls
glBufferSubData
.
§Panic
Panics if the length of data
is different from the length of this buffer.
Sourcepub fn invalidate(&self)
pub fn invalidate(&self)
Invalidates the content of the slice. The data becomes undefined.
This operation is a no-op if the backend doesn’t support it and for persistent-mapped buffers.
§Implementation
Calls glInvalidateBufferSubData
if supported.
Sourcepub fn read(&self) -> Result<<T as Content>::Owned, ReadError>
pub fn read(&self) -> Result<<T as Content>::Owned, ReadError>
Reads the content of the buffer.
Sourcepub fn copy_to<S>(&self, target: S) -> Result<(), CopyError>where
S: Into<BufferSlice<'a, T>>,
pub fn copy_to<S>(&self, target: S) -> Result<(), CopyError>where
S: Into<BufferSlice<'a, T>>,
Copies the content of this slice to another slice.
§Panic
Panics if T
is unsized and the other buffer is too small.
Sourcepub unsafe fn slice_custom<F, R>(&self, f: F) -> BufferSlice<'a, R>
pub unsafe fn slice_custom<F, R>(&self, f: F) -> BufferSlice<'a, R>
Builds a slice that contains an element from inside the buffer.
This method builds an object that represents a slice of the buffer. No actual operation OpenGL is performed.
§Example
#[derive(Copy, Clone)]
struct BufferContent {
value1: u16,
value2: u16,
}
let slice = unsafe { buffer.slice_custom(|content| &content.value2) };
§Safety
The object whose reference is passed to the closure is uninitialized. Therefore you must not access the content of the object.
You must return a reference to an element from the parameter. The closure must not panic.
Sourcepub fn as_slice_any(&self) -> BufferAnySlice<'a>
pub fn as_slice_any(&self) -> BufferAnySlice<'a>
Builds a slice-any containing the whole subbuffer.
This method builds an object that represents a slice of the buffer. No actual operation OpenGL is performed.
Sourcepub fn slice<R>(&self, range: R) -> Option<BufferSlice<'a, [T]>>where
R: RangeArgument<usize>,
pub fn slice<R>(&self, range: R) -> Option<BufferSlice<'a, [T]>>where
R: RangeArgument<usize>,
Builds a subslice of this slice. Returns None
if out of range.
This method builds an object that represents a slice of the buffer. No actual operation OpenGL is performed.
Sourcepub fn read_as_texture_1d<S>(&self) -> Result<S, ReadError>where
S: Texture1dDataSink<T>,
pub fn read_as_texture_1d<S>(&self) -> Result<S, ReadError>where
S: Texture1dDataSink<T>,
Reads the content of the buffer.
Trait Implementations§
Source§impl<'a, T> Deref for VertexBufferSlice<'a, T>where
T: Copy,
impl<'a, T> Deref for VertexBufferSlice<'a, T>where
T: Copy,
Source§type Target = BufferSlice<'a, [T]>
type Target = BufferSlice<'a, [T]>
Source§fn deref(&self) -> &BufferSlice<'a, [T]>
fn deref(&self) -> &BufferSlice<'a, [T]>
Source§impl<'a, T> DerefMut for VertexBufferSlice<'a, T>where
T: Copy,
impl<'a, T> DerefMut for VertexBufferSlice<'a, T>where
T: Copy,
Source§fn deref_mut(&mut self) -> &mut BufferSlice<'a, [T]>
fn deref_mut(&mut self) -> &mut BufferSlice<'a, [T]>
Source§impl<'a, T> From<VertexBufferSlice<'a, T>> for BufferSlice<'a, [T]>where
T: Copy,
impl<'a, T> From<VertexBufferSlice<'a, T>> for BufferSlice<'a, [T]>where
T: Copy,
Source§fn from(b: VertexBufferSlice<'a, T>) -> BufferSlice<'a, [T]>
fn from(b: VertexBufferSlice<'a, T>) -> BufferSlice<'a, [T]>
Source§impl<'a, T> Into<VerticesSource<'a>> for VertexBufferSlice<'a, T>where
T: Copy,
impl<'a, T> Into<VerticesSource<'a>> for VertexBufferSlice<'a, T>where
T: Copy,
Source§fn into(self) -> VerticesSource<'a>
fn into(self) -> VerticesSource<'a>
Auto Trait Implementations§
impl<'b, T> Freeze for VertexBufferSlice<'b, T>
impl<'b, T> !RefUnwindSafe for VertexBufferSlice<'b, T>
impl<'b, T> !Send for VertexBufferSlice<'b, T>
impl<'b, T> !Sync for VertexBufferSlice<'b, T>
impl<'b, T> Unpin for VertexBufferSlice<'b, T>
impl<'b, T> !UnwindSafe for VertexBufferSlice<'b, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<'a, T> MultiVerticesSource<'a> for Twhere
T: Into<VerticesSource<'a>>,
impl<'a, T> MultiVerticesSource<'a> for Twhere
T: Into<VerticesSource<'a>>,
Source§type Iterator = IntoIter<VerticesSource<'a>>
type Iterator = IntoIter<VerticesSource<'a>>
Source§fn iter(self) -> IntoIter<VerticesSource<'a>>
fn iter(self) -> IntoIter<VerticesSource<'a>>
VerticesSource
.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> SetParameter for T
impl<T> SetParameter for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self
from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self
is actually part of its subset T
(and can be converted to it).Source§unsafe fn to_subset_unchecked(&self) -> SS
unsafe fn to_subset_unchecked(&self) -> SS
self.to_subset
but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self
to the equivalent element of its superset.