2019-09-12 10:39:06 +02:00
|
|
|
# libliftoff
|
2019-08-21 22:12:11 +02:00
|
|
|
|
2019-10-11 12:07:10 +02:00
|
|
|
[![builds.sr.ht status](https://builds.sr.ht/~emersion/libliftoff.svg)](https://builds.sr.ht/~emersion/libliftoff)
|
|
|
|
|
2019-08-21 22:12:11 +02:00
|
|
|
Lightweight hardware composer library for libdrm.
|
|
|
|
|
2019-09-12 10:39:06 +02:00
|
|
|
libliftoff eases the use of KMS planes from userspace without standing in your
|
|
|
|
way. Users create "virtual planes" called layers, set KMS properties on them,
|
|
|
|
and libliftoff will allocate planes for these layers if possible.
|
2019-08-21 22:12:11 +02:00
|
|
|
|
2020-03-25 16:23:59 +01:00
|
|
|
Resources:
|
|
|
|
|
|
|
|
* [Blog post introducing the project][intro-post]
|
|
|
|
* [FOSDEM 2020 talk][fosdem-2020]
|
2019-10-16 09:44:29 +02:00
|
|
|
|
2019-08-21 22:12:11 +02:00
|
|
|
## Building
|
|
|
|
|
|
|
|
Depends on libdrm. Requires universal planes and atomic.
|
|
|
|
|
|
|
|
meson build/
|
|
|
|
ninja -C build/
|
|
|
|
|
2019-09-16 10:38:54 +02:00
|
|
|
## Usage
|
|
|
|
|
|
|
|
See [`liftoff.h`][liftoff.h]. Here's the general idea:
|
|
|
|
|
|
|
|
```c
|
2019-11-24 13:07:12 +01:00
|
|
|
struct liftoff_device *device;
|
2019-09-16 10:38:54 +02:00
|
|
|
struct liftoff_output *output;
|
|
|
|
struct liftoff_layer *layer;
|
|
|
|
drmModeAtomicReq *req;
|
2019-09-26 09:43:05 +02:00
|
|
|
int ret;
|
2019-09-16 10:38:54 +02:00
|
|
|
|
2019-11-24 13:07:12 +01:00
|
|
|
device = liftoff_device_create(drm_fd);
|
|
|
|
output = liftoff_output_create(device, crtc_id);
|
2019-09-16 10:38:54 +02:00
|
|
|
|
|
|
|
layer = liftoff_layer_create(output);
|
|
|
|
liftoff_layer_set_property(layer, "FB_ID", fb_id);
|
|
|
|
/* Probably setup more properties and more layers */
|
|
|
|
|
|
|
|
req = drmModeAtomicAlloc();
|
2019-10-19 13:02:54 +02:00
|
|
|
if (!liftoff_output_apply(output, req)) {
|
|
|
|
perror("liftoff_output_apply");
|
2019-09-16 10:38:54 +02:00
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = drmModeAtomicCommit(drm_fd, req, DRM_MODE_ATOMIC_NONBLOCK, NULL);
|
|
|
|
if (ret < 0) {
|
|
|
|
perror("drmModeAtomicCommit");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
drmModeAtomicFree(req);
|
|
|
|
```
|
|
|
|
|
2020-03-10 12:10:51 +01:00
|
|
|
## Contributing
|
|
|
|
|
|
|
|
Report bugs and send pull requests on [GitHub][github].
|
|
|
|
|
|
|
|
We use the Wayland/Weston style and contribution guidelines, see [Weston's
|
|
|
|
contributing document][weston-contributing].
|
|
|
|
|
2019-08-21 22:12:11 +02:00
|
|
|
## License
|
|
|
|
|
|
|
|
MIT
|
2019-09-16 10:38:54 +02:00
|
|
|
|
|
|
|
[liftoff.h]: https://github.com/emersion/libliftoff/blob/master/include/libliftoff.h
|
2019-10-16 09:44:29 +02:00
|
|
|
[intro-post]: https://emersion.fr/blog/2019/xdc2019-wrap-up/#libliftoff
|
2020-03-25 16:23:59 +01:00
|
|
|
[fosdem-2020]: https://fosdem.org/2020/schedule/event/kms_planes/
|
2020-03-10 12:10:51 +01:00
|
|
|
[github]: https://github.com/emersion/libliftoff
|
|
|
|
[weston-contributing]: https://gitlab.freedesktop.org/wayland/weston/-/blob/master/CONTRIBUTING.md
|