diff options
Diffstat (limited to 'render')
-rw-r--r-- | render/gles2/renderer.c | 1 | ||||
-rw-r--r-- | render/wlr_renderer.c | 15 |
2 files changed, 14 insertions, 2 deletions
diff --git a/render/gles2/renderer.c b/render/gles2/renderer.c index 76114278..6ae5e843 100644 --- a/render/gles2/renderer.c +++ b/render/gles2/renderer.c @@ -674,6 +674,7 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) { struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer); wlr_egl_make_current(renderer->egl, EGL_NO_SURFACE, NULL); + wlr_egl_finish(renderer->egl); struct wlr_gles2_buffer *buffer, *buffer_tmp; wl_list_for_each_safe(buffer, buffer_tmp, &renderer->buffers, link) { diff --git a/render/wlr_renderer.c b/render/wlr_renderer.c index e77c41d9..69cc0363 100644 --- a/render/wlr_renderer.c +++ b/render/wlr_renderer.c @@ -247,13 +247,24 @@ bool wlr_renderer_init_wl_display(struct wlr_renderer *r, return true; } -struct wlr_renderer *wlr_renderer_autocreate(struct wlr_egl *egl, - EGLenum platform, void *remote_display) { +struct wlr_renderer *wlr_renderer_autocreate(EGLenum platform, + void *remote_display) { + struct wlr_egl *egl = calloc(1, sizeof(*egl)); + if (egl == NULL) { + wlr_log_errno(WLR_ERROR, "Allocation failed"); + return NULL; + } + if (!wlr_egl_init(egl, platform, remote_display, NULL, 0)) { wlr_log(WLR_ERROR, "Could not initialize EGL"); return NULL; } + /* + * wlr_renderer becomes the owner of the previously wlr_egl, and will + * take care of freeing the allocated memory + * TODO: move the wlr_egl logic to wlr_gles2_renderer + */ struct wlr_renderer *renderer = wlr_gles2_renderer_create(egl); if (!renderer) { wlr_egl_finish(egl); |