pub struct VItemsBuffer {
pub(crate) item_infos_buffer: WgpuVecBuffer<ItemInfo>,
pub(crate) planes_buffer: WgpuVecBuffer<PlaneData>,
pub(crate) clip_boxes_buffer: WgpuVecBuffer<i32>,
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)
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
A constant indicating the storage type used for this component.
Source§type Mutability = Mutable
type Mutability = Mutable
A marker type to assist Bevy with determining if this component is
mutable, or immutable. Mutable components will have [
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<'_, '_>, )
Registers required components. Read more
Source§fn clone_behavior() -> ComponentCloneBehavior
fn clone_behavior() -> ComponentCloneBehavior
Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>
Returns [
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)>
Gets the
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)>
Gets the
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)>
Gets the
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)>
Gets the
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)>
Gets the
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,
Maps the entities on this component using the given [
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 Freeze for VItemsBuffer
impl !RefUnwindSafe for VItemsBuffer
impl Send for VItemsBuffer
impl Sync for VItemsBuffer
impl Unpin for VItemsBuffer
impl UnsafeUnpin for VItemsBuffer
impl !UnwindSafe 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
Mutably borrows from an owned value. Read more
§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>>
Return a iterator over this [
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<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
Moves the components out of the bundle. Read more
§unsafe fn apply_effect(
_ptr: MovingPtr<'_, MaybeUninit<C>>,
_entity: &mut EntityWorldMut<'_>,
)
unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )
Applies the after-effects of spawning this bundle. Read more
§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§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>
Converts this type into the system output type.