Seperate node from BufferBacking

Should help for moving from `BufferBacking` to types provide by
iced-sctk.
This commit is contained in:
Ian Douglas Scott 2024-01-26 14:37:18 -08:00
parent a90a3a16b2
commit 6e9119a988

View file

@ -66,14 +66,8 @@ fn create_memfile() -> rustix::io::Result<OwnedFd> {
} }
enum BufferBacking { enum BufferBacking {
Shm { Shm { fd: OwnedFd },
fd: OwnedFd, Dmabuf { fd: OwnedFd, stride: u32 },
},
Dmabuf {
fd: OwnedFd,
node: PathBuf,
stride: u32,
},
} }
pub struct Buffer { pub struct Buffer {
@ -81,6 +75,7 @@ pub struct Buffer {
pub buffer: wl_buffer::WlBuffer, pub buffer: wl_buffer::WlBuffer,
pub buffer_info: BufferInfo, pub buffer_info: BufferInfo,
mmap: Mmap, mmap: Mmap,
node: Option<PathBuf>,
} }
impl AppData { impl AppData {
@ -113,6 +108,7 @@ impl AppData {
mmap, mmap,
buffer, buffer,
buffer_info: buffer_info.clone(), buffer_info: buffer_info.clone(),
node: None,
} }
} }
@ -188,14 +184,11 @@ impl AppData {
let mmap = unsafe { Mmap::map(&fd).unwrap() }; let mmap = unsafe { Mmap::map(&fd).unwrap() };
Ok(Some(Buffer { Ok(Some(Buffer {
backing: BufferBacking::Dmabuf { backing: BufferBacking::Dmabuf { fd, stride },
fd,
node: node.clone(),
stride,
},
mmap, mmap,
buffer, buffer,
buffer_info: buffer_info.clone(), buffer_info: buffer_info.clone(),
node: Some(node.clone()),
})) }))
} }
@ -236,11 +229,7 @@ impl Buffer {
let pixels = match &self.backing { let pixels = match &self.backing {
BufferBacking::Shm { .. } => self.mmap.to_vec(), BufferBacking::Shm { .. } => self.mmap.to_vec(),
// NOTE: Only will work with linear modifier // NOTE: Only will work with linear modifier
BufferBacking::Dmabuf { BufferBacking::Dmabuf { fd, stride } => {
fd,
node: _,
stride,
} => {
if self.buffer_info.stride == self.buffer_info.width * 4 { if self.buffer_info.stride == self.buffer_info.width * 4 {
self.mmap.to_vec() self.mmap.to_vec()
} else { } else {
@ -261,10 +250,7 @@ impl Buffer {
} }
pub fn node(&self) -> Option<&Path> { pub fn node(&self) -> Option<&Path> {
match &self.backing { self.node.as_deref()
BufferBacking::Shm { .. } => None,
BufferBacking::Dmabuf { node, .. } => Some(node),
}
} }
} }