[−][src]Struct smithay_client_toolkit::utils::MemPool
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 lifetime of all buffers created from it and to ensure that this buffer count is correct all buffers must be attached to a surface. Once a buffer is attached to a surface it must be immediately committed to that surface before another buffer is attached.
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 an implementation that will be called when the pool becomes free, this happens when all the pools buffers are released by the server.
Implementations
impl MemPool
[src]
pub fn new<Impl>(shm: &WlShm, implementation: Impl) -> Result<MemPool> where
Impl: FnMut() + Send + 'static,
[src]
Impl: FnMut() + Send + 'static,
Create a new memory pool associated with given shm
pub fn resize(&mut self, newsize: usize) -> Result<()>
[src]
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.
pub fn buffer(
&self,
offset: i32,
width: i32,
height: i32,
stride: i32,
format: Format
) -> WlBuffer
[src]
&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
pub fn mmap(&mut self) -> &mut MmapMut
[src]
Uses the memmap crate to map the underlying shared memory file
pub fn is_used(&self) -> bool
[src]
Returns true if the pool contains buffers that are currently in use by the server otherwise it returns false
Trait Implementations
impl Drop for MemPool
[src]
impl Seek for MemPool
[src]
fn seek(&mut self, pos: SeekFrom) -> Result<u64>
[src]
fn stream_len(&mut self) -> Result<u64, Error>
[src]
fn stream_position(&mut self) -> Result<u64, Error>
[src]
impl Write for MemPool
[src]
fn write(&mut self, buf: &[u8]) -> Result<usize>
[src]
fn flush(&mut self) -> Result<()>
[src]
fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>
1.36.0[src]
fn is_write_vectored(&self) -> bool
[src]
fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>
1.0.0[src]
fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>
[src]
fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>
1.0.0[src]
fn by_ref(&mut self) -> &mut Self
1.0.0[src]
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
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<W> WriteBytesExt for W where
W: Write + ?Sized,
[src]
W: Write + ?Sized,
fn write_u8(&mut self, n: u8) -> Result<(), Error>
[src]
fn write_i8(&mut self, n: i8) -> Result<(), Error>
[src]
fn write_u16<T>(&mut self, n: u16) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i16<T>(&mut self, n: i16) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_u24<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i24<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_u32<T>(&mut self, n: u32) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i32<T>(&mut self, n: i32) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_u48<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i48<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_u64<T>(&mut self, n: u64) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i64<T>(&mut self, n: i64) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_u128<T>(&mut self, n: u128) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_i128<T>(&mut self, n: i128) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_uint<T>(&mut self, n: u64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_int<T>(&mut self, n: i64, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_uint128<T>(&mut self, n: u128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_int128<T>(&mut self, n: i128, nbytes: usize) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_f32<T>(&mut self, n: f32) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,
fn write_f64<T>(&mut self, n: f64) -> Result<(), Error> where
T: ByteOrder,
[src]
T: ByteOrder,