mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Merge pull request #903 from emersion/wlr-egl-destroy-surface
render/egl: add wlr_egl_destroy_surface
This commit is contained in:
		
						commit
						99e9f08c4a
					
				
					 8 changed files with 23 additions and 23 deletions
				
			
		| 
						 | 
					@ -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);
 | 
				
			||||||
		eglDestroySurface(surf->renderer->egl.display, 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);
 | 
				
			||||||
		eglDestroySurface(surf->renderer->egl.display, surf->egl);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (surf->gbm) {
 | 
						if (surf->gbm) {
 | 
				
			||||||
		gbm_surface_destroy(surf->gbm);
 | 
							gbm_surface_destroy(surf->gbm);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
		eglDestroySurface(backend->egl.display, 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) {
 | 
				
			||||||
| 
						 | 
					@ -73,7 +71,7 @@ static void output_destroy(struct wlr_output *wlr_output) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_event_source_remove(output->frame_timer);
 | 
						wl_event_source_remove(output->frame_timer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eglDestroySurface(output->backend->egl.display, output->egl_surface);
 | 
						wlr_egl_destroy_surface(&output->backend->egl, output->egl_surface);
 | 
				
			||||||
	free(output);
 | 
						free(output);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -184,7 +184,7 @@ static void wlr_wl_output_destroy(struct wlr_output *wlr_output) {
 | 
				
			||||||
		wl_callback_destroy(output->frame_callback);
 | 
							wl_callback_destroy(output->frame_callback);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eglDestroySurface(output->backend->egl.display, output->surface);
 | 
						wlr_egl_destroy_surface(&output->backend->egl, output->egl_surface);
 | 
				
			||||||
	wl_egl_window_destroy(output->egl_window);
 | 
						wl_egl_window_destroy(output->egl_window);
 | 
				
			||||||
	zxdg_toplevel_v6_destroy(output->xdg_toplevel);
 | 
						zxdg_toplevel_v6_destroy(output->xdg_toplevel);
 | 
				
			||||||
	zxdg_surface_v6_destroy(output->xdg_surface);
 | 
						zxdg_surface_v6_destroy(output->xdg_surface);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,7 +61,7 @@ static void output_destroy(struct wlr_output *wlr_output) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_remove(&output->link);
 | 
						wl_list_remove(&output->link);
 | 
				
			||||||
	wl_event_source_remove(output->frame_timer);
 | 
						wl_event_source_remove(output->frame_timer);
 | 
				
			||||||
	eglDestroySurface(x11->egl.display, output->surf);
 | 
						wlr_egl_destroy_surface(&x11->egl, output->surf);
 | 
				
			||||||
	xcb_destroy_window(x11->xcb_conn, output->win);
 | 
						xcb_destroy_window(x11->xcb_conn, output->win);
 | 
				
			||||||
	xcb_flush(x11->xcb_conn);
 | 
						xcb_flush(x11->xcb_conn);
 | 
				
			||||||
	free(output);
 | 
						free(output);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,9 +188,8 @@ static void xdg_popup_configure(void *data, struct xdg_popup *xdg_popup,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void popup_destroy()
 | 
					static void popup_destroy() {
 | 
				
			||||||
{
 | 
						wlr_egl_destroy_surface(&egl, popup_egl_surface);
 | 
				
			||||||
	eglDestroySurface(egl.display, popup_egl_surface);
 | 
					 | 
				
			||||||
	wl_egl_window_destroy(popup_egl_window);
 | 
						wl_egl_window_destroy(popup_egl_window);
 | 
				
			||||||
	xdg_popup_destroy(popup);
 | 
						xdg_popup_destroy(popup);
 | 
				
			||||||
	wl_surface_destroy(popup_wl_surface);
 | 
						wl_surface_destroy(popup_wl_surface);
 | 
				
			||||||
| 
						 | 
					@ -262,7 +261,7 @@ static void layer_surface_configure(void *data,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void layer_surface_closed(void *data,
 | 
					static void layer_surface_closed(void *data,
 | 
				
			||||||
		struct zwlr_layer_surface_v1 *surface) {
 | 
							struct zwlr_layer_surface_v1 *surface) {
 | 
				
			||||||
	eglDestroySurface(egl.display, egl_surface);
 | 
						wlr_egl_destroy_surface(&egl, egl_surface);
 | 
				
			||||||
	wl_egl_window_destroy(egl_window);
 | 
						wl_egl_window_destroy(egl_window);
 | 
				
			||||||
	zwlr_layer_surface_v1_destroy(surface);
 | 
						zwlr_layer_surface_v1_destroy(surface);
 | 
				
			||||||
	wl_surface_destroy(wl_surface);
 | 
						wl_surface_destroy(wl_surface);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -98,4 +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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										14
									
								
								render/egl.c
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								render/egl.c
									
										
									
									
									
								
							| 
						 | 
					@ -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) {
 | 
				
			||||||
| 
						 | 
					@ -499,3 +500,10 @@ int wlr_egl_get_dmabuf_modifiers(struct wlr_egl *egl,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return num;
 | 
						return num;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) {
 | 
				
			||||||
 | 
						if (!surface) {
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return eglDestroySurface(egl->display, surface);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue