nightshade-renderer 0.57.0

GPU-driven wgpu renderer with a built-in frame graph.
//! Prebuilt bundles of the renderer's own scene components.
//!
//! Each bundle groups the components that spawn together for one kind of
//! renderable. Spawn one with `spawn`/`spawn_with`, or nest it inside another
//! bundle.

use crate::config::{
    InstancedObjectData, MeshletPlacement, RenderBounds, RenderClothData, RenderDecalData,
    RenderLightData, RenderText, RenderWaterData,
};
use crate::render_world::{
    CullingMask, Layer, MaterialId, MeshName, RenderEmitter, Transform, Visible,
};

nightshade_ecs::bundle! {
    /// A drawable mesh: transform, mesh name, material, visibility, culling, and bounds.
    pub struct RenderObjectBundle {
        pub transform: Transform,
        pub mesh: MeshName,
        pub material: MaterialId,
        pub visible: Visible,
        pub culling_mask: CullingMask,
        pub layer: Layer,
        pub bounds: RenderBounds,
    }
}

nightshade_ecs::bundle! {
    /// A light source in render space.
    pub struct RenderLightBundle {
        pub transform: Transform,
        pub light: RenderLightData,
    }
}

nightshade_ecs::bundle! {
    /// A projected decal.
    pub struct RenderDecalBundle {
        pub transform: Transform,
        pub decal: RenderDecalData,
    }
}

nightshade_ecs::bundle! {
    /// A water surface.
    pub struct RenderWaterBundle {
        pub transform: Transform,
        pub water: RenderWaterData,
    }
}

nightshade_ecs::bundle! {
    /// A GPU particle emitter's render state.
    pub struct RenderEmitterBundle {
        pub transform: Transform,
        pub emitter: RenderEmitter,
    }
}

nightshade_ecs::bundle! {
    /// An instanced draw of a mesh with a material.
    pub struct RenderInstancedBundle {
        pub transform: Transform,
        pub instanced: InstancedObjectData,
        pub material: MaterialId,
    }
}

nightshade_ecs::bundle! {
    /// A block of world-space text.
    pub struct RenderTextBundle {
        pub transform: Transform,
        pub text: RenderText,
    }
}

nightshade_ecs::bundle! {
    /// A simulated cloth surface with a material.
    pub struct RenderClothBundle {
        pub transform: Transform,
        pub cloth: RenderClothData,
        pub material: MaterialId,
    }
}

nightshade_ecs::bundle! {
    /// A meshlet-based drawable with a material and bounds.
    pub struct RenderMeshletBundle {
        pub transform: Transform,
        pub meshlet: MeshletPlacement,
        pub material: MaterialId,
        pub bounds: RenderBounds,
    }
}