Commit 36d699a1 authored by Armin Krezović's avatar Armin Krezović Committed by Pekka Paalanen

gl-renderer: Make dummy surface current after all outputs are gone

When all outputs are gone, there are no current read/write
surfaces associated with a context. This makes the previously
created dummy surface current until an output gets attached
to avoid any potential crashes.

v2:

- Remove unnecessary objects
Signed-off-by: default avatarArmin Krezović <krezovic.armin@gmail.com>
Reviewed-by: Pekka Paalanen's avatarPekka Paalanen <pekka.paalanen@collabora.co.uk>
parent e5403849
......@@ -217,6 +217,8 @@ struct gl_renderer {
struct gl_shader *current_shader;
struct wl_signal destroy_signal;
struct wl_listener output_destroy_listener;
};
static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
......@@ -2643,6 +2645,8 @@ gl_renderer_destroy(struct weston_compositor *ec)
eglTerminate(gr->egl_display);
eglReleaseThread();
wl_list_remove(&gr->output_destroy_listener.link);
wl_array_release(&gr->vertices);
wl_array_release(&gr->vtxcnt);
......@@ -2828,6 +2832,20 @@ platform_to_extension(EGLenum platform)
}
}
static void
output_handle_destroy(struct wl_listener *listener, void *data)
{
struct gl_renderer *gr;
struct weston_output *output = data;
gr = container_of(listener, struct gl_renderer,
output_destroy_listener);
if (wl_list_empty(&output->compositor->output_list))
eglMakeCurrent(gr->egl_display, gr->dummy_surface,
gr->dummy_surface, gr->egl_context);
}
static int
gl_renderer_create_pbuffer_surface(struct gl_renderer *gr) {
EGLConfig pbuffer_config;
......@@ -3137,6 +3155,10 @@ gl_renderer_setup(struct weston_compositor *ec, EGLSurface egl_surface)
fan_debug_repaint_binding,
ec);
gr->output_destroy_listener.notify = output_handle_destroy;
wl_signal_add(&ec->output_destroyed_signal,
&gr->output_destroy_listener);
weston_log("GL ES 2 renderer features:\n");
weston_log_continue(STAMP_SPACE "read-back format: %s\n",
ec->read_format == PIXMAN_a8r8g8b8 ? "BGRA" : "RGBA");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment