From d4c078875b720505f9fa59d55614ec6ba7fb4a7b Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 22 Feb 2026 18:35:44 +0100 Subject: [PATCH] no outputs can be specified --- glonkers.c | 7 +++++- wayland.c | 64 ++++++++++++++++++++++++++++-------------------------- 2 files changed, 39 insertions(+), 32 deletions(-) diff --git a/glonkers.c b/glonkers.c index 28dd566..632deea 100644 --- a/glonkers.c +++ b/glonkers.c @@ -54,7 +54,8 @@ int main(int argc, char *argv[]) { struct client_state *state = wayland_init(output_type, output_list, output_count); - Renderer renderer = new_renderer(); + bool renderer_initialized = false; + Renderer renderer; bool running = true; while (running) { @@ -63,6 +64,10 @@ int main(int argc, char *argv[]) { int width = event.data.draw.width; int height = event.data.draw.height; double time = event.data.draw.time / 1000.0; + if (!renderer_initialized) { + renderer = new_renderer(); + renderer_initialized = true; + } render(&renderer, width, height, time, shader_path, 0); swap_buffers(state, event.data.draw.surface); } diff --git a/wayland.c b/wayland.c index 19d1432..bca0a74 100644 --- a/wayland.c +++ b/wayland.c @@ -556,39 +556,41 @@ struct event wait_for_event(struct client_state *state) { struct event event = { .type = EVENT_EXIT }; return event; } - while (true) { - if (next == NULL) { - next = state->surface_list; - } - - // do here - if (next->data.dirty) { - next->data.dirty = false; - state->surface_list_next = next->next; - - if (eglMakeCurrent(state->egl_display, next->data.egl_surface, - next->data.egl_surface, state->egl_context)) { - } else { - fprintf(stderr, "Made current failed\n"); + if (state->surface_list != NULL) { + while (true) { + if (next == NULL) { + next = state->surface_list; } - struct event event = { - .type = EVENT_DRAW, - .data = { - .draw = { - .width = next->data.width, - .height = next->data.height, - .time = next->data.time, - .surface = &next->data, - } + + // do here + if (next->data.dirty) { + next->data.dirty = false; + state->surface_list_next = next->next; + + if (eglMakeCurrent(state->egl_display, next->data.egl_surface, + next->data.egl_surface, state->egl_context)) { + } else { + fprintf(stderr, "Made current failed\n"); } - }; - return event; - } - - next = next->next; - if (next == original) { - state->surface_list_next = next; - break; + struct event event = { + .type = EVENT_DRAW, + .data = { + .draw = { + .width = next->data.width, + .height = next->data.height, + .time = next->data.time, + .surface = &next->data, + } + } + }; + return event; + } + + next = next->next; + if (next == original) { + state->surface_list_next = next; + break; + } } } wl_display_dispatch(state->wl_display);