render/egl: allow passing NULL to surface and image destructors

This commit is contained in:
emersion 2018-04-25 00:42:19 +01:00
parent eaed6bd03b
commit 018b82c01e
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48
5 changed files with 14 additions and 19 deletions

View file

@ -79,9 +79,7 @@ bool wlr_drm_surface_init(struct wlr_drm_surface *surf,
} }
gbm_surface_destroy(surf->gbm); 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, surf->gbm = gbm_surface_create(renderer->gbm, width, height,
format, GBM_BO_USE_RENDERING | flags); 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); 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) { if (surf->gbm) {
gbm_surface_destroy(surf->gbm); gbm_surface_destroy(surf->gbm);
} }

View file

@ -29,9 +29,7 @@ static bool output_set_custom_mode(struct wlr_output *wlr_output, int32_t width,
refresh = HEADLESS_DEFAULT_REFRESH; 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); output->egl_surface = egl_create_surface(&backend->egl, width, height);
if (output->egl_surface == EGL_NO_SURFACE) { if (output->egl_surface == EGL_NO_SURFACE) {

View file

@ -98,6 +98,6 @@ bool wlr_egl_is_current(struct wlr_egl *egl);
bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface, bool wlr_egl_swap_buffers(struct wlr_egl *egl, EGLSurface surface,
pixman_region32_t *damage); 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 #endif

View file

@ -225,9 +225,10 @@ bool wlr_egl_destroy_image(struct wlr_egl *egl, EGLImage image) {
if (!eglDestroyImageKHR) { if (!eglDestroyImageKHR) {
return false; return false;
} }
if (!image) {
eglDestroyImageKHR(egl->display, image); return true;
return true; }
return eglDestroyImageKHR(egl->display, image);
} }
EGLSurface wlr_egl_create_surface(struct wlr_egl *egl, void *window) { 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; return num;
} }
void wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) { bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) {
eglDestroySurface(egl->display, surface); if (!surface) {
return true;
}
return eglDestroySurface(egl->display, surface);
} }

View file

@ -88,10 +88,7 @@ static void gles2_texture_destroy(struct wlr_texture *wlr_texture) {
if (texture->image_tex) { if (texture->image_tex) {
glDeleteTextures(1, &texture->image_tex); glDeleteTextures(1, &texture->image_tex);
} }
if (texture->image) { wlr_egl_destroy_image(texture->egl, texture->image);
assert(eglDestroyImageKHR);
wlr_egl_destroy_image(texture->egl, texture->image);
}
if (texture->type == WLR_GLES2_TEXTURE_GLTEX) { if (texture->type == WLR_GLES2_TEXTURE_GLTEX) {
glDeleteTextures(1, &texture->gl_tex); glDeleteTextures(1, &texture->gl_tex);