scena 1.7.1

A Rust-native scene-graph renderer with typed scene state, glTF assets, and explicit prepare/render lifecycles.
Documentation
use std::sync::Weak;

use super::prepare;
use crate::scene::{CameraKey, ClippingPlane, SceneDirtyState};

#[derive(Debug, Clone)]
pub(super) struct PreparedSceneState {
    pub(super) scene: Weak<()>,
    pub(super) structure_revision: u64,
    pub(super) transform_revision: u64,
    pub(super) appearance_revision: u64,
    pub(super) visibility_revision: u64,
    pub(super) environment_revision: u64,
    pub(super) target_revision: u64,
    pub(super) debug_revision: u64,
    pub(super) retained_primitives: Vec<prepare::PreparedPrimitive>,
    pub(super) primitives: Vec<prepare::PreparedPrimitive>,
    pub(super) retained_strokes: Vec<prepare::PreparedStrokeSegment>,
    pub(super) strokes: Vec<prepare::PreparedStrokeSegment>,
    pub(super) retained_instances: Vec<prepare::PreparedInstanceSet>,
    pub(super) instances: Vec<prepare::PreparedInstanceSet>,
    pub(super) clipping_planes: Vec<ClippingPlane>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct RenderedFrameState {
    pub(super) dirty_state: SceneDirtyState,
    pub(super) camera: CameraKey,
}

impl RenderedFrameState {
    pub(crate) const fn dirty_state(self) -> SceneDirtyState {
        self.dirty_state
    }

    pub(crate) const fn camera(self) -> CameraKey {
        self.camera
    }

    pub(super) fn matches(self, dirty_state: SceneDirtyState, camera: CameraKey) -> bool {
        self.dirty_state.structure_revision == dirty_state.structure_revision
            && self.dirty_state.transform_revision == dirty_state.transform_revision
            && self.dirty_state.appearance_revision == dirty_state.appearance_revision
            && self.dirty_state.visibility_revision == dirty_state.visibility_revision
            && self.dirty_state.interaction_revision == dirty_state.interaction_revision
            && self.camera == camera
    }
}