Struct smithay_client_toolkit::shm::MemPool
source · [−]pub struct MemPool { /* private fields */ }
Expand description
A wrapper handling an SHM memory pool backed by a shared memory file
This wrapper handles for you the creation of the shared memory file and its synchronization with the protocol.
Mempool internally tracks the release of the buffers by the compositor. As such, creating a buffer that is not commited to a surface (and then never released by the server) would cause the Mempool to be stuck believing it is still in use.
Mempool will also handle the destruction of buffers and as such the destroy()
method should not
be used on buffers created from Mempool.
Overwriting the contents of the memory pool before it is completely freed may cause graphical glitches due to the possible corruption of data while the compositor is reading it.
Mempool requires a callback that will be called when the pool becomes free, this happens when all the pools buffers are released by the server.
Implementations
sourceimpl MemPool
impl MemPool
sourcepub fn new<F>(shm: Attached<WlShm>, callback: F) -> Result<MemPool> where
F: FnMut(DispatchData<'_>) + 'static,
pub fn new<F>(shm: Attached<WlShm>, callback: F) -> Result<MemPool> where
F: FnMut(DispatchData<'_>) + 'static,
Create a new memory pool associated with given shm
sourcepub fn resize(&mut self, newsize: usize) -> Result<()>
pub fn resize(&mut self, newsize: usize) -> Result<()>
Resize the memory pool
This affect the size as it is seen by the wayland server. Even if you extend the temporary file size by writing to it, you need to call this method otherwise the server won’t see the new size.
Memory pools can only be extented, as such this method will do nothing if the requested new size is smaller than the current size.
This method allows you to ensure the underlying pool is large enough to hold what you want to write to it.
sourcepub fn buffer(
&self,
offset: i32,
width: i32,
height: i32,
stride: i32,
format: Format
) -> WlBuffer
pub fn buffer(
&self,
offset: i32,
width: i32,
height: i32,
stride: i32,
format: Format
) -> WlBuffer
Create a new buffer to this pool
The parameters are:
offset
: the offset (in bytes) from the beginning of the pool at which this buffer startswidth
: the width of this buffer (in pixels)height
: the height of this buffer (in pixels)stride
: distance (in bytes) between the beginning of a row and the next oneformat
: the encoding format of the pixels. Using a format that was not advertised to thewl_shm
global by the server is a protocol error and will terminate your connection
Trait Implementations
sourceimpl Seek for MemPool
impl Seek for MemPool
sourcefn seek(&mut self, pos: SeekFrom) -> Result<u64>
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
Seek to an offset, in bytes, in a stream. Read more
1.55.0 · sourcefn rewind(&mut self) -> Result<(), Error>
fn rewind(&mut self) -> Result<(), Error>
Rewind to the beginning of a stream. Read more
sourceimpl Write for MemPool
impl Write for MemPool
sourcefn write(&mut self, buf: &[u8]) -> Result<usize>
fn write(&mut self, buf: &[u8]) -> Result<usize>
Write a buffer into this writer, returning how many bytes were written. Read more
sourcefn flush(&mut self) -> Result<()>
fn flush(&mut self) -> Result<()>
Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more
sourcefn is_write_vectored(&self) -> bool
fn is_write_vectored(&self) -> bool
can_vector
)Determines if this Write
r has an efficient write_vectored
implementation. Read more
1.0.0 · sourcefn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
Attempts to write an entire buffer into this writer. Read more
sourcefn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
write_all_vectored
)Attempts to write multiple buffers into this writer. Read more
Auto Trait Implementations
impl !RefUnwindSafe for MemPool
impl !Send for MemPool
impl !Sync for MemPool
impl Unpin for MemPool
impl !UnwindSafe for MemPool
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more