# BufferPool in maplibre::render::resource - Rust
This is inspired by the memory pool in Vulkan documented here.
Keywords: rust, rustlang, rust-lang, BufferPool

# Struct maplibre::render::resource::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 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_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

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

#### pub fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more

source

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

const: unstable · source

#### pub fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more

source

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

const: unstable · source

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

Mutably borrows from an owned value. Read more

### impl<T> Downcast for T where
T: Any,

#### pub fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

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`. Read more

#### pub fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>

Convert `Rc<Trait>` (where `Trait: Downcast`) to `Rc<Any>`. `Rc<Any>` can then be further `downcast` into `Rc<ConcreteType>` where `ConcreteType` implements `Trait`. Read more

#### pub 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. Read more

#### pub 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. Read more

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

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

### impl<T> DowncastSync for T where
T: Any + Send + Sync,

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

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

source

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

const: unstable · source

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

Returns the argument unchanged.

source

### impl<T> Instrument for T

source

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

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

source

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

const: unstable · source

#### pub 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<T> 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.

const: unstable · source

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

const: unstable · source

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

Performs the conversion.

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

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

source

### impl<T> WithSubscriber for T

source

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

source

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

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