pub struct VItemsBuffer {Show 13 fields
pub(crate) item_infos_buffer: WgpuVecBuffer<ItemInfo>,
pub(crate) planes_buffer: WgpuVecBuffer<PlaneData>,
pub(crate) clip_boxes_buffer: WgpuVecBuffer<i32>,
pub(crate) transforms_buffer: WgpuVecBuffer<VitemTransform>,
pub(crate) points3d_buffer: WgpuVecBuffer<Vec4>,
pub(crate) points2d_buffer: WgpuVecBuffer<Vec4>,
pub(crate) fill_rgbas_buffer: WgpuVecBuffer<Rgba>,
pub(crate) stroke_rgbas_buffer: WgpuVecBuffer<Rgba>,
pub(crate) stroke_widths_buffer: WgpuVecBuffer<Width>,
pub(crate) item_count: u32,
pub(crate) total_points: u32,
pub(crate) compute_bind_group: Option<BindGroup>,
pub(crate) render_bind_group: Option<BindGroup>,
}Expand description
Merged GPU buffers for all VItems in a frame.
Instead of one set of buffers per VItem, all data is packed into
contiguous arrays with an index table (item_infos) that tells
shaders where each item’s data lives.
Fields§
§item_infos_buffer: WgpuVecBuffer<ItemInfo>Per-item metadata: offsets and counts
planes_buffer: WgpuVecBuffer<PlaneData>Per-item plane data (normal + origin for vertex shader)
clip_boxes_buffer: WgpuVecBuffer<i32>Per-item clip boxes (5 i32 each: min_x, max_x, min_y, max_y, max_w)
transforms_buffer: WgpuVecBuffer<VitemTransform>Per-item local-to-world transforms
points3d_buffer: WgpuVecBuffer<Vec4>Merged 3D points from all VItems
points2d_buffer: WgpuVecBuffer<Vec4>Merged 2D projected points (written by compute shader)
fill_rgbas_buffer: WgpuVecBuffer<Rgba>Merged fill colors
stroke_rgbas_buffer: WgpuVecBuffer<Rgba>Merged stroke colors
stroke_widths_buffer: WgpuVecBuffer<Width>Merged stroke widths
item_count: u32Number of items
total_points: u32Total number of points across all items
compute_bind_group: Option<BindGroup>Compute bind group (recreated when buffers resize)
render_bind_group: Option<BindGroup>Render bind group (recreated when buffers resize)
Implementations§
Source§impl VItemsBuffer
impl VItemsBuffer
pub fn new(ctx: &WgpuContext) -> Self
Sourcepub fn update<'a, I>(&mut self, ctx: &WgpuContext, vitems: I)
pub fn update<'a, I>(&mut self, ctx: &WgpuContext, vitems: I)
Pack all VItems into the merged buffers. Called once per frame.
pub fn item_count(&self) -> u32
pub fn total_points(&self) -> u32
pub fn compute_bind_group_layout(ctx: &WgpuContext) -> BindGroupLayout
pub fn render_bind_group_layout(ctx: &WgpuContext) -> BindGroupLayout
fn create_compute_bind_group(ctx: &WgpuContext, this: &Self) -> BindGroup
fn create_render_bind_group(ctx: &WgpuContext, this: &Self) -> BindGroup
Trait Implementations§
Source§impl Component for VItemsBuffer
impl Component for VItemsBuffer
Source§const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::SparseSet
const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::SparseSet
Source§type Mutability = Mutable
type Mutability = Mutable
Component<Mutability = Mutable>],
while immutable components will instead have [Component<Mutability = Immutable>]. Read moreSource§fn register_required_components(
_requiree: ComponentId,
required_components: &mut RequiredComponentsRegistrator<'_, '_>,
)
fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Source§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
ComponentRelationshipAccessor] required for working with relationships in dynamic contexts. Read more§fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_add [ComponentHook] for this [Component] if one is defined.§fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_insert [ComponentHook] for this [Component] if one is defined.§fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_discard [ComponentHook] for this [Component] if one is defined.§fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_remove [ComponentHook] for this [Component] if one is defined.§fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>
on_despawn [ComponentHook] for this [Component] if one is defined.§fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
fn map_entities<E>(_this: &mut Self, _mapper: &mut E)where
E: EntityMapper,
EntityMapper]. This is used to remap entities in contexts like scenes and entity cloning.
When deriving [Component], this is populated by annotating fields containing entities with #[entities] Read moreimpl Resource for VItemsBuffer
Auto Trait Implementations§
impl !RefUnwindSafe for VItemsBuffer
impl !UnwindSafe for VItemsBuffer
impl Freeze for VItemsBuffer
impl Send for VItemsBuffer
impl Sync for VItemsBuffer
impl Unpin for VItemsBuffer
impl UnsafeUnpin for VItemsBuffer
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<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>
§fn get_component_ids(
components: &Components,
) -> impl Iterator<Item = Option<ComponentId>>
fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>
Bundle]’s component ids. This will be None if the component has not been registered.§impl<C> BundleFromComponents for Cwhere
C: Component,
impl<C> BundleFromComponents for Cwhere
C: Component,
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ConditionalSend for Twhere
T: Send,
§impl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
§unsafe fn get_components(
ptr: MovingPtr<'_, C>,
func: &mut impl FnMut(StorageType, OwningPtr<'_>),
) -> <C as DynamicBundle>::Effect
unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect
§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
§fn into_result(self) -> Result<T, RunSystemError>
fn into_result(self) -> Result<T, RunSystemError>
§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> TransformedExt for T
impl<T> TransformedExt for T
Source§fn transformed<G>(self, transform: G) -> Transformed<Self, G>
fn transformed<G>(self, transform: G) -> Transformed<Self, G>
self wrapped with transform stored exactly as G.