diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c index 2cd7806d7..4fee4756c 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -2905,6 +2905,28 @@ meta_onscreen_native_allocate (CoglOnscreen *onscreen, return TRUE; } +static void +destroy_egl_surface (CoglOnscreen *onscreen) +{ + CoglOnscreenEGL *onscreen_egl = onscreen->winsys; + + if (onscreen_egl->egl_surface != EGL_NO_SURFACE) + { + MetaOnscreenNative *onscreen_native = onscreen_egl->platform; + MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native); + CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen); + CoglContext *cogl_context = framebuffer->context; + CoglRenderer *cogl_renderer = cogl_context->display->renderer; + CoglRendererEGL *cogl_renderer_egl = cogl_renderer->winsys; + + meta_egl_destroy_surface (egl, + cogl_renderer_egl->edpy, + onscreen_egl->egl_surface, + NULL); + onscreen_egl->egl_surface = EGL_NO_SURFACE; + } +} + static void meta_renderer_native_release_onscreen (CoglOnscreen *onscreen) { @@ -2947,17 +2969,6 @@ meta_renderer_native_release_onscreen (CoglOnscreen *onscreen) g_source_destroy); } - if (onscreen_egl->egl_surface != EGL_NO_SURFACE) - { - MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native); - - meta_egl_destroy_surface (egl, - cogl_renderer_egl->edpy, - onscreen_egl->egl_surface, - NULL); - onscreen_egl->egl_surface = EGL_NO_SURFACE; - } - renderer_gpu_data = meta_renderer_native_get_gpu_data (onscreen_native->renderer_native, onscreen_native->render_gpu); @@ -2970,6 +2981,8 @@ meta_renderer_native_release_onscreen (CoglOnscreen *onscreen) free_current_bo (onscreen); + destroy_egl_surface (onscreen); + if (onscreen_native->gbm.surface) { gbm_surface_destroy (onscreen_native->gbm.surface); @@ -2980,6 +2993,9 @@ meta_renderer_native_release_onscreen (CoglOnscreen *onscreen) case META_RENDERER_NATIVE_MODE_EGL_DEVICE: release_dumb_fb (&onscreen_native->egl.dumb_fb, onscreen_native->render_gpu); + + destroy_egl_surface (onscreen); + if (onscreen_native->egl.stream != EGL_NO_STREAM_KHR) { MetaEgl *egl = meta_onscreen_native_get_egl (onscreen_native);