wde_pbr/deferred/transform/
ssbo_transforms.rs1use bevy::{ecs::system::SystemParamItem, prelude::*};
2use wde_camera::prelude::*;
3use wde_renderer::prelude::*;
4
5pub const SSBO_TRANSFORM_MAX_ENTITY: usize = 100_000;
7
8pub(crate) struct SsboTransformPlugin;
9impl Plugin for SsboTransformPlugin {
10 fn build(&self, app: &mut App) {
11 app.add_plugins(RenderDataRegisterPlugin::<PbrSsboTransform>::default());
12 }
13}
14
15#[derive(Asset, Clone, TypePath, Default)]
18pub struct PbrSsboTransform;
19impl PbrSsboTransform {
20 pub const TRANSFORM_IDX: u32 = 0;
21 pub const TRANSFORM_STAGING_IDX: u32 = 1;
22}
23impl RenderData for PbrSsboTransform {
24 type Params = ();
25
26 fn describe(_params: &mut SystemParamItem<Self::Params>, builder: &mut RenderDataBuilder) {
27 builder
28 .add_buffer(
29 Self::TRANSFORM_IDX,
30 Buffer {
31 label: "pbr-ssbo-transform-gpu".to_string(),
32 size: std::mem::size_of::<TransformUniform>() * SSBO_TRANSFORM_MAX_ENTITY,
33 usage: BufferUsage::STORAGE | BufferUsage::COPY_DST,
34 content: None
35 }
36 )
37 .add_buffer(
38 Self::TRANSFORM_STAGING_IDX,
39 Buffer {
40 label: "pbr-ssbo-transform-staging".to_string(),
41 size: std::mem::size_of::<TransformUniform>() * SSBO_TRANSFORM_MAX_ENTITY,
42 usage: BufferUsage::COPY_SRC | BufferUsage::COPY_DST,
43 content: None
44 }
45 );
46 }
47}