pub struct GeometryBuffers {
pub vertex_buffer: Buffer,
pub index_buffer: Buffer,
pub instance_buffer: Buffer,
pub max_vertices: usize,
pub max_indices: usize,
}Expand description
Group of three GPU buffers used for geometry rendering: vertex, index, and instance. Owned by the renderer and used for every draw call.
Fields§
§vertex_buffer: BufferVertex buffer. Stores Vertex (position + normal + uv + color).
index_buffer: BufferIndex buffer. Stores u32 indices into the vertex buffer.
instance_buffer: BufferInstance buffer. Stores InstanceData for instanced rendering.
max_vertices: usizeCapacity in vertices (used to size the vertex and instance buffers).
max_indices: usizeCapacity in indices (used to size the index buffer).
Implementations§
Source§impl GeometryBuffers
impl GeometryBuffers
Sourcepub fn forge(device: &Device, max_vertices: usize, max_indices: usize) -> Self
pub fn forge(device: &Device, max_vertices: usize, max_indices: usize) -> Self
Create the three geometry buffers on the given device with the given capacities. The buffers are immediately usable for COPY_DST writes.
Sourcepub fn vram_bytes(&self) -> u64
pub fn vram_bytes(&self) -> u64
Total VRAM cost of the three buffers in bytes.
Sourcepub fn grow_vertex_buffer(
&mut self,
device: &Device,
min_capacity: usize,
max_capacity: usize,
) -> bool
pub fn grow_vertex_buffer( &mut self, device: &Device, min_capacity: usize, max_capacity: usize, ) -> bool
Grow the vertex buffer to accommodate at least min_capacity
vertices. Returns true if the buffer was actually
reallocated (i.e., the previous capacity was too small).
Returns false if the buffer was already large enough,
avoiding the expensive device.create_buffer() call.
Auto Trait Implementations§
impl !RefUnwindSafe for GeometryBuffers
impl !UnwindSafe for GeometryBuffers
impl Freeze for GeometryBuffers
impl Send for GeometryBuffers
impl Sync for GeometryBuffers
impl Unpin for GeometryBuffers
impl UnsafeUnpin for GeometryBuffers
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
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 more