Crate gbm

Source
Expand description

§Safe libgbm bindings for rust

The Generic Buffer Manager

This module provides an abstraction that the caller can use to request a buffer from the underlying memory management system for the platform.

This allows the creation of portable code whilst still allowing access to the underlying memory manager.

This library is best used in combination with drm-rs, provided through the drm-support feature.

§Example

use drm::control::{self, crtc, framebuffer};
use gbm::{BufferObjectFlags, Device, Format};

// ... init your drm device ...
let drm = init_drm_device();

// init a GBM device
let gbm = Device::new(drm).unwrap();

// create a 4x4 buffer
let mut bo = gbm
    .create_buffer_object::<()>(
        1280,
        720,
        Format::Argb8888,
        BufferObjectFlags::SCANOUT | BufferObjectFlags::WRITE,
    )
    .unwrap();
// write something to it (usually use import or egl rendering instead)
let buffer = {
    let mut buffer = Vec::new();
    for i in 0..1280 {
        for _ in 0..720 {
            buffer.push(if i % 2 == 0 { 0 } else { 255 });
        }
    }
    buffer
};
bo.write(&buffer).unwrap();

// create a framebuffer from our buffer
let fb = gbm.add_framebuffer(&bo, 32, 32).unwrap();

// display it (and get a crtc, mode and connector before)
gbm.set_crtc(crtc_handle, Some(fb), (0, 0), &[con], Some(mode))
    .unwrap();

Structs§

BufferObject
A GBM buffer object
BufferObjectFlags
Flags to indicate the intended use for the buffer - these are passed into [Device::create_buffer_object()].
Device
An open GBM device
FrontBufferError
Errors that may happen when locking the front buffer
InvalidFdError
Thrown when the fd is invalid
MappedBufferObject
A mapped buffer object
Surface
A GBM rendering surface

Enums§

Format
Modifier

Traits§

AsRaw
Trait for types that allow to obtain the underlying raw libinput pointer.

Type Aliases§

BufferObjectHandle
Abstraction representing the handle to a buffer allocated by the manager