diff --git a/sixtyfps_runtime/corelib/graphics.rs b/sixtyfps_runtime/corelib/graphics.rs index 5b04df050..be3abf730 100644 --- a/sixtyfps_runtime/corelib/graphics.rs +++ b/sixtyfps_runtime/corelib/graphics.rs @@ -33,7 +33,6 @@ use crate::{ }; use auto_enums::auto_enum; -use cgmath::Matrix4; use const_field_offset::FieldOffsets; use core::pin::Pin; use sixtyfps_corelib_macros::*; @@ -386,7 +385,7 @@ pub trait Frame { fn render_primitive( &mut self, primitive: &Self::LowLevelRenderingPrimitive, - transform: &Matrix4, + translation: Point, variables: RenderingVariables, ) -> Vec; } diff --git a/sixtyfps_runtime/corelib/item_rendering.rs b/sixtyfps_runtime/corelib/item_rendering.rs index 1f7f3ed53..454856319 100644 --- a/sixtyfps_runtime/corelib/item_rendering.rs +++ b/sixtyfps_runtime/corelib/item_rendering.rs @@ -18,7 +18,6 @@ use crate::component::ComponentRc; use crate::eventloop::ComponentWindow; use crate::item_tree::ItemVisitorResult; use crate::slice::Slice; -use cgmath::{Matrix4, Vector3}; use std::cell::{Cell, RefCell}; /// This structure must be present in items that are Rendered and contains information. @@ -88,7 +87,6 @@ pub(crate) fn render_component_items( window: &std::rc::Rc>, origin: crate::graphics::Point, ) { - let transform = Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.)); let window = ComponentWindow::new(window.clone()); let frame = RefCell::new(frame); @@ -96,10 +94,9 @@ pub(crate) fn render_component_items( crate::item_tree::visit_items_with_post_visit( component, crate::item_tree::TraversalOrder::BackToFront, - |_, item, _, transform| { + |_, item, _, translation| { let origin = item.as_ref().geometry().origin; - let transform = - transform * Matrix4::from_translation(Vector3::new(origin.x, origin.y, 0.)); + let translation = *translation + euclid::Vector2D::new(origin.x, origin.y); let cached_rendering_data = item.cached_rendering_data_offset(); let cleanup_primitives = if cached_rendering_data.cache_ok.get() { @@ -108,21 +105,21 @@ pub(crate) fn render_component_items( &cache.get(cached_rendering_data.cache_index.get()).unwrap().primitive; frame.borrow_mut().render_primitive( &primitive, - &transform, + translation, item.as_ref().rendering_variables(&window), ) } else { Vec::new() }; - (ItemVisitorResult::Continue(transform), (transform, cleanup_primitives)) + (ItemVisitorResult::Continue(translation), (translation, cleanup_primitives)) }, - |_, _, (transform, cleanup_primitives)| { + |_, _, (translation, cleanup_primitives)| { cleanup_primitives.into_iter().for_each(|primitive| { - frame.borrow_mut().render_primitive(&primitive, &transform, Default::default()); + frame.borrow_mut().render_primitive(&primitive, translation, Default::default()); }) }, - transform, + origin, ); } diff --git a/sixtyfps_runtime/rendering_backends/gl/lib.rs b/sixtyfps_runtime/rendering_backends/gl/lib.rs index cddd7fc51..62190c00d 100644 --- a/sixtyfps_runtime/rendering_backends/gl/lib.rs +++ b/sixtyfps_runtime/rendering_backends/gl/lib.rs @@ -820,10 +820,11 @@ impl GraphicsFrame for GLFrame { fn render_primitive( &mut self, primitive: &OpaqueRenderingPrimitive, - transform: &Matrix4, + translation: Point, variables: RenderingVariables, ) -> Vec { - let mut matrix = self.root_matrix * transform; + let mut matrix = self.root_matrix + * Matrix4::from_translation(cgmath::Vector3::new(translation.x, translation.y, 0.)); if let RenderingVariables::Text { translate, .. } = &variables { matrix = matrix