libliftoff/include/private.h
Simon Ser e85a1a5ecf
Add layer_intersects
This will be useful for implementing optimizations in case planes don't collide.
In these cases we can ignore some zpos constraints.

References: https://github.com/emersion/libliftoff/issues/3
2019-09-15 17:00:48 +03:00

70 lines
1.4 KiB
C

#ifndef PRIVATE_H
#define PRIVATE_H
#include "libliftoff.h"
#include "list.h"
struct liftoff_display {
int drm_fd;
struct liftoff_list planes; /* liftoff_plane.link */
struct liftoff_list outputs; /* liftoff_output.link */
uint32_t *crtcs;
size_t crtcs_len;
};
struct liftoff_output {
struct liftoff_display *display;
uint32_t crtc_id;
size_t crtc_index;
struct liftoff_list link; /* liftoff_display.outputs */
struct liftoff_list layers; /* liftoff_layer.link */
};
struct liftoff_layer {
struct liftoff_output *output;
struct liftoff_list link; /* liftoff_output.layers */
struct liftoff_layer_property *props;
size_t props_len;
struct liftoff_plane *plane;
};
struct liftoff_layer_property {
char name[DRM_PROP_NAME_LEN];
uint64_t value;
};
struct liftoff_plane {
uint32_t id;
uint32_t possible_crtcs;
uint32_t type;
int zpos; /* greater values mean closer to the eye */
/* TODO: formats */
struct liftoff_list link; /* liftoff_display.planes */
struct liftoff_plane_property *props;
size_t props_len;
struct liftoff_layer *layer;
};
struct liftoff_plane_property {
char name[DRM_PROP_NAME_LEN];
uint32_t id;
};
struct liftoff_rect {
int x, y;
int width, height;
};
struct liftoff_layer_property *layer_get_property(struct liftoff_layer *layer,
const char *name);
void layer_get_rect(struct liftoff_layer *layer, struct liftoff_rect *rect);
bool layer_intersects(struct liftoff_layer *a, struct liftoff_layer *b);
#endif