aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/rootston/output.h6
-rw-r--r--include/wlr/types/wlr_output.h23
2 files changed, 18 insertions, 11 deletions
diff --git a/include/rootston/output.h b/include/rootston/output.h
index c0022d1a..89fe1d82 100644
--- a/include/rootston/output.h
+++ b/include/rootston/output.h
@@ -5,6 +5,11 @@
#include <pixman.h>
#include <wayland-server.h>
+/**
+ * Damage tracking requires to keep track of previous frames' damage. To allow
+ * damage tracking to work with triple buffering, an history of two frames is
+ * required.
+ */
#define ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN 2
struct roots_desktop;
@@ -20,6 +25,7 @@ struct roots_output {
pixman_region32_t damage;
bool frame_pending;
+ // circular queue for previous damage
pixman_region32_t previous_damage[ROOTS_OUTPUT_PREVIOUS_DAMAGE_LEN];
size_t previous_damage_idx;
diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h
index 3267a608..91429123 100644
--- a/include/wlr/types/wlr_output.h
+++ b/include/wlr/types/wlr_output.h
@@ -33,8 +33,6 @@ struct wlr_output_cursor {
struct wl_listener surface_destroy;
};
-#define WLR_OUTPUT_PREVIOUS_DAMAGE_COUNT 2
-
struct wlr_output_impl;
struct wlr_output {
@@ -51,21 +49,21 @@ struct wlr_output {
char serial[16];
int32_t phys_width, phys_height; // mm
+ // Note: some backends may have zero modes
+ struct wl_list modes;
+ struct wlr_output_mode *current_mode;
+ int32_t width, height;
+ int32_t refresh; // mHz, may be zero
+
bool enabled;
float scale;
enum wl_output_subpixel subpixel;
enum wl_output_transform transform;
bool needs_swap;
- pixman_region32_t damage;
+ pixman_region32_t damage; // damage for cursors and fullscreen surface
float transform_matrix[16];
- // Note: some backends may have zero modes
- struct wl_list modes;
- struct wlr_output_mode *current_mode;
- int32_t width, height;
- int32_t refresh; // mHz
-
struct {
struct wl_signal frame;
struct wl_signal needs_swap;
@@ -107,16 +105,18 @@ void wlr_output_destroy(struct wlr_output *output);
void wlr_output_effective_resolution(struct wlr_output *output,
int *width, int *height);
/**
- * Makes the output GL context current.
+ * Makes the output rendering context current.
*
* `buffer_age` is set to the drawing buffer age in number of frames or -1 if
- * unknown.
+ * unknown. This is useful for damage tracking.
*/
bool wlr_output_make_current(struct wlr_output *output, int *buffer_age);
/**
* Swaps the output buffers. If the time of the frame isn't known, set `when` to
* NULL. If the compositor doesn't support damage tracking, set `damage` to
* NULL.
+ *
+ * Swapping buffers schedules a `frame` event.
*/
bool wlr_output_swap_buffers(struct wlr_output *output, struct timespec *when,
pixman_region32_t *damage);
@@ -126,6 +126,7 @@ uint32_t wlr_output_get_gamma_size(struct wlr_output *output);
void wlr_output_set_fullscreen_surface(struct wlr_output *output,
struct wlr_surface *surface);
+
struct wlr_output_cursor *wlr_output_cursor_create(struct wlr_output *output);
/**
* Sets the cursor image. The image must be already scaled for the output.