use crate::normalized_scene::{ChildLayerComposite, CollectedLayer, LoweredChildSource};
use crate::scene::{
BackdropLayer, ColorPatch, CompositorScene, DrawOp, DrawShape, EffectLayer, ImageDraw,
PendingFeedCapture, RetainedDraw, ShadowDraw, TextDraw,
};
use cranpose_core::NodeId;
use cranpose_render_common::graph::{DrawCommandId, ProjectiveTransform};
use cranpose_ui_graphics::{GraphicsLayer, Rect, RenderEffect};
#[derive(Default)]
pub(crate) struct ReplayFrameOps {
pub(crate) generation: u64,
pub(crate) frame: u64,
pub(crate) captures: Vec<PendingFeedCapture>,
pub(crate) color_patches: Vec<ColorPatch>,
pub(crate) releases: Vec<u32>,
}
pub(crate) type ReplayConfirmation = ((DrawCommandId, u32), u32);
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum CancelReason {
RendererEpoch,
SurfaceEpoch,
Viewport,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum PresentOutcome {
#[default]
NotRun,
Presented,
Cancelled(CancelReason),
}
pub(crate) struct ReplayAck {
pub(crate) generation: u64,
pub(crate) confirmations: Vec<ReplayConfirmation>,
}
pub(crate) enum PacketRoot {
Direct(Box<CollectedLayer>),
Surface(Box<RootSurfacePacket>),
}
pub(crate) struct RootSurfacePacket {
pub(crate) lowered: ChildLayerComposite,
pub(crate) source: LoweredChildSource,
pub(crate) transform_to_parent: ProjectiveTransform,
pub(crate) node_id: Option<NodeId>,
pub(crate) backdrop: Option<RenderEffect>,
pub(crate) graphics_layer: GraphicsLayer,
pub(crate) local_bounds: Rect,
pub(crate) clip_rect: Option<Rect>,
pub(crate) shadow_clip: Option<Rect>,
}
pub(crate) struct FramePacket {
pub(crate) frame_id: u64,
pub(crate) viewport: (u32, u32),
pub(crate) renderer_epoch: u64,
pub(crate) surface_epoch: u64,
pub(crate) root_scale: f32,
pub(crate) root: PacketRoot,
pub(crate) overlay: Option<CollectedLayer>,
pub(crate) replay: ReplayFrameOps,
pub(crate) text_cache_len: usize,
}
#[derive(Default)]
pub(crate) struct RenderReturns {
pub(crate) scene: Option<CompositorScene>,
pub(crate) ack: Option<(ReplayAck, ReplayFrameOps)>,
pub(crate) frame_id: u64,
pub(crate) outcome: PresentOutcome,
pub(crate) cancelled_replay: Option<ReplayFrameOps>,
}
const _: () = {
const fn assert_send<T: Send>() {}
assert_send::<FramePacket>();
assert_send::<PacketRoot>();
assert_send::<RootSurfacePacket>();
assert_send::<CollectedLayer>();
assert_send::<ChildLayerComposite>();
assert_send::<LoweredChildSource>();
assert_send::<CompositorScene>();
assert_send::<DrawShape>();
assert_send::<ImageDraw>();
assert_send::<TextDraw>();
assert_send::<ShadowDraw>();
assert_send::<DrawOp>();
assert_send::<EffectLayer>();
assert_send::<BackdropLayer>();
assert_send::<RetainedDraw>();
assert_send::<ReplayFrameOps>();
assert_send::<ReplayAck>();
assert_send::<RenderReturns>();
assert_send::<CancelReason>();
assert_send::<PresentOutcome>();
assert_send::<ColorPatch>();
assert_send::<PendingFeedCapture>();
};