Bug: 325953018

Clone this repo:
  1. bd7688f Migrate 25 crates to monorepo. am: b46ad949f4 by James Farrell · 5 months ago main
  2. b46ad94 Migrate 25 crates to monorepo. by James Farrell · 5 months ago
  3. acaa5d3 Merge "Remove [email protected] from OWNERS" into main am: bc08bb024e by Nikita Putikhin · 6 months ago
  4. bc08bb0 Merge "Remove [email protected] from OWNERS" into main by Nikita Putikhin · 6 months ago
  5. 62b7714 Merge "Update Android.bp by running cargo_embargo" into main am: 7bf2aeff6c by Treehugger Robot · 6 months ago

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.

Usage

Add to your Cargo.toml

gbm = "0.14.2"

Example

extern crate drm;
extern crate gbm;

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 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();