# BufferPool in maplibre::vector::resource::buffer_pool - Rust
This is inspired by the memory pool in Vulkan documented here.

# 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>

source

#### 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>

source

#### pub fn new( vertices: BackingBufferDescriptor<B>, indices: BackingBufferDescriptor<B>, layer_metadata: BackingBufferDescriptor<B>, feature_metadata: BackingBufferDescriptor<B> ) -> Self

source

#### pub fn clear(&mut self)

source

#### pub fn vertices(&self) -> &B

source

#### pub fn indices(&self) -> &B

source

#### pub fn metadata(&self) -> &B

source

#### pub fn feature_metadata(&self) -> &B

source

#### 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`.

source

#### pub fn get_loaded_source_layers_at( &self, coords: WorldTileCoords ) -> Option<HashSet<&str>>

source

#### 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` and
- `feature_metadata` for a layer. This function is able to dynamically evict layers if there is not enough space available.

source

#### pub fn update_layer_metadata( &self, queue: &Q, entry: &IndexEntry, layer_metadata: TM )

source

#### pub fn update_feature_metadata( &self, queue: &Q, entry: &IndexEntry, feature_metadata: &[FM] )

source

#### 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>

source §

#### fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source §

### impl<Q: Queue<B>, B, V: Pod, I: Pod, TM: Pod, FM: Pod> HasTile for BufferPool<Q, B, V, I, TM, FM>

source §

#### fn has_tile(&self, coords: WorldTileCoords, _world: &World) -> bool

source §

#### fn get_available_parent( &self, coords: WorldTileCoords, world: &World ) -> Option<WorldTileCoords>

source §

#### 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> RefUnwindSafe for BufferPool<Q, B, V, I, TM, FM>
where B: RefUnwindSafe, FM: RefUnwindSafe, I: RefUnwindSafe, Q: RefUnwindSafe, TM: RefUnwindSafe, V: RefUnwindSafe,

§

### impl<Q, B, V, I, TM, FM> Send for BufferPool<Q, B, V, I, TM, FM>
where B: Send, FM: Send, I: Send, Q: Send, TM: Send, V: Send,

§

### impl<Q, B, V, I, TM, FM> Sync for BufferPool<Q, B, V, I, TM, FM>
where B: Sync, FM: Sync, I: Sync, Q: Sync, TM: Sync, V: Sync,

§

### impl<Q, B, V, I, TM, FM> Unpin for BufferPool<Q, B, V, I, TM, FM>
where B: Unpin, FM: Unpin, I: Unpin, Q: Unpin, TM: Unpin, V: Unpin,

§

### impl<Q, B, V, I, TM, FM> UnwindSafe for BufferPool<Q, B, V, I, TM, FM>
where B: UnwindSafe, FM: UnwindSafe, I: UnwindSafe, Q: UnwindSafe, TM: UnwindSafe, V: UnwindSafe,

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

### impl<T> Downcast<T> for T

§

#### fn downcast(&self) -> &T

§

### impl<T> Downcast for T
where T: 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>

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)

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)

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
where T: Any + Send + Sync,

§

#### fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Send + Sync>

Convert `Arc<Trait>` (where `Trait: Downcast`) to `Arc<Any>`. `Arc<Any>` can then be further `downcast` into `Arc<ConcreteType>` where `ConcreteType` implements `Trait`.
source §

### impl<T> From<T> for T

source §

#### fn from(t: T) -> T

Returns the argument unchanged.

§

### impl<T> Instrument for T

§

#### fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [`Span`], returning an `Instrumented` wrapper. Read more
§

#### fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
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> Same for T

§

#### type Output = T

Should always be `Self`
source §

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

§

#### 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>,

§

#### 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.
§

### impl<T> Upcast<T> for T

§

#### fn upcast(&self) -> Option<&T>

§

### impl<T> WithSubscriber for T

§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

#### fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default `Subscriber` to this type, returning a [`WithDispatch`] wrapper. Read more
§

### impl<G1, G2> Within<G2> for G1
where G2: Contains<G1>,

§

#### fn is_within(&self, b: &G2) -> bool

source §

### impl<T> Resource for T
where T: 'static,

§

### impl<T> WasmNotSend for T
where T: Send,

§

### impl<T> WasmNotSync for T
where T: Sync,