From 8230faf082c405c9fd0fa640f4ce2284315782ae Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Mon, 13 Apr 2026 04:40:29 +0200 Subject: feat: wasm compositor Made-with: Cursor --- rust/crates/compositor/src/frame.rs | 83 +++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 rust/crates/compositor/src/frame.rs (limited to 'rust/crates/compositor/src/frame.rs') diff --git a/rust/crates/compositor/src/frame.rs b/rust/crates/compositor/src/frame.rs new file mode 100644 index 00000000..871a9759 --- /dev/null +++ b/rust/crates/compositor/src/frame.rs @@ -0,0 +1,83 @@ +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, +} -- cgit v1.3.1