From 421be6854b35d63ad0c5e6f8174e8a656c16d8ce Mon Sep 17 00:00:00 2001 From: Julian Orth Date: Tue, 6 Feb 2024 14:57:06 +0100 Subject: [PATCH] fix: store single-pixel colors outside of buffer storage --- src/ifs/wl_buffer.rs | 15 +++++---------- src/renderer.rs | 4 ++-- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/ifs/wl_buffer.rs b/src/ifs/wl_buffer.rs index 6d4b117b..e38dffb5 100644 --- a/src/ifs/wl_buffer.rs +++ b/src/ifs/wl_buffer.rs @@ -27,7 +27,6 @@ use { pub enum WlBufferStorage { Shm { mem: ClientMemOffset, stride: i32 }, Dmabuf(Rc), - Color(Color), } pub struct WlBuffer { @@ -39,6 +38,7 @@ pub struct WlBuffer { dmabuf: Option, render_ctx_version: Cell, pub storage: RefCell>, + pub color: Option, pub texture: CloneCell>>, pub famebuffer: CloneCell>>, width: i32, @@ -75,6 +75,7 @@ impl WlBuffer { render_ctx_version: Cell::new(client.state.render_ctx_version.get()), storage: RefCell::new(Some(WlBufferStorage::Dmabuf(img.clone()))), tracker: Default::default(), + color: None, } } @@ -113,6 +114,7 @@ impl WlBuffer { texture: CloneCell::new(None), tracker: Default::default(), famebuffer: Default::default(), + color: None, }) } @@ -132,14 +134,13 @@ impl WlBuffer { format: ARGB8888, dmabuf: None, render_ctx_version: Cell::new(client.state.render_ctx_version.get()), - storage: RefCell::new(Some(WlBufferStorage::Color( - Color::from_u32_rgba_premultiplied(r, g, b, a), - ))), + storage: RefCell::new(None), width: 1, height: 1, texture: CloneCell::new(None), tracker: Default::default(), famebuffer: Default::default(), + color: Some(Color::from_u32_rgba_premultiplied(r, g, b, a)), } } @@ -197,9 +198,6 @@ impl WlBuffer { self.texture.set(Some(img.clone().to_texture()?)); } } - WlBufferStorage::Color(_) => { - // nothing - } } Ok(()) } @@ -219,9 +217,6 @@ impl WlBuffer { self.famebuffer.set(Some(img.clone().to_framebuffer()?)); } } - WlBufferStorage::Color(_) => { - // nothing - } } Ok(()) } diff --git a/src/renderer.rs b/src/renderer.rs index 3b20dcb6..9fea49e3 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -3,7 +3,7 @@ use { format::ARGB8888, gfx_api::{BufferPoints, GfxApiOpt}, ifs::{ - wl_buffer::{WlBuffer, WlBufferStorage}, + wl_buffer::WlBuffer, wl_callback::WlCallback, wl_surface::{ xdg_surface::XdgSurface, zwlr_layer_surface_v1::ZwlrLayerSurfaceV1, WlSurface, @@ -400,7 +400,7 @@ impl Renderer<'_> { max_width, max_height, ); - } else if let Some(WlBufferStorage::Color(color)) = &*buffer.storage.borrow() { + } else if let Some(color) = &buffer.color { if let Some(rect) = Rect::new_sized(x, y, tsize.0.min(max_width), tsize.1.min(max_height)) {