1
0
Fork 0
forked from wry/wry

autocommit 2022-04-28 19:49:51 CEST

This commit is contained in:
Julian Orth 2022-04-28 19:49:51 +02:00
parent bd63f3f5f1
commit 1242a6c1e1
31 changed files with 707 additions and 64 deletions

View file

@ -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)?;