diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index c86c2892..72b14b70 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -120,9 +120,8 @@ struct wlr_render_pass; * 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_attach_render(), - * render and call wlr_output_commit(). No rendering should happen outside a - * `frame` event handler or before wlr_output_attach_render(). + * To render a new frame, compositors should call wlr_output_begin_render_pass(), + * perform rendering on that render pass and finally call wlr_output_commit(). */ struct wlr_output { const struct wlr_output_impl *impl; diff --git a/include/wlr/types/wlr_output_layer.h b/include/wlr/types/wlr_output_layer.h index f4aef058..af843d07 100644 --- a/include/wlr/types/wlr_output_layer.h +++ b/include/wlr/types/wlr_output_layer.h @@ -18,8 +18,8 @@ * An output layer. * * Output layers are displayed between the output primary buffer (see - * wlr_output_attach_buffer() and wlr_output_attach_render()) and the cursor - * buffer. They can offload some rendering work to the backend. + * wlr_output_attach_buffer()) and the cursor buffer. They can offload some + * rendering work to the backend. * * To configure output layers, callers should call wlr_output_layer_create() to * create layers, attach struct wlr_output_layer_state onto diff --git a/types/output/render.c b/types/output/render.c index acc6f6b0..b46a731d 100644 --- a/types/output/render.c +++ b/types/output/render.c @@ -57,32 +57,6 @@ void output_clear_back_buffer(struct wlr_output *output) { output->back_buffer = NULL; } -bool wlr_output_attach_render(struct wlr_output *output, int *buffer_age) { - assert(output->back_buffer == NULL); - - if (!wlr_output_configure_primary_swapchain(output, &output->pending, - &output->swapchain)) { - return false; - } - - struct wlr_renderer *renderer = output->renderer; - assert(renderer != NULL); - - struct wlr_buffer *buffer = - wlr_swapchain_acquire(output->swapchain, buffer_age); - if (buffer == NULL) { - return false; - } - - if (!renderer_bind_buffer(renderer, buffer)) { - wlr_buffer_unlock(buffer); - return false; - } - - output->back_buffer = buffer; - return true; -} - static struct wlr_buffer *output_acquire_empty_buffer(struct wlr_output *output, const struct wlr_output_state *state) { assert(!(state->committed & WLR_OUTPUT_STATE_BUFFER)); @@ -247,13 +221,24 @@ uint32_t wlr_output_preferred_read_format(struct wlr_output *output) { return DRM_FORMAT_INVALID; } - if (!wlr_output_attach_render(output, NULL)) { + if (!wlr_output_configure_primary_swapchain(output, &output->pending, &output->swapchain)) { + return false; + } + + struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain, NULL); + if (buffer == NULL) { + return false; + } + + if (!wlr_renderer_begin_with_buffer(renderer, buffer)) { + wlr_buffer_unlock(buffer); return false; } uint32_t fmt = renderer->impl->preferred_read_format(renderer); - output_clear_back_buffer(output); + wlr_renderer_end(renderer); + wlr_buffer_unlock(buffer); return fmt; }