mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-10-29 05:40:12 -04:00
Add wlr_output_impl.rollback
Most of the pending output state is not forwarded to the backend prior to an output commit. For instance, wlr_output_set_mode just stashes the mode without calling any wlr_output_impl function. wlr_output_impl.commit is responsible for applying the pending mode. However, there are exceptions to this rule. The first one is wlr_output_attach_render. It won't go away before renderer v6 is complete, because it needs to set the current EGL surface. The second one is wlr_output_attach_buffer. wlr_output_impl.attach_buffer is removed in [1]. When wlr_output_rollback is called, all pending state is supposed to be cleared. This works for all the state except the two exceptions mentionned above. To fix this, introduce wlr_output_impl.rollback. Right now, the backend resets the current EGL surface. This prevents GL commands from affecting the output after wlr_output_rollback. This patch is required for FBO-based outputs to work properly. The compositor might be using FBOs for its own purposes [2], having leftover FBO state can have bad consequences. [1]: https://github.com/swaywm/wlroots/pull/2097 [2]: https://github.com/swaywm/wlroots/pull/2063#issuecomment-597614312
This commit is contained in:
parent
d3bd5f2a7b
commit
507d9bc19e
6 changed files with 31 additions and 0 deletions
|
|
@ -302,6 +302,12 @@ static bool output_commit(struct wlr_output *wlr_output) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static void output_rollback(struct wlr_output *wlr_output) {
|
||||
struct wlr_wl_output *output =
|
||||
get_wl_output_from_output(wlr_output);
|
||||
wlr_egl_make_current(&output->backend->egl, EGL_NO_SURFACE, NULL);
|
||||
}
|
||||
|
||||
static bool output_set_cursor(struct wlr_output *wlr_output,
|
||||
struct wlr_texture *texture, int32_t scale,
|
||||
enum wl_output_transform transform,
|
||||
|
|
@ -431,6 +437,7 @@ static const struct wlr_output_impl output_impl = {
|
|||
.attach_render = output_attach_render,
|
||||
.test = output_test,
|
||||
.commit = output_commit,
|
||||
.rollback = output_rollback,
|
||||
.set_cursor = output_set_cursor,
|
||||
.move_cursor = output_move_cursor,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue