Struct maplibre::vector::resource::buffer_pool::BufferPool
source · pub struct BufferPool<Q, B, V, I, TM, FM> {
vertices: BackingBuffer<B>,
indices: BackingBuffer<B>,
layer_metadata: BackingBuffer<B>,
feature_metadata: BackingBuffer<B>,
index: RingIndex,
phantom_v: PhantomData<V>,
phantom_i: PhantomData<I>,
phantom_q: PhantomData<Q>,
phantom_m: PhantomData<TM>,
phantom_fm: PhantomData<FM>,
}
Expand description
This is inspired by the memory pool in Vulkan documented here.
Fields§
§vertices: BackingBuffer<B>
§indices: BackingBuffer<B>
§layer_metadata: BackingBuffer<B>
§feature_metadata: BackingBuffer<B>
§index: RingIndex
§phantom_v: PhantomData<V>
§phantom_i: PhantomData<I>
§phantom_q: PhantomData<Q>
§phantom_m: PhantomData<TM>
§phantom_fm: PhantomData<FM>
Implementations§
source§impl<V: Pod, I: Pod, TM: Pod, FM: Pod> BufferPool<Queue, Buffer, V, I, TM, FM>
impl<V: Pod, I: Pod, TM: Pod, FM: Pod> BufferPool<Queue, Buffer, V, I, TM, FM>
pub fn from_device(device: &Device) -> Self
source§impl<Q: Queue<B>, B, V: Pod, I: Pod, TM: Pod, FM: Pod> BufferPool<Q, B, V, I, TM, FM>
impl<Q: Queue<B>, B, V: Pod, I: Pod, TM: Pod, FM: Pod> BufferPool<Q, B, V, I, TM, FM>
pub fn new( vertices: BackingBufferDescriptor<B>, indices: BackingBufferDescriptor<B>, layer_metadata: BackingBufferDescriptor<B>, feature_metadata: BackingBufferDescriptor<B> ) -> Self
pub fn clear(&mut self)
pub fn vertices(&self) -> &B
pub fn indices(&self) -> &B
pub fn metadata(&self) -> &B
pub fn feature_metadata(&self) -> &B
sourcefn align(
stride: BufferAddress,
elements: BufferAddress,
usable_elements: BufferAddress
) -> (BufferAddress, BufferAddress)
fn align( stride: BufferAddress, elements: BufferAddress, usable_elements: BufferAddress ) -> (BufferAddress, BufferAddress)
The VertexBuffers can contain padding elements. Not everything from a VertexBuffers is useable.
The function returns the bytes
and aligned_bytes
. See OverAlignedVertexBuffer
.
pub fn get_loaded_source_layers_at( &self, coords: WorldTileCoords ) -> Option<HashSet<&str>>
sourcepub fn allocate_layer_geometry(
&mut self,
queue: &Q,
coords: WorldTileCoords,
style_layer: StyleLayer,
geometry: &OverAlignedVertexBuffer<V, I>,
layer_metadata: TM,
feature_metadata: &[FM]
)
pub fn allocate_layer_geometry( &mut self, queue: &Q, coords: WorldTileCoords, style_layer: StyleLayer, geometry: &OverAlignedVertexBuffer<V, I>, layer_metadata: TM, feature_metadata: &[FM] )
Allocates
geometry
layer_metadata
andfeature_metadata
for a layer. This function is able to dynamically evict layers if there is not enough space available.
pub fn update_layer_metadata( &self, queue: &Q, entry: &IndexEntry, layer_metadata: TM )
pub fn update_feature_metadata( &self, queue: &Q, entry: &IndexEntry, feature_metadata: &[FM] )
pub fn index(&self) -> &RingIndex
Trait Implementations§
source§impl<Q: Debug, B: Debug, V: Debug, I: Debug, TM: Debug, FM: Debug> Debug for BufferPool<Q, B, V, I, TM, FM>
impl<Q: Debug, B: Debug, V: Debug, I: Debug, TM: Debug, FM: Debug> Debug for BufferPool<Q, B, V, I, TM, FM>
source§impl<Q: Queue<B>, B, V: Pod, I: Pod, TM: Pod, FM: Pod> HasTile for BufferPool<Q, B, V, I, TM, FM>
impl<Q: Queue<B>, B, V: Pod, I: Pod, TM: Pod, FM: Pod> HasTile for BufferPool<Q, B, V, I, TM, FM>
fn has_tile(&self, coords: WorldTileCoords, _world: &World) -> bool
fn get_available_parent( &self, coords: WorldTileCoords, world: &World ) -> Option<WorldTileCoords>
fn get_available_children( &self, coords: WorldTileCoords, world: &World, search_depth: usize ) -> Option<Vec<WorldTileCoords>>
Auto Trait Implementations§
impl<Q, B, V, I, TM, FM> Freeze for BufferPool<Q, B, V, I, TM, FM>where
B: Freeze,
impl<Q, B, V, I, TM, FM> RefUnwindSafe for BufferPool<Q, B, V, I, TM, FM>where
B: RefUnwindSafe,
V: RefUnwindSafe,
I: RefUnwindSafe,
Q: RefUnwindSafe,
TM: RefUnwindSafe,
FM: RefUnwindSafe,
impl<Q, B, V, I, TM, FM> Send for BufferPool<Q, B, V, I, TM, FM>
impl<Q, B, V, I, TM, FM> Sync for BufferPool<Q, B, V, I, TM, FM>
impl<Q, B, V, I, TM, FM> Unpin for BufferPool<Q, B, V, I, TM, FM>
impl<Q, B, V, I, TM, FM> UnwindSafe for BufferPool<Q, B, V, I, TM, FM>
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
Mutably borrows from an owned value. Read more
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
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
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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>
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 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>
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