Struct smithay_client_toolkit::shm::MemPool[][src]

pub struct MemPool { /* fields omitted */ }

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

impl MemPool[src]

pub fn new<F>(shm: Attached<WlShm>, callback: F) -> Result<MemPool> where
    F: FnMut(DispatchData<'_>) + 'static, 
[src]

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]

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 starts
  • width: 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 one
  • format: the encoding format of the pixels. Using a format that was not advertised to the wl_shm global by the server is a protocol error and will terminate your connection

pub fn mmap(&mut self) -> &mut MmapMut[src]

Uses the memmap2 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

Trait Implementations

impl Seek for MemPool[src]

fn seek(&mut self, pos: SeekFrom) -> Result<u64>[src]

Seek to an offset, in bytes, in a stream. Read more

fn stream_len(&mut self) -> Result<u64, Error>[src]

🔬 This is a nightly-only experimental API. (seek_stream_len)

Returns the length of this stream (in bytes). Read more

fn stream_position(&mut self) -> Result<u64, Error>1.51.0[src]

Returns the current seek position from the start of the stream. Read more

impl Write for MemPool[src]

fn write(&mut self, buf: &[u8]) -> Result<usize>[src]

Write a buffer into this writer, returning how many bytes were written. Read more

fn flush(&mut self) -> Result<()>[src]

Flush this output stream, ensuring that all intermediately buffered contents reach their destination. Read more

fn write_vectored(&mut self, bufs: &[IoSlice<'_>]) -> Result<usize, Error>1.36.0[src]

Like write, except that it writes from a slice of buffers. Read more

fn is_write_vectored(&self) -> bool[src]

🔬 This is a nightly-only experimental API. (can_vector)

Determines if this Writer has an efficient write_vectored implementation. Read more

fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>1.0.0[src]

Attempts to write an entire buffer into this writer. Read more

fn write_all_vectored(&mut self, bufs: &mut [IoSlice<'_>]) -> Result<(), Error>[src]

🔬 This is a nightly-only experimental API. (write_all_vectored)

Attempts to write multiple buffers into this writer. Read more

fn write_fmt(&mut self, fmt: Arguments<'_>) -> Result<(), Error>1.0.0[src]

Writes a formatted string into this writer, returning any error encountered. Read more

fn by_ref(&mut self) -> &mut Self1.0.0[src]

Creates a “by reference” adaptor for this instance of Write. 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

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.