From 1c521e48313b42d2e314d139c3cf4ac5dc44e7a7 Mon Sep 17 00:00:00 2001 From: Ivan Molodetskikh Date: Sun, 9 Mar 2025 22:03:14 +0300 Subject: Update Smithay (Framebuffer type) --- Cargo.lock | 11 +++- niri-visual-tests/src/smithay_view.rs | 96 ++++++++++++++++++------------- niri-visual-tests/src/test_window.rs | 2 +- src/backend/tty.rs | 7 ++- src/backend/winit.rs | 16 ++++-- src/niri.rs | 6 +- src/render_helpers/border.rs | 4 +- src/render_helpers/clipped_surface.rs | 4 +- src/render_helpers/damage.rs | 2 +- src/render_helpers/mod.rs | 35 +++++++---- src/render_helpers/offscreen.rs | 4 +- src/render_helpers/primary_gpu_texture.rs | 4 +- src/render_helpers/render_elements.rs | 4 +- src/render_helpers/renderer.rs | 19 +++--- src/render_helpers/resize.rs | 4 +- src/render_helpers/shader_element.rs | 4 +- src/render_helpers/shaders/mod.rs | 2 +- src/render_helpers/shadow.rs | 4 +- src/render_helpers/solid_color.rs | 4 +- src/render_helpers/texture.rs | 8 +-- 20 files changed, 138 insertions(+), 102 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7cbdc080..3a089b20 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -30,6 +30,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "allocator-api2" version = "0.2.21" @@ -3360,8 +3366,9 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "smithay" version = "0.5.0" -source = "git+https://github.com/Smithay/smithay.git#25cf3cf41c5027ffeb55f90c683736726a81d71f" +source = "git+https://github.com/Smithay/smithay.git#3219a0f02a30de359f460ab165682a51cb13b7a5" dependencies = [ + "aliasable", "appendlist", "bitflags 2.9.0", "calloop 0.14.2", @@ -3431,7 +3438,7 @@ dependencies = [ [[package]] name = "smithay-drm-extras" version = "0.1.0" -source = "git+https://github.com/Smithay/smithay.git#25cf3cf41c5027ffeb55f90c683736726a81d71f" +source = "git+https://github.com/Smithay/smithay.git#3219a0f02a30de359f460ab165682a51cb13b7a5" dependencies = [ "drm", "libdisplay-info", diff --git a/niri-visual-tests/src/smithay_view.rs b/niri-visual-tests/src/smithay_view.rs index 7b8e77ee..1820ca45 100644 --- a/niri-visual-tests/src/smithay_view.rs +++ b/niri-visual-tests/src/smithay_view.rs @@ -17,19 +17,25 @@ mod imp { use niri::render_helpers::{resources, shaders}; use smithay::backend::egl::ffi::egl; use smithay::backend::egl::EGLContext; - use smithay::backend::renderer::gles::GlesRenderer; - use smithay::backend::renderer::{Color32F, Frame, Renderer, Unbind}; + use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture}; + use smithay::backend::renderer::{Bind, Color32F, Frame, Offscreen, Renderer}; + use smithay::reexports::gbm::Format as Fourcc; use smithay::utils::{Physical, Rectangle, Scale, Transform}; use super::*; type DynMakeTestCase = Box Box>; + struct RendererData { + renderer: GlesRenderer, + dummy_texture: GlesTexture, + } + #[derive(Default)] pub struct SmithayView { gl_area: gtk::GLArea, size: Cell<(i32, i32)>, - renderer: RefCell>>, + renderer: RefCell>>, pub make_test_case: OnceCell, test_case: RefCell>>, pub clock: RefCell, @@ -125,6 +131,10 @@ mod imp { let Ok(renderer) = renderer else { return Ok(()); }; + let RendererData { + renderer, + dummy_texture, + } = renderer; let size = self.size.get(); @@ -147,16 +157,45 @@ mod imp { let rect: Rectangle = Rectangle::from_size(Size::from(size)); - let elements = unsafe { - with_framebuffer_save_restore(renderer, |renderer| { - case.render(renderer, Size::from(size)) + // Fetch GtkGLArea's framebuffer binding. + let mut framebuffer = 0; + renderer + .with_context(|gl| unsafe { + gl.GetIntegerv( + smithay::backend::renderer::gles::ffi::FRAMEBUFFER_BINDING, + &mut framebuffer, + ); }) - }?; + .context("error running closure in GL context")?; + ensure!(framebuffer != 0, "error getting the framebuffer"); + + // This call will already change the framebuffer binding (offscreen elements will bind + // intermediate textures during rendering). + let elements = case.render(renderer, Size::from(size)); + + // HACK: there's currently no way to "just" render into an externally bound framebuffer + // (like we have in this case). The render() call requires a valid target. So what + // we'll do is use a dummy texture as a target, then swap the framebuffer binding right + // before rendering. + let mut dummy_target = renderer + .bind(dummy_texture) + .context("error binding dummy texture")?; let mut frame = renderer - .render(rect.size, Transform::Normal) + .render(&mut dummy_target, rect.size, Transform::Normal) .context("error creating frame")?; + // Now that render() bound the dummy texture, change the binding underneath it back to + // GtkGLArea's framebuffer, to render there instead. + frame + .with_context(|gl| unsafe { + gl.BindFramebuffer( + smithay::backend::renderer::gles::ffi::FRAMEBUFFER, + framebuffer as u32, + ); + }) + .context("error running closure in GL context")?; + frame .clear(Color32F::from([0.3, 0.3, 0.3, 1.]), &[rect]) .context("error clearing")?; @@ -177,7 +216,7 @@ mod imp { } } - unsafe fn create_renderer() -> anyhow::Result { + unsafe fn create_renderer() -> anyhow::Result { smithay::backend::egl::ffi::make_sure_egl_is_loaded() .context("error loading EGL symbols in Smithay")?; @@ -200,40 +239,17 @@ mod imp { let mut renderer = GlesRenderer::new(egl_context).context("error creating GlesRenderer")?; + let dummy_texture = renderer + .create_buffer(Fourcc::Abgr8888, Size::from((1, 1))) + .context("error creating dummy texture")?; + resources::init(&mut renderer); shaders::init(&mut renderer); - Ok(renderer) - } - - unsafe fn with_framebuffer_save_restore( - renderer: &mut GlesRenderer, - f: impl FnOnce(&mut GlesRenderer) -> T, - ) -> anyhow::Result { - let mut framebuffer = 0; - renderer - .with_context(|gl| unsafe { - gl.GetIntegerv( - smithay::backend::renderer::gles::ffi::FRAMEBUFFER_BINDING, - &mut framebuffer, - ); - }) - .context("error running closure in GL context")?; - ensure!(framebuffer != 0, "error getting the framebuffer"); - - let rv = f(renderer); - - renderer.unbind().context("error unbinding")?; - renderer - .with_context(|gl| unsafe { - gl.BindFramebuffer( - smithay::backend::renderer::gles::ffi::FRAMEBUFFER, - framebuffer as u32, - ); - }) - .context("error running closure in GL context")?; - - Ok(rv) + Ok(RendererData { + renderer, + dummy_texture, + }) } } diff --git a/niri-visual-tests/src/test_window.rs b/niri-visual-tests/src/test_window.rs index 228701c7..158f8b4b 100644 --- a/niri-visual-tests/src/test_window.rs +++ b/niri-visual-tests/src/test_window.rs @@ -11,7 +11,7 @@ use niri::render_helpers::solid_color::{SolidColorBuffer, SolidColorRenderElemen use niri::render_helpers::{RenderTarget, SplitElements}; use niri::utils::transaction::Transaction; use niri::window::ResolvedWindowRules; -use smithay::backend::renderer::element::{Id, Kind}; +use smithay::backend::renderer::element::Kind; use smithay::output::{self, Output}; use smithay::reexports::wayland_server::protocol::wl_surface::WlSurface; use smithay::utils::{Logical, Point, Scale, Serial, Size, Transform}; diff --git a/src/backend/tty.rs b/src/backend/tty.rs index 003413bf..cbb8c8c0 100644 --- a/src/backend/tty.rs +++ b/src/backend/tty.rs @@ -28,7 +28,7 @@ use smithay::backend::libinput::{LibinputInputBackend, LibinputSessionInterface} use smithay::backend::renderer::gles::GlesRenderer; use smithay::backend::renderer::multigpu::gbm::GbmGlesBackend; use smithay::backend::renderer::multigpu::{GpuManager, MultiFrame, MultiRenderer}; -use smithay::backend::renderer::{DebugFlags, ImportDma, ImportEgl, Renderer}; +use smithay::backend::renderer::{DebugFlags, ImportDma, ImportEgl, RendererSuper}; use smithay::backend::session::libseat::LibSeatSession; use smithay::backend::session::{Event as SessionEvent, Session}; use smithay::backend::udev::{self, UdevBackend, UdevEvent}; @@ -101,15 +101,16 @@ pub type TtyRenderer<'render> = MultiRenderer< GbmGlesBackend, >; -pub type TtyFrame<'render, 'frame> = MultiFrame< +pub type TtyFrame<'render, 'frame, 'buffer> = MultiFrame< 'render, 'render, 'frame, + 'buffer, GbmGlesBackend, GbmGlesBackend, >; -pub type TtyRendererError<'render> = as Renderer>::Error; +pub type TtyRendererError<'render> = as RendererSuper>::Error; type GbmDrmCompositor = DrmCompositor< GbmAllocator, diff --git a/src/backend/winit.rs b/src/backend/winit.rs index 3deec7a3..667b9209 100644 --- a/src/backend/winit.rs +++ b/src/backend/winit.rs @@ -190,12 +190,16 @@ impl Winit { } // Hand them over to winit. - self.backend.bind().unwrap(); - let age = self.backend.buffer_age().unwrap(); - let res = self - .damage_tracker - .render_output(self.backend.renderer(), age, &elements, [0.; 4]) - .unwrap(); + let res = { + let (renderer, mut framebuffer) = self.backend.bind().unwrap(); + // FIXME: currently impossible to call due to a mutable borrow. + // + // let age = self.backend.buffer_age().unwrap(); + let age = 0; + self.damage_tracker + .render_output(renderer, &mut framebuffer, age, &elements, [0.; 4]) + .unwrap() + }; niri.update_primary_scanout_output(output, &res.states); diff --git a/src/niri.rs b/src/niri.rs index bc8d1ad8..ef3d8594 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -33,7 +33,7 @@ use smithay::backend::renderer::element::{ }; use smithay::backend::renderer::gles::GlesRenderer; use smithay::backend::renderer::sync::SyncPoint; -use smithay::backend::renderer::{Color32F, Unbind}; +use smithay::backend::renderer::Color32F; use smithay::desktop::utils::{ bbox_from_surface_tree, output_update, send_dmabuf_feedback_surface_tree, send_frames_surface_tree, surface_presentation_feedback_flags_from_states, @@ -4536,10 +4536,6 @@ impl Niri { } }; - if let Err(err) = renderer.unbind() { - warn!("error unbinding after rendering for screencopy: {err:?}"); - } - Ok((sync, damages)) } diff --git a/src/render_helpers/border.rs b/src/render_helpers/border.rs index 588e53b1..a645212a 100644 --- a/src/render_helpers/border.rs +++ b/src/render_helpers/border.rs @@ -277,7 +277,7 @@ impl Element for BorderRenderElement { impl RenderElement for BorderRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -294,7 +294,7 @@ impl RenderElement for BorderRenderElement { impl<'render> RenderElement> for BorderRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/clipped_surface.rs b/src/render_helpers/clipped_surface.rs index f8d074e9..805e1bf3 100644 --- a/src/render_helpers/clipped_surface.rs +++ b/src/render_helpers/clipped_surface.rs @@ -218,7 +218,7 @@ impl Element for ClippedSurfaceRenderElement { impl RenderElement for ClippedSurfaceRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -242,7 +242,7 @@ impl<'render> RenderElement> { fn draw( &self, - frame: &mut TtyFrame<'render, '_>, + frame: &mut TtyFrame<'render, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/damage.rs b/src/render_helpers/damage.rs index 328851e8..d5d899de 100644 --- a/src/render_helpers/damage.rs +++ b/src/render_helpers/damage.rs @@ -65,7 +65,7 @@ impl Element for ExtraDamage { impl RenderElement for ExtraDamage { fn draw( &self, - _frame: &mut ::Frame<'_>, + _frame: &mut R::Frame<'_, '_>, _src: Rectangle, _dst: Rectangle, _damage: &[Rectangle], diff --git a/src/render_helpers/mod.rs b/src/render_helpers/mod.rs index 36df83dc..369ee5c2 100644 --- a/src/render_helpers/mod.rs +++ b/src/render_helpers/mod.rs @@ -6,7 +6,7 @@ use smithay::backend::allocator::dmabuf::Dmabuf; use smithay::backend::allocator::{Buffer, Fourcc}; use smithay::backend::renderer::element::utils::{Relocate, RelocateRenderElement}; use smithay::backend::renderer::element::{Kind, RenderElement}; -use smithay::backend::renderer::gles::{GlesMapping, GlesRenderer, GlesTexture}; +use smithay::backend::renderer::gles::{GlesMapping, GlesRenderer, GlesTarget, GlesTexture}; use smithay::backend::renderer::sync::SyncPoint; use smithay::backend::renderer::{Bind, Color32F, ExportMem, Frame, Offscreen, Renderer}; use smithay::reexports::wayland_server::protocol::wl_buffer::WlBuffer; @@ -197,15 +197,18 @@ pub fn render_to_texture( let buffer_size = size.to_logical(1).to_buffer(1, Transform::Normal); - let texture: GlesTexture = renderer + let mut texture: GlesTexture = renderer .create_buffer(fourcc, buffer_size) .context("error creating texture")?; - renderer - .bind(texture.clone()) - .context("error binding texture")?; + let sync_point = { + let mut target = renderer + .bind(&mut texture) + .context("error binding texture")?; + + render_elements(renderer, &mut target, size, scale, transform, elements)? + }; - let sync_point = render_elements(renderer, size, scale, transform, elements)?; Ok((texture, sync_point)) } @@ -219,11 +222,16 @@ pub fn render_and_download( ) -> anyhow::Result { let _span = tracy_client::span!(); - let (_, _) = render_to_texture(renderer, size, scale, transform, fourcc, elements)?; + let (mut texture, _) = render_to_texture(renderer, size, scale, transform, fourcc, elements)?; let buffer_size = size.to_logical(1).to_buffer(1, Transform::Normal); + // FIXME: would be nice to avoid binding the second time here (after render_to_texture()), but + // borrowing makes this invonvenient. + let target = renderer + .bind(&mut texture) + .context("error binding texture")?; let mapping = renderer - .copy_framebuffer(Rectangle::from_size(buffer_size), fourcc) + .copy_framebuffer(&target, Rectangle::from_size(buffer_size), fourcc) .context("error copying framebuffer")?; Ok(mapping) } @@ -248,7 +256,7 @@ pub fn render_to_vec( pub fn render_to_dmabuf( renderer: &mut GlesRenderer, - dmabuf: Dmabuf, + mut dmabuf: Dmabuf, size: Size, scale: Scale, transform: Transform, @@ -259,8 +267,10 @@ pub fn render_to_dmabuf( dmabuf.width() == size.w as u32 && dmabuf.height() == size.h as u32, "invalid buffer size" ); - renderer.bind(dmabuf).context("error binding texture")?; - render_elements(renderer, size, scale, transform, elements) + let mut target = renderer + .bind(&mut dmabuf) + .context("error binding texture")?; + render_elements(renderer, &mut target, size, scale, transform, elements) } pub fn render_to_shm( @@ -301,6 +311,7 @@ pub fn render_to_shm( fn render_elements( renderer: &mut GlesRenderer, + target: &mut GlesTarget, size: Size, scale: Scale, transform: Transform, @@ -310,7 +321,7 @@ fn render_elements( let output_rect = Rectangle::from_size(transform.transform_size(size)); let mut frame = renderer - .render(size, transform) + .render(target, size, transform) .context("error starting frame")?; frame diff --git a/src/render_helpers/offscreen.rs b/src/render_helpers/offscreen.rs index 96b0692f..9005e80c 100644 --- a/src/render_helpers/offscreen.rs +++ b/src/render_helpers/offscreen.rs @@ -171,7 +171,7 @@ impl Element for OffscreenRenderElement { impl RenderElement for OffscreenRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -212,7 +212,7 @@ impl RenderElement for OffscreenRenderElement { impl<'render> RenderElement> for OffscreenRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/primary_gpu_texture.rs b/src/render_helpers/primary_gpu_texture.rs index 702b70b4..1d318582 100644 --- a/src/render_helpers/primary_gpu_texture.rs +++ b/src/render_helpers/primary_gpu_texture.rs @@ -56,7 +56,7 @@ impl Element for PrimaryGpuTextureRenderElement { impl RenderElement for PrimaryGpuTextureRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -77,7 +77,7 @@ impl RenderElement for PrimaryGpuTextureRenderElement { impl<'render> RenderElement> for PrimaryGpuTextureRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/render_elements.rs b/src/render_helpers/render_elements.rs index 6dcba09d..0ff74352 100644 --- a/src/render_helpers/render_elements.rs +++ b/src/render_helpers/render_elements.rs @@ -99,7 +99,7 @@ macro_rules! niri_render_elements { { fn draw( &self, - frame: &mut smithay::backend::renderer::gles::GlesFrame<'_>, + frame: &mut smithay::backend::renderer::gles::GlesFrame<'_, '_>, src: smithay::utils::Rectangle, dst: smithay::utils::Rectangle, damage: &[smithay::utils::Rectangle], @@ -124,7 +124,7 @@ macro_rules! niri_render_elements { { fn draw( &self, - frame: &mut $crate::backend::tty::TtyFrame<'render, '_>, + frame: &mut $crate::backend::tty::TtyFrame<'render, '_, '_>, src: smithay::utils::Rectangle, dst: smithay::utils::Rectangle, damage: &[smithay::utils::Rectangle], diff --git a/src/render_helpers/renderer.rs b/src/render_helpers/renderer.rs index 605c0caa..9c42ea3d 100644 --- a/src/render_helpers/renderer.rs +++ b/src/render_helpers/renderer.rs @@ -1,7 +1,7 @@ use smithay::backend::allocator::dmabuf::Dmabuf; use smithay::backend::renderer::gles::{GlesFrame, GlesRenderer, GlesTexture}; use smithay::backend::renderer::{ - Bind, ExportMem, ImportAll, ImportMem, Offscreen, Renderer, Texture, + Bind, ExportMem, ImportAll, ImportMem, Offscreen, Renderer, RendererSuper, Texture, }; use crate::backend::tty::{TtyFrame, TtyRenderer}; @@ -21,7 +21,7 @@ pub trait NiriRenderer: type NiriError: std::error::Error + Send + Sync - + From<::Error> + + From<::Error> + 'static; } @@ -29,7 +29,8 @@ impl NiriRenderer for R where R: ImportAll + ImportMem + ExportMem + Bind + Offscreen + AsGlesRenderer, R::TextureId: Texture + Clone + Send + 'static, - R::Error: std::error::Error + Send + Sync + From<::Error> + 'static, + R::Error: + std::error::Error + Send + Sync + From<::Error> + 'static, { type NiriTextureId = R::TextureId; type NiriError = R::Error; @@ -53,21 +54,21 @@ impl AsGlesRenderer for TtyRenderer<'_> { } /// Trait for getting the underlying `GlesFrame`. -pub trait AsGlesFrame<'frame> +pub trait AsGlesFrame<'frame, 'buffer> where Self: 'frame, { - fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame>; + fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame, 'buffer>; } -impl<'frame> AsGlesFrame<'frame> for GlesFrame<'frame> { - fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame> { +impl<'frame, 'buffer> AsGlesFrame<'frame, 'buffer> for GlesFrame<'frame, 'buffer> { + fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame, 'buffer> { self } } -impl<'frame> AsGlesFrame<'frame> for TtyFrame<'_, 'frame> { - fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame> { +impl<'frame, 'buffer> AsGlesFrame<'frame, 'buffer> for TtyFrame<'_, 'frame, 'buffer> { + fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame, 'buffer> { self.as_mut() } } diff --git a/src/render_helpers/resize.rs b/src/render_helpers/resize.rs index f8cbadda..827eada2 100644 --- a/src/render_helpers/resize.rs +++ b/src/render_helpers/resize.rs @@ -163,7 +163,7 @@ impl Element for ResizeRenderElement { impl RenderElement for ResizeRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -181,7 +181,7 @@ impl RenderElement for ResizeRenderElement { impl<'render> RenderElement> for ResizeRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/shader_element.rs b/src/render_helpers/shader_element.rs index 09cd721e..5f7beed0 100644 --- a/src/render_helpers/shader_element.rs +++ b/src/render_helpers/shader_element.rs @@ -283,7 +283,7 @@ impl Element for ShaderRenderElement { impl RenderElement for ShaderRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dest: Rectangle, damage: &[Rectangle], @@ -514,7 +514,7 @@ impl RenderElement for ShaderRenderElement { impl<'render> RenderElement> for ShaderRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/shaders/mod.rs b/src/render_helpers/shaders/mod.rs index ddc58cdb..f1d11739 100644 --- a/src/render_helpers/shaders/mod.rs +++ b/src/render_helpers/shaders/mod.rs @@ -107,7 +107,7 @@ impl Shaders { } } - pub fn get_from_frame<'a>(frame: &'a mut GlesFrame<'_>) -> &'a Self { + pub fn get_from_frame<'a>(frame: &'a mut GlesFrame<'_, '_>) -> &'a Self { let data = frame.egl_context().user_data(); data.get() .expect("shaders::init() must be called when creating the renderer") diff --git a/src/render_helpers/shadow.rs b/src/render_helpers/shadow.rs index 332703a0..0a8c731d 100644 --- a/src/render_helpers/shadow.rs +++ b/src/render_helpers/shadow.rs @@ -233,7 +233,7 @@ impl Element for ShadowRenderElement { impl RenderElement for ShadowRenderElement { fn draw( &self, - frame: &mut GlesFrame<'_>, + frame: &mut GlesFrame<'_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], @@ -250,7 +250,7 @@ impl RenderElement for ShadowRenderElement { impl<'render> RenderElement> for ShadowRenderElement { fn draw( &self, - frame: &mut TtyFrame<'_, '_>, + frame: &mut TtyFrame<'_, '_, '_>, src: Rectangle, dst: Rectangle, damage: &[Rectangle], diff --git a/src/render_helpers/solid_color.rs b/src/render_helpers/solid_color.rs index 5dfb5843..8cf9cca8 100644 --- a/src/render_helpers/solid_color.rs +++ b/src/render_helpers/solid_color.rs @@ -153,12 +153,12 @@ impl Element for SolidColorRenderElement { impl RenderElement for SolidColorRenderElement { fn draw( &self, - frame: &mut ::Frame<'_>, + frame: &mut R::Frame<'_, '_>, _src: Rectangle, dst: Rectangle, damage: &[Rectangle], _opaque_regions: &[Rectangle], - ) -> Result<(), ::Error> { + ) -> Result<(), R::Error> { frame.draw_solid(dst, damage, self.color) } diff --git a/src/render_helpers/texture.rs b/src/render_helpers/texture.rs index 8273c6f6..a5d38a6f 100644 --- a/src/render_helpers/texture.rs +++ b/src/render_helpers/texture.rs @@ -58,7 +58,7 @@ impl TextureBuffer { scale: impl Into>, transform: Transform, opaque_regions: Vec>, - ) -> Result::Error> { + ) -> Result { let texture = renderer.import_memory(data, format, size.into(), flipped)?; Ok(TextureBuffer::from_texture( renderer, @@ -72,7 +72,7 @@ impl TextureBuffer { pub fn from_memory_buffer + ImportMem>( renderer: &mut R, buffer: &MemoryBuffer, - ) -> Result::Error> { + ) -> Result { Self::from_memory( renderer, buffer.data(), @@ -213,12 +213,12 @@ where { fn draw( &self, - frame: &mut ::Frame<'_>, + frame: &mut R::Frame<'_, '_>, src: Rectangle, dest: Rectangle, damage: &[Rectangle], opaque_regions: &[Rectangle], - ) -> Result<(), ::Error> { + ) -> Result<(), R::Error> { if frame.id() != self.buffer.renderer_id { warn!("trying to render texture from different renderer"); return Ok(()); -- cgit