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 (origin + basis)
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(&mut self, ctx: &WgpuContext, vitems: &[VItem])
pub fn update(&mut self, ctx: &WgpuContext, vitems: &[VItem])
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
Auto Trait Implementations§
impl Freeze for VItemsBuffer
impl !RefUnwindSafe for VItemsBuffer
impl Send for VItemsBuffer
impl Sync for VItemsBuffer
impl Unpin for VItemsBuffer
impl !UnwindSafe for VItemsBuffer
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 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