use std::collections::HashMap; use serde::{Deserialize, Serialize}; use crate::BlendMode; #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct FrameDescriptor { pub width: u32, pub height: u32, pub clear: CanvasClearDescriptor, pub items: Vec, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CanvasClearDescriptor { pub color: [f32; 4], } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "camelCase")] pub enum FrameItemDescriptor { Layer(LayerDescriptor), SceneEffect { effect_pass_groups: Vec>, }, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LayerDescriptor { pub texture_id: String, pub transform: QuadTransformDescriptor, pub opacity: f32, pub blend_mode: BlendMode, #[serde(default)] pub effect_pass_groups: Vec>, pub mask: Option, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct QuadTransformDescriptor { pub center_x: f32, pub center_y: f32, pub width: f32, pub height: f32, pub rotation_degrees: f32, pub flip_x: bool, pub flip_y: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct LayerMaskDescriptor { pub texture_id: String, pub feather: f32, pub inverted: bool, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct EffectPassDescriptor { pub shader: String, pub uniforms: HashMap, } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(untagged)] pub enum EffectUniformValueDescriptor { Number(f32), Vector(Vec), } #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct CanvasTextureDescriptor { pub id: String, pub width: u32, pub height: u32, }