autocommit 2022-04-28 19:49:51 CEST
This commit is contained in:
parent
bd63f3f5f1
commit
1242a6c1e1
31 changed files with 707 additions and 64 deletions
|
|
@ -6,7 +6,7 @@ use {
|
|||
leaks::Tracker,
|
||||
object::Object,
|
||||
rect::Rect,
|
||||
render::{Image, RenderError, Texture},
|
||||
render::{Framebuffer, Image, RenderError, Texture},
|
||||
utils::{
|
||||
buffd::{MsgParser, MsgParserError},
|
||||
clonecell::CloneCell,
|
||||
|
|
@ -28,8 +28,9 @@ pub struct WlBuffer {
|
|||
pub client: Rc<Client>,
|
||||
pub rect: Rect,
|
||||
pub format: &'static Format,
|
||||
storage: WlBufferStorage,
|
||||
pub storage: WlBufferStorage,
|
||||
pub texture: CloneCell<Option<Rc<Texture>>>,
|
||||
pub famebuffer: CloneCell<Option<Rc<Framebuffer>>>,
|
||||
width: i32,
|
||||
height: i32,
|
||||
pub tracker: Tracker<Self>,
|
||||
|
|
@ -58,6 +59,7 @@ impl WlBuffer {
|
|||
width,
|
||||
height,
|
||||
texture: CloneCell::new(None),
|
||||
famebuffer: Default::default(),
|
||||
storage: WlBufferStorage::Dmabuf(img.clone()),
|
||||
tracker: Default::default(),
|
||||
}
|
||||
|
|
@ -95,6 +97,7 @@ impl WlBuffer {
|
|||
height,
|
||||
texture: CloneCell::new(None),
|
||||
tracker: Default::default(),
|
||||
famebuffer: Default::default(),
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -118,6 +121,20 @@ impl WlBuffer {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn update_framebuffer(&self) -> Result<(), WlBufferError> {
|
||||
match &self.storage {
|
||||
WlBufferStorage::Shm { .. } => {
|
||||
// nothing
|
||||
}
|
||||
WlBufferStorage::Dmabuf(img) => {
|
||||
if self.famebuffer.get().is_none() {
|
||||
self.famebuffer.set(Some(img.to_framebuffer()?));
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn destroy(&self, parser: MsgParser<'_, '_>) -> Result<(), WlBufferError> {
|
||||
let _req: Destroy = self.client.parse(self, parser)?;
|
||||
self.client.remove_obj(self)?;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue