From 6d6e70b9e0e40b6d38ba9276127b869bae893d43 Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Fri, 24 Sep 2021 09:34:51 -0400 Subject: [PATCH] examples: init wlr_output with allocator and renderer --- examples/fullscreen-shell.c | 8 +++++++- examples/multi-pointer.c | 12 +++++++++++- examples/output-layout.c | 9 ++++++++- examples/pointer.c | 12 +++++++++++- examples/quads.c | 9 ++++++++- examples/rotation.c | 9 ++++++++- examples/scene-graph.c | 14 +++++++++++--- examples/simple.c | 13 +++++++++++-- examples/tablet.c | 10 +++++++++- examples/touch.c | 12 +++++++++--- 10 files changed, 93 insertions(+), 15 deletions(-) diff --git a/examples/fullscreen-shell.c b/examples/fullscreen-shell.c index 07320045..5a9d4c92 100644 --- a/examples/fullscreen-shell.c +++ b/examples/fullscreen-shell.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,7 @@ struct fullscreen_server { struct wl_display *wl_display; struct wlr_backend *backend; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_fullscreen_shell_v1 *fullscreen_shell; struct wl_listener present_surface; @@ -146,6 +148,8 @@ static void server_handle_new_output(struct wl_listener *listener, void *data) { wl_container_of(listener, server, new_output); struct wlr_output *wlr_output = data; + wlr_output_init_render(wlr_output, server->allocator, server->renderer); + struct fullscreen_output *output = calloc(1, sizeof(struct fullscreen_output)); output->wlr_output = wlr_output; @@ -203,8 +207,10 @@ int main(int argc, char *argv[]) { struct fullscreen_server server = {0}; server.wl_display = wl_display_create(); server.backend = wlr_backend_autocreate(server.wl_display); - server.renderer = wlr_backend_get_renderer(server.backend); + server.renderer = wlr_renderer_autocreate(server.backend); wlr_renderer_init_wl_display(server.renderer, server.wl_display); + server.allocator = wlr_allocator_autocreate(server.backend, + server.renderer); wlr_compositor_create(server.wl_display, server.renderer); diff --git a/examples/multi-pointer.c b/examples/multi-pointer.c index 49556280..5095cb72 100644 --- a/examples/multi-pointer.c +++ b/examples/multi-pointer.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,8 @@ struct sample_state { struct wl_display *display; struct wlr_xcursor *xcursor; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; float default_color[4]; float clear_color[4]; struct wlr_output_layout *layout; @@ -90,7 +93,7 @@ static void output_frame_notify(struct wl_listener *listener, void *data) { struct sample_output *output = wl_container_of(listener, output, frame); struct sample_state *sample = output->sample; struct wlr_output *wlr_output = output->output; - struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend); + struct wlr_renderer *renderer = sample->renderer; wlr_output_attach_render(wlr_output, NULL); @@ -144,6 +147,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->output = output; sample_output->sample = sample; @@ -269,6 +275,10 @@ int main(int argc, char *argv[]) { if (!wlr) { exit(1); } + + state.renderer = wlr_renderer_autocreate(wlr); + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + wl_list_init(&state.cursors); wl_list_init(&state.pointers); wl_list_init(&state.outputs); diff --git a/examples/output-layout.c b/examples/output-layout.c index 356d5d56..bc5cb7e9 100644 --- a/examples/output-layout.c +++ b/examples/output-layout.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,7 @@ struct sample_state { struct wl_listener new_output; struct wl_listener new_input; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_texture *cat_texture; struct wlr_output_layout *layout; float x_offs, y_offs; @@ -158,6 +160,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); wlr_output_layout_add_auto(sample->layout, output); sample_output->output = output; @@ -273,11 +278,13 @@ int main(int argc, char *argv[]) { wl_signal_add(&wlr->events.new_input, &state.new_input); state.new_input.notify = new_input_notify; - state.renderer = wlr_backend_get_renderer(wlr); + state.renderer = wlr_renderer_autocreate(wlr); state.cat_texture = wlr_texture_from_pixels(state.renderer, DRM_FORMAT_ABGR8888, cat_tex.width * 4, cat_tex.width, cat_tex.height, cat_tex.pixel_data); + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + if (!wlr_backend_start(wlr)) { wlr_log(WLR_ERROR, "Failed to start backend"); wlr_backend_destroy(wlr); diff --git a/examples/pointer.c b/examples/pointer.c index 1abdf1cf..bf3701a4 100644 --- a/examples/pointer.c +++ b/examples/pointer.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,8 @@ struct sample_state { struct wl_display *display; struct compositor_state *compositor; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_xcursor_manager *xcursor_manager; struct wlr_cursor *cursor; double cur_x, cur_y; @@ -95,7 +98,7 @@ static void output_frame_notify(struct wl_listener *listener, void *data) { struct sample_output *sample_output = wl_container_of(listener, sample_output, frame); struct sample_state *state = sample_output->state; struct wlr_output *wlr_output = sample_output->output; - struct wlr_renderer *renderer = wlr_backend_get_renderer(wlr_output->backend); + struct wlr_renderer *renderer = state->renderer; assert(renderer); wlr_output_attach_render(wlr_output, NULL); @@ -250,6 +253,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->output = output; sample_output->state = sample; @@ -331,6 +337,10 @@ int main(int argc, char *argv[]) { if (!wlr) { exit(1); } + + state.renderer = wlr_renderer_autocreate(wlr); + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + state.cursor = wlr_cursor_create(); state.layout = wlr_output_layout_create(); wlr_cursor_attach_output_layout(state.cursor, state.layout); diff --git a/examples/quads.c b/examples/quads.c index 6696ef7c..d74ef25e 100644 --- a/examples/quads.c +++ b/examples/quads.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -24,6 +25,7 @@ struct sample_state { struct wl_listener new_input; struct timespec last_frame; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wl_list outputs; }; @@ -103,6 +105,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); struct wlr_output_mode *mode = wlr_output_preferred_mode(output); @@ -195,13 +200,15 @@ int main(int argc, char *argv[]) { state.new_input.notify = new_input_notify; clock_gettime(CLOCK_MONOTONIC, &state.last_frame); - state.renderer = wlr_backend_get_renderer(wlr); + state.renderer = wlr_renderer_autocreate(wlr); if (!state.renderer) { wlr_log(WLR_ERROR, "Could not start compositor, OOM"); wlr_backend_destroy(wlr); exit(EXIT_FAILURE); } + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + if (!wlr_backend_start(wlr)) { wlr_log(WLR_ERROR, "Failed to start backend"); wlr_backend_destroy(wlr); diff --git a/examples/rotation.c b/examples/rotation.c index ff34630e..cc1cfbb5 100644 --- a/examples/rotation.c +++ b/examples/rotation.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,7 @@ struct sample_state { struct wl_listener new_input; struct timespec last_frame; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_texture *cat_texture; struct wl_list outputs; enum wl_output_transform transform; @@ -105,6 +107,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->x_offs = sample_output->y_offs = 0; sample_output->x_vel = sample_output->y_vel = 128; @@ -245,7 +250,7 @@ int main(int argc, char *argv[]) { state.new_input.notify = new_input_notify; clock_gettime(CLOCK_MONOTONIC, &state.last_frame); - state.renderer = wlr_backend_get_renderer(wlr); + state.renderer = wlr_renderer_autocreate(wlr); if (!state.renderer) { wlr_log(WLR_ERROR, "Could not start compositor, OOM"); wlr_backend_destroy(wlr); @@ -259,6 +264,8 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + if (!wlr_backend_start(wlr)) { wlr_log(WLR_ERROR, "Failed to start backend"); wlr_backend_destroy(wlr); diff --git a/examples/scene-graph.c b/examples/scene-graph.c index d5c23a16..bd2003f5 100644 --- a/examples/scene-graph.c +++ b/examples/scene-graph.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -25,6 +26,8 @@ static const int border_width = 3; struct server { struct wl_display *display; struct wlr_backend *backend; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_scene *scene; struct wl_list outputs; @@ -73,6 +76,8 @@ static void server_handle_new_output(struct wl_listener *listener, void *data) { struct server *server = wl_container_of(listener, server, new_output); struct wlr_output *wlr_output = data; + wlr_output_init_render(wlr_output, server->allocator, server->renderer); + struct output *output = calloc(1, sizeof(struct output)); output->wlr = wlr_output; @@ -161,11 +166,14 @@ int main(int argc, char *argv[]) { server.backend = wlr_backend_autocreate(server.display); server.scene = wlr_scene_create(); - struct wlr_renderer *renderer = wlr_backend_get_renderer(server.backend); - wlr_renderer_init_wl_display(renderer, server.display); + server.renderer = wlr_renderer_autocreate(server.backend); + wlr_renderer_init_wl_display(server.renderer, server.display); + + server.allocator = wlr_allocator_autocreate(server.backend, + server.renderer); struct wlr_compositor *compositor = - wlr_compositor_create(server.display, renderer); + wlr_compositor_create(server.display, server.renderer); wlr_xdg_shell_create(server.display); diff --git a/examples/simple.c b/examples/simple.c index 9135d163..94f3abe0 100644 --- a/examples/simple.c +++ b/examples/simple.c @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -18,6 +19,8 @@ struct sample_state { struct wl_display *display; struct wl_listener new_output; struct wl_listener new_input; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct timespec last_frame; float color[4]; int dec; @@ -61,8 +64,7 @@ static void output_frame_notify(struct wl_listener *listener, void *data) { wlr_output_attach_render(wlr_output, NULL); - struct wlr_renderer *renderer = - wlr_backend_get_renderer(wlr_output->backend); + struct wlr_renderer *renderer = sample->renderer; wlr_renderer_begin(renderer, wlr_output->width, wlr_output->height); wlr_renderer_clear(renderer, sample->color); wlr_renderer_end(renderer); @@ -84,6 +86,9 @@ static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->output = output; @@ -171,6 +176,10 @@ int main(void) { if (!backend) { exit(1); } + + state.renderer = wlr_renderer_autocreate(backend); + state.allocator = wlr_allocator_autocreate(backend, state.renderer); + wl_signal_add(&backend->events.new_output, &state.new_output); state.new_output.notify = new_output_notify; wl_signal_add(&backend->events.new_input, &state.new_input); diff --git a/examples/tablet.c b/examples/tablet.c index 5d0e8dcc..234bfb99 100644 --- a/examples/tablet.c +++ b/examples/tablet.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -22,6 +23,7 @@ struct sample_state { struct wl_display *display; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; bool proximity, tap, button; double distance; double pressure; @@ -237,6 +239,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->output = output; sample_output->sample = sample; @@ -361,11 +366,14 @@ int main(int argc, char *argv[]) { state.new_input.notify = new_input_notify; clock_gettime(CLOCK_MONOTONIC, &state.last_frame); - state.renderer = wlr_backend_get_renderer(wlr); + state.renderer = wlr_renderer_autocreate(wlr); if (!state.renderer) { wlr_log(WLR_ERROR, "Could not start compositor, OOM"); exit(EXIT_FAILURE); } + + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + if (!wlr_backend_start(wlr)) { wlr_log(WLR_ERROR, "Failed to start backend"); wlr_backend_destroy(wlr); diff --git a/examples/touch.c b/examples/touch.c index 0c9cd2b4..ae2dcf8f 100644 --- a/examples/touch.c +++ b/examples/touch.c @@ -10,8 +10,9 @@ #include #include #include -#include +#include #include +#include #include #include #include @@ -23,6 +24,7 @@ struct sample_state { struct wl_display *display; struct wlr_renderer *renderer; + struct wlr_allocator *allocator; struct wlr_texture *cat_texture; struct wl_list touch_points; struct timespec last_frame; @@ -148,6 +150,9 @@ static void output_remove_notify(struct wl_listener *listener, void *data) { static void new_output_notify(struct wl_listener *listener, void *data) { struct wlr_output *output = data; struct sample_state *sample = wl_container_of(listener, sample, new_output); + + wlr_output_init_render(output, sample->allocator, sample->renderer); + struct sample_output *sample_output = calloc(1, sizeof(struct sample_output)); sample_output->output = output; sample_output->sample = sample; @@ -254,8 +259,7 @@ int main(int argc, char *argv[]) { state.new_input.notify = new_input_notify; clock_gettime(CLOCK_MONOTONIC, &state.last_frame); - - state.renderer = wlr_backend_get_renderer(wlr); + state.renderer = wlr_renderer_autocreate(wlr); if (!state.renderer) { wlr_log(WLR_ERROR, "Could not start compositor, OOM"); exit(EXIT_FAILURE); @@ -268,6 +272,8 @@ int main(int argc, char *argv[]) { exit(EXIT_FAILURE); } + state.allocator = wlr_allocator_autocreate(wlr, state.renderer); + if (!wlr_backend_start(wlr)) { wlr_log(WLR_ERROR, "Failed to start backend"); wlr_backend_destroy(wlr);