aboutsummaryrefslogtreecommitdiff
path: root/include/wlr
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-04-23 20:16:08 +0300
committerDrew DeVault <sir@cmpwn.com>2019-04-23 14:34:30 -0600
commit5e6766a165bd4bc71f1dc24c4348f7be0f020ddd (patch)
treed655444e6a26c639042dd5224f7b177ab8a46f34 /include/wlr
parent31dcecbfa99422d4f24c65bbfb54a517210e6ba6 (diff)
output-damage: refactor API
wlr_output_damage_make_current has been renamed to wlr_output_damage_attach_render, since it's just a wrapper for wlr_output_attach_render. wlr_output_damage_swap_buffers has been removed completely. Instead, wlr_output_damage now listens to successful wlr_output commits and updates its internal state accordingly.
Diffstat (limited to 'include/wlr')
-rw-r--r--include/wlr/types/wlr_output.h4
-rw-r--r--include/wlr/types/wlr_output_damage.h32
2 files changed, 19 insertions, 17 deletions
diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h
index e50f9ba3..b0965245 100644
--- a/include/wlr/types/wlr_output.h
+++ b/include/wlr/types/wlr_output.h
@@ -111,8 +111,10 @@ struct wlr_output {
// Emitted when buffers need to be swapped (because software cursors or
// fullscreen damage or because of backend-specific logic)
struct wl_signal needs_commit;
- // Emitted right before buffer commit
+ // Emitted right before commit
struct wl_signal precommit; // wlr_output_event_precommit
+ // Emitted right after commit
+ struct wl_signal commit;
// Emitted right after the buffer has been presented to the user
struct wl_signal present; // wlr_output_event_present
struct wl_signal enable;
diff --git a/include/wlr/types/wlr_output_damage.h b/include/wlr/types/wlr_output_damage.h
index 68f518d9..bc29ebdf 100644
--- a/include/wlr/types/wlr_output_damage.h
+++ b/include/wlr/types/wlr_output_damage.h
@@ -24,10 +24,13 @@
/**
* Tracks damage for an output.
*
- * When a `frame` event is emitted, `wlr_output_damage_make_current` should be
- * called. If necessary, the output should be repainted and
- * `wlr_output_damage_swap_buffers` should be called. No rendering should happen
- * outside a `frame` event handler.
+ * The `frame` event will be emitted when it is a good time for the compositor
+ * to submit a new frame.
+ *
+ * To render a new frame, compositors should call
+ * `wlr_output_damage_attach_render`, render and call `wlr_output_commit`. No
+ * rendering should happen outside a `frame` event handler or before
+ * `wlr_output_damage_attach_render`.
*/
struct wlr_output_damage {
struct wlr_output *output;
@@ -50,25 +53,22 @@ struct wlr_output_damage {
struct wl_listener output_scale;
struct wl_listener output_needs_commit;
struct wl_listener output_frame;
+ struct wl_listener output_commit;
};
struct wlr_output_damage *wlr_output_damage_create(struct wlr_output *output);
void wlr_output_damage_destroy(struct wlr_output_damage *output_damage);
/**
- * Makes the output rendering context current. `needs_swap` is set to true if
- * `wlr_output_damage_swap_buffers` needs to be called. The region of the output
- * that needs to be repainted is added to `damage`.
- */
-bool wlr_output_damage_make_current(struct wlr_output_damage *output_damage,
- bool *needs_swap, pixman_region32_t *damage);
-/**
- * Swaps the output buffers. If the time of the frame isn't known, set `when` to
- * NULL.
+ * Attach the renderer's buffer to the output. Compositors must call this
+ * function before rendering. After they are done rendering, they should call
+ * `wlr_output_set_damage` and `wlr_output_commit` to submit the new frame.
*
- * Swapping buffers schedules a `frame` event.
+ * `needs_commit` will be set to true if a frame should be submitted. `damage`
+ * will be set to the region of the output that needs to be repainted, in
+ * output-buffer-local coordinates.
*/
-bool wlr_output_damage_swap_buffers(struct wlr_output_damage *output_damage,
- struct timespec *when, pixman_region32_t *damage);
+bool wlr_output_damage_attach_render(struct wlr_output_damage *output_damage,
+ bool *needs_commit, pixman_region32_t *damage);
/**
* Accumulates damage and schedules a `frame` event.
*/