README.md
1## Safe `libgbm` bindings for [rust](https://www.rust-lang.org)
2
3The Generic Buffer Manager
4
5This module provides an abstraction that the caller can use to request a
6buffer from the underlying memory management system for the platform.
7
8This allows the creation of portable code whilst still allowing access to
9the underlying memory manager.
10
11This library is best used in combination with [`drm-rs`](https://github.com/Smithay/drm-rs),
12provided through the `drm-support` feature.
13
14## Usage
15
16Add to your Cargo.toml
17
18```toml
19gbm = "0.15.0"
20```
21
22## Example
23
24```rust
25extern crate drm;
26extern crate gbm;
27
28use drm::control::{self, crtc, framebuffer};
29use gbm::{BufferObjectFlags, Device, Format};
30
31// ... init your drm device ...
32let drm = init_drm_device();
33
34// init a GBM device
35let gbm = Device::new(drm).unwrap();
36
37// create a buffer
38let mut bo = gbm
39 .create_buffer_object::<()>(
40 1280,
41 720,
42 Format::Argb8888,
43 BufferObjectFlags::SCANOUT | BufferObjectFlags::WRITE,
44 )
45 .unwrap();
46
47// write something to it (usually use import or egl rendering instead)
48let buffer = {
49 let mut buffer = Vec::new();
50 for i in 0..1280 {
51 for _ in 0..720 {
52 buffer.push(if i % 2 == 0 { 0 } else { 255 });
53 }
54 }
55 buffer
56};
57bo.write(&buffer).unwrap();
58
59// create a framebuffer from our buffer
60let fb = gbm.add_framebuffer(&bo, 32, 32).unwrap();
61
62// display it (and get a crtc, mode and connector before)
63gbm.set_crtc(crtc_handle, Some(fb), (0, 0), &[con], Some(mode))
64 .unwrap();
65```
66