diff --git a/kiwmi/desktop/output.c b/kiwmi/desktop/output.c index afe40af..2464c00 100644 --- a/kiwmi/desktop/output.c +++ b/kiwmi/desktop/output.c @@ -160,7 +160,13 @@ output_frame_notify(struct wl_listener *listener, void *data) struct timespec now; clock_gettime(CLOCK_MONOTONIC, &now); - if (output->damaged == 0) { + int buffer_age; + if (!wlr_output_attach_render(wlr_output, &buffer_age)) { + wlr_log(WLR_ERROR, "Failed to attach renderer to output"); + return; + } + + if (output->damaged == 0 && buffer_age > 0) { send_frame_done_to_layer( &output->layers[ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND], &now); send_frame_done_to_layer( @@ -176,11 +182,6 @@ output_frame_notify(struct wl_listener *listener, void *data) view, send_frame_done_to_surface, &now); } - if (!wlr_output_attach_render(wlr_output, NULL)) { - wlr_log(WLR_ERROR, "Failed to attach renderer to output"); - return; - } - if (render_cursors(wlr_output)) { output_damage(output); } @@ -193,11 +194,6 @@ output_frame_notify(struct wl_listener *listener, void *data) struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend); - if (!wlr_output_attach_render(wlr_output, NULL)) { - wlr_log(WLR_ERROR, "Failed to attach renderer to output"); - return; - } - int width; int height; wlr_output_effective_resolution(wlr_output, &width, &height);