Skip to main content

wde_pbr/deferred/transform/
ssbo_transforms.rs

1use bevy::{ecs::system::SystemParamItem, prelude::*};
2use wde_camera::prelude::*;
3use wde_renderer::prelude::*;
4
5/// The maximum number of entity transforms in the ssbo.
6pub 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/// Contains the transform data for the entities in the scene.
16/// See [crate::deferred] level documentation for more details on how this is used, and how it is updated.
17#[derive(Asset, Clone, TypePath, Default)]
18pub struct PbrSsboTransform;
19impl PbrSsboTransform {
20    pub const TRANSFORM_IDX: u32 = 0;
21}
22impl RenderData for PbrSsboTransform {
23    type Params = ();
24
25    fn describe(_params: &mut SystemParamItem<Self::Params>, builder: &mut RenderDataBuilder) {
26        builder.add_buffer(
27            Self::TRANSFORM_IDX,
28            Buffer {
29                label: "pbr-ssbo-transform-gpu".to_string(),
30                size: std::mem::size_of::<TransformUniform>() * SSBO_TRANSFORM_MAX_ENTITY,
31                usage: BufferUsage::STORAGE | BufferUsage::COPY_DST,
32                content: None
33            }
34        );
35    }
36}