dynamis-state 0.7.0

Shared world state streams for bodies, colliders, constraints, and shapes
Documentation
use crate::capacity::floor;
use crate::{StateCapacity, StateDemand, StateInputs, StateStreams};
use dynamis_abi::Counters;
use dynamis_domain::{Domain, Run, StepFacts};
use dynamis_gpu::GpuContext;
use dynamis_gpu::Resources;
use dynamis_pass::{PassGroup, Pipeline, Schedule};
use wgpu::CommandEncoder;

pub struct StateDomain;

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub struct StateWork {
    pub queries: u32,
    pub shape_uploads: bool,
}

impl Domain for StateDomain {
    const ID: u32 = 0;

    const SIMULATES: bool = false;

    const PASS_EDGES: dynamis_pass::PassEdges = &[];

    type Demand = StateDemand;
    type Inputs = StateInputs;
    type Work = StateWork;
    type Streams = StateStreams;
    type Planner = ();
    type Passes = ();
    type Runtime = ();
    type Frame = ();
    type Capacity = StateCapacity;

    fn minimum() -> StateDemand {
        floor()
    }

    fn occupied(_: &StateInputs) -> bool {
        true
    }

    fn pending(work: &StateWork) -> bool {
        work.queries > 0 || work.shape_uploads
    }

    fn active(_: &Counters) -> bool {
        false
    }

    fn pass_groups() -> &'static [PassGroup] {
        &[]
    }

    fn resolve(_: &Pipeline) {}

    fn build(_: &GpuContext, _: &impl Resources, _: ()) {}

    fn frame(_: &StepFacts, _: &StateInputs, _: Run) {}

    fn capacity(streams: &StateStreams) -> StateCapacity {
        crate::capacity(streams)
    }

    fn record(
        _: &(),
        _: u32,
        _: &mut Schedule,
        _: &mut CommandEncoder,
        _: &impl Resources,
        _: &(),
    ) {
    }
}