diff options
author | Simon Ser <contact@emersion.fr> | 2023-04-17 15:33:27 +0200 |
---|---|---|
committer | Alexander Orzechowski <alex@ozal.ski> | 2023-05-30 16:18:19 +0000 |
commit | 93a6acae9f1522c08fb0fa1b73de7404ed4016d8 (patch) | |
tree | c0358bbcb12366698c37519f8b2bc4c4ea881d1e | |
parent | 95062904c7acc38d2175744ceda399c5b5a12adf (diff) |
output: add wlr_output_begin_render_pass()
-rw-r--r-- | include/wlr/types/wlr_output.h | 7 | ||||
-rw-r--r-- | types/output/render.c | 23 |
2 files changed, 30 insertions, 0 deletions
diff --git a/include/wlr/types/wlr_output.h b/include/wlr/types/wlr_output.h index f56bd1eb..267e51ef 100644 --- a/include/wlr/types/wlr_output.h +++ b/include/wlr/types/wlr_output.h @@ -582,6 +582,13 @@ void wlr_output_state_set_buffer(struct wlr_output_state *state, */ bool wlr_output_configure_primary_swapchain(struct wlr_output *output, const struct wlr_output_state *state, struct wlr_swapchain **swapchain); +/** + * Begin a render pass on this output. + * + * Same as wlr_output_attach_render(), but returns a struct wlr_render_pass. + */ +struct wlr_render_pass *wlr_output_begin_render_pass(struct wlr_output *output, + struct wlr_output_state *state, int *buffer_age); /** diff --git a/types/output/render.c b/types/output/render.c index 6e284883..70d8005b 100644 --- a/types/output/render.c +++ b/types/output/render.c @@ -247,3 +247,26 @@ uint32_t wlr_output_preferred_read_format(struct wlr_output *output) { return fmt; } + +struct wlr_render_pass *wlr_output_begin_render_pass(struct wlr_output *output, + struct wlr_output_state *state, int *buffer_age) { + if (!wlr_output_configure_primary_swapchain(output, state, &output->swapchain)) { + return NULL; + } + + struct wlr_buffer *buffer = wlr_swapchain_acquire(output->swapchain, buffer_age); + if (buffer == NULL) { + return NULL; + } + + struct wlr_renderer *renderer = output->renderer; + assert(renderer != NULL); + struct wlr_render_pass *pass = wlr_renderer_begin_buffer_pass(renderer, buffer); + if (pass == NULL) { + return NULL; + } + + wlr_output_state_set_buffer(state, buffer); + wlr_buffer_unlock(buffer); + return pass; +} |