From b05e61f5c8ae61c9f3c7cc08cded53901ebbccfd Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Wed, 3 Apr 2024 21:07:54 +0200 Subject: Redesign `iced_wgpu` layering architecture --- renderer/src/fallback.rs | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index b9ceb4b2..b6459243 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -39,16 +39,20 @@ where delegate!(self, renderer, renderer.clear()); } - fn start_layer(&mut self) { - delegate!(self, renderer, renderer.start_layer()); + fn start_layer(&mut self, bounds: Rectangle) { + delegate!(self, renderer, renderer.start_layer(bounds)); } fn end_layer(&mut self, bounds: Rectangle) { delegate!(self, renderer, renderer.end_layer(bounds)); } - fn start_transformation(&mut self) { - delegate!(self, renderer, renderer.start_transformation()); + fn start_transformation(&mut self, transformation: Transformation) { + delegate!( + self, + renderer, + renderer.start_transformation(transformation) + ); } fn end_transformation(&mut self, transformation: Transformation) { @@ -433,6 +437,7 @@ mod geometry { } } + #[derive(Clone)] pub enum Geometry { Left(L), Right(R), @@ -452,10 +457,21 @@ mod geometry { } } - fn cache(self) -> Self::Cache { - match self { - Self::Left(geometry) => Geometry::Left(geometry.cache()), - Self::Right(geometry) => Geometry::Right(geometry.cache()), + fn cache(self, previous: Option) -> Self::Cache { + match (self, previous) { + (Self::Left(geometry), Some(Geometry::Left(previous))) => { + Geometry::Left(geometry.cache(Some(previous))) + } + (Self::Left(geometry), None) => { + Geometry::Left(geometry.cache(None)) + } + (Self::Right(geometry), Some(Geometry::Right(previous))) => { + Geometry::Right(geometry.cache(Some(previous))) + } + (Self::Right(geometry), None) => { + Geometry::Right(geometry.cache(None)) + } + _ => unreachable!(), } } } -- cgit From 6d3e1d835e1688fbc58622a03a784ed25ed3f0e1 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Fri, 5 Apr 2024 23:59:21 +0200 Subject: Decouple caching from layering and simplify everything --- renderer/src/fallback.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index b6459243..60b57604 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -405,7 +405,7 @@ where #[cfg(feature = "geometry")] mod geometry { use super::Renderer; - use crate::core::{Point, Radians, Size, Vector}; + use crate::core::{Point, Radians, Rectangle, Size, Vector}; use crate::graphics::geometry::{self, Fill, Path, Stroke, Text}; use crate::graphics::Cached; @@ -533,10 +533,10 @@ mod geometry { delegate!(self, frame, frame.pop_transform()); } - fn draft(&mut self, size: Size) -> Self { + fn draft(&mut self, bounds: Rectangle) -> Self { match self { - Self::Left(frame) => Self::Left(frame.draft(size)), - Self::Right(frame) => Self::Right(frame.draft(size)), + Self::Left(frame) => Self::Left(frame.draft(bounds)), + Self::Right(frame) => Self::Right(frame.draft(bounds)), } } -- cgit From d922b478156488a7bc03c6e791e05c040d702634 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Mon, 8 Apr 2024 15:04:35 +0200 Subject: Reintroduce support for custom primitives in `iced_wgpu` --- renderer/src/fallback.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index 2676ba87..975f4866 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -399,19 +399,19 @@ where } #[cfg(feature = "wgpu")] -impl iced_wgpu::primitive::pipeline::Renderer for Renderer +impl iced_wgpu::primitive::Renderer for Renderer where - A: iced_wgpu::primitive::pipeline::Renderer, + A: iced_wgpu::primitive::Renderer, B: core::Renderer, { - fn draw_pipeline_primitive( + fn draw_primitive( &mut self, bounds: Rectangle, - primitive: impl iced_wgpu::primitive::pipeline::Primitive, + primitive: impl iced_wgpu::Primitive, ) { match self { Self::Primary(renderer) => { - renderer.draw_pipeline_primitive(bounds, primitive); + renderer.draw_primitive(bounds, primitive); } Self::Secondary(_) => { log::warn!( -- cgit From 6ad5bb3597f640ac329801adf735d633bf0a512f Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Tue, 9 Apr 2024 22:25:16 +0200 Subject: Port `iced_tiny_skia` to new layering architecture --- renderer/src/fallback.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'renderer/src') diff --git a/renderer/src/fallback.rs b/renderer/src/fallback.rs index 975f4866..c932de00 100644 --- a/renderer/src/fallback.rs +++ b/renderer/src/fallback.rs @@ -9,6 +9,8 @@ use crate::graphics; use crate::graphics::compositor; use crate::graphics::mesh; +use std::borrow::Cow; + /// A renderer `A` with a fallback strategy `B`. /// /// This type can be used to easily compose existing renderers and @@ -51,8 +53,8 @@ where delegate!(self, renderer, renderer.start_layer(bounds)); } - fn end_layer(&mut self, bounds: Rectangle) { - delegate!(self, renderer, renderer.end_layer(bounds)); + fn end_layer(&mut self) { + delegate!(self, renderer, renderer.end_layer()); } fn start_transformation(&mut self, transformation: Transformation) { @@ -63,8 +65,8 @@ where ); } - fn end_transformation(&mut self, transformation: Transformation) { - delegate!(self, renderer, renderer.end_transformation(transformation)); + fn end_transformation(&mut self) { + delegate!(self, renderer, renderer.end_transformation()); } } @@ -93,10 +95,6 @@ where delegate!(self, renderer, renderer.default_size()) } - fn load_font(&mut self, font: std::borrow::Cow<'static, [u8]>) { - delegate!(self, renderer, renderer.load_font(font)); - } - fn fill_paragraph( &mut self, text: &Self::Paragraph, @@ -323,6 +321,10 @@ where } } + fn load_font(&mut self, font: Cow<'static, [u8]>) { + delegate!(self, compositor, compositor.load_font(font)); + } + fn fetch_information(&self) -> compositor::Information { delegate!(self, compositor, compositor.fetch_information()) } -- cgit