Struct VertexBufferSlice

Source
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>
where T: 'b + Copy + Content,

Source

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]>>§

Source

pub fn get_size(&self) -> usize

Returns the size in bytes of this slice.

Source

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

Returns the context corresponding to this buffer.

Source

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.

Source

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.

Source

pub fn read(&self) -> Result<<T as Content>::Owned, ReadError>

Reads the content of the buffer.

Source

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.

Source

pub unsafe fn slice_custom<F, R>(&self, f: F) -> BufferSlice<'a, R>
where F: for<'r> FnOnce(&'r T) -> &'r R, R: Content + ?Sized,

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.

Source

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.

Source

pub fn len(&self) -> usize

Returns the number of elements in this slice.

Source

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.

Source

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,

Source§

type Target = BufferSlice<'a, [T]>

The resulting type after dereferencing.
Source§

fn deref(&self) -> &BufferSlice<'a, [T]>

Dereferences the value.
Source§

impl<'a, T> DerefMut for VertexBufferSlice<'a, T>
where T: Copy,

Source§

fn deref_mut(&mut self) -> &mut BufferSlice<'a, [T]>

Mutably dereferences the value.
Source§

impl<'a, T> From<VertexBufferSlice<'a, T>> for BufferSlice<'a, [T]>
where T: Copy,

Source§

fn from(b: VertexBufferSlice<'a, T>) -> BufferSlice<'a, [T]>

Converts to this type from the input type.
Source§

impl<'a, T> Into<VerticesSource<'a>> for VertexBufferSlice<'a, T>
where T: Copy,

Source§

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

Converts this type into the (usually inferred) input type.

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<'a, T> MultiVerticesSource<'a> for T
where T: Into<VerticesSource<'a>>,

Source§

type Iterator = IntoIter<VerticesSource<'a>>

Iterator that enumerates each source.
Source§

fn iter(self) -> IntoIter<VerticesSource<'a>>

Iterates over the VerticesSource.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SetParameter for T

Source§

fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Result
where T: Parameter<Self>,

Sets value as a parameter of self.
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

unsafe fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Erased for T