diff options
Diffstat (limited to 'src/render_helpers.rs')
| -rw-r--r-- | src/render_helpers.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/render_helpers.rs b/src/render_helpers.rs index 922ff59c..6cdc9fc2 100644 --- a/src/render_helpers.rs +++ b/src/render_helpers.rs @@ -6,6 +6,8 @@ use smithay::backend::renderer::utils::CommitCounter; use smithay::backend::renderer::{Bind, ExportMem, ImportAll, Offscreen, Renderer, Texture}; use smithay::utils::{Buffer, Physical, Rectangle, Scale, Transform}; +use crate::backend::tty::{TtyFrame, TtyRenderer, TtyRendererError}; + /// Trait with our main renderer requirements to save on the typing. pub trait NiriRenderer: ImportAll @@ -45,6 +47,12 @@ impl AsGlesRenderer for GlesRenderer { } } +impl<'render, 'alloc> AsGlesRenderer for TtyRenderer<'render, 'alloc> { + fn as_gles_renderer(&mut self) -> &mut GlesRenderer { + self.as_mut() + } +} + /// Trait for getting the underlying `GlesFrame`. pub trait AsGlesFrame<'frame> where @@ -59,6 +67,12 @@ impl<'frame> AsGlesFrame<'frame> for GlesFrame<'frame> { } } +impl<'render, 'alloc, 'frame> AsGlesFrame<'frame> for TtyFrame<'render, 'alloc, 'frame> { + fn as_gles_frame(&mut self) -> &mut GlesFrame<'frame> { + self.as_mut() + } +} + /// Wrapper for a texture from the primary GPU for rendering with the primary GPU. #[derive(Debug)] pub struct PrimaryGpuTextureRenderElement(pub TextureRenderElement<GlesTexture>); @@ -124,3 +138,28 @@ impl RenderElement<GlesRenderer> for PrimaryGpuTextureRenderElement { None } } + +impl<'render, 'alloc> RenderElement<TtyRenderer<'render, 'alloc>> + for PrimaryGpuTextureRenderElement +{ + fn draw( + &self, + frame: &mut TtyFrame<'_, '_, '_>, + src: Rectangle<f64, Buffer>, + dst: Rectangle<i32, Physical>, + damage: &[Rectangle<i32, Physical>], + ) -> Result<(), TtyRendererError<'render, 'alloc>> { + let gles_frame = frame.as_gles_frame(); + RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage)?; + Ok(()) + } + + fn underlying_storage( + &self, + _renderer: &mut TtyRenderer<'render, 'alloc>, + ) -> Option<UnderlyingStorage> { + // If scanout for things other than Wayland buffers is implemented, this will need to take + // the target GPU into account. + None + } +} |
