aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-04-25 00:42:19 +0100
committeremersion <contact@emersion.fr>2018-04-25 08:28:48 +0100
commit018b82c01e642aae45dace95c5aae5d489e98853 (patch)
tree240bcac75264906411ef9f454dced46f71702649
parenteaed6bd03b14e6f124723ce4da56011a80411886 (diff)
render/egl: allow passing NULL to surface and image destructors
-rw-r--r--backend/drm/renderer.c8
-rw-r--r--backend/headless/output.c4
-rw-r--r--include/wlr/render/egl.h2
-rw-r--r--render/egl.c14
-rw-r--r--render/gles2/texture.c5
5 files changed, 14 insertions, 19 deletions
diff --git a/backend/drm/renderer.c b/backend/drm/renderer.c
index 208d50fa..ea46a5e9 100644
--- a/backend/drm/renderer.c
+++ b/backend/drm/renderer.c
@@ -79,9 +79,7 @@ bool wlr_drm_surface_init(struct wlr_drm_surface *surf,
}
gbm_surface_destroy(surf->gbm);
}
- if (surf->egl) {
- wlr_egl_destroy_surface(&surf->renderer->egl, surf->egl);
- }
+ wlr_egl_destroy_surface(&surf->renderer->egl, surf->egl);
surf->gbm = gbm_surface_create(renderer->gbm, width, height,
format, GBM_BO_USE_RENDERING | flags);
@@ -117,9 +115,7 @@ void wlr_drm_surface_finish(struct wlr_drm_surface *surf) {
gbm_surface_release_buffer(surf->gbm, surf->back);
}
- if (surf->egl) {
- wlr_egl_destroy_surface(&surf->renderer->egl, surf->egl);
- }
+ wlr_egl_destroy_surface(&surf->renderer->egl, surf->egl);
if (surf->gbm) {
gbm_surface_destroy(surf->gbm);
}
diff --git a/backend/headless/output.c b/backend/headless/output.c
index 4b748dbf..f71b4cdb 100644
--- a/backend/headless/output.c
+++ b/backend/headless/output.c
@@ -29,9 +29,7 @@ static bool output_set_custom_mode(struct wlr_output *wlr_output, int32_t width,
refresh = HEADLESS_DEFAULT_REFRESH;
}
- if (output->egl_surface) {
- wlr_egl_destroy_surface(&backend->egl, output->egl_surface);
- }
+ wlr_egl_destroy_surface(&backend->egl, output->egl_surface);
output->egl_surface = egl_create_surface(&backend->egl, width, height);
if (output->egl_surface == EGL_NO_SURFACE) {
diff --git a/include/wlr/render/egl.h b/include/wlr/render/egl.h
index 57570ef9..4d837138 100644
--- a/include/wlr/render/egl.h
+++ b/include/wlr/render/egl.h
@@ -98,6 +98,6 @@ bool wlr_egl_is_current(struct wlr_egl *egl);
bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
pixman_region32_t *damage);
-void wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface);
+bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface);
#endif
diff --git a/render/egl.c b/render/egl.c
index 74ac17fd..95bdef55 100644
--- a/render/egl.c
+++ b/render/egl.c
@@ -225,9 +225,10 @@ bool wlr_egl_destroy_image(struct wlr_egl *egl, EGLImage image) {
if (!eglDestroyImageKHR) {
return false;
}
-
- eglDestroyImageKHR(egl->display, image);
- return true;
+ if (!image) {
+ return true;
+ }
+ return eglDestroyImageKHR(egl->display, image);
}
EGLSurface wlr_egl_create_surface(struct wlr_egl *egl, void *window) {
@@ -500,6 +501,9 @@ int wlr_egl_get_dmabuf_modifiers(struct wlr_egl *egl,
return num;
}
-void wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) {
- eglDestroySurface(egl->display, surface);
+bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) {
+ if (!surface) {
+ return true;
+ }
+ return eglDestroySurface(egl->display, surface);
}
diff --git a/render/gles2/texture.c b/render/gles2/texture.c
index 45169daf..45425fbf 100644
--- a/render/gles2/texture.c
+++ b/render/gles2/texture.c
@@ -88,10 +88,7 @@ static void gles2_texture_destroy(struct wlr_texture *wlr_texture) {
if (texture->image_tex) {
glDeleteTextures(1, &texture->image_tex);
}
- if (texture->image) {
- assert(eglDestroyImageKHR);
- wlr_egl_destroy_image(texture->egl, texture->image);
- }
+ wlr_egl_destroy_image(texture->egl, texture->image);
if (texture->type == WLR_GLES2_TEXTURE_GLTEX) {
glDeleteTextures(1, &texture->gl_tex);