From: Kristian Høgsberg Date: Fri, 7 Sep 2012 01:59:29 +0000 (-0400) Subject: compositor: Destroy gles2 resource for weston_surface in gles2-renderer.c X-Git-Tag: submit/trunk/20120913.174637~53 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4226385e53efbaa5c72f1e6262cdc5fb4137e9bf;p=profile%2Fivi%2Fweston.git compositor: Destroy gles2 resource for weston_surface in gles2-renderer.c This moves the last gles2 call out of compositor.c. --- diff --git a/src/compositor.c b/src/compositor.c index ce7f424..911eaba 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -682,8 +682,6 @@ struct weston_frame_callback { static void destroy_surface(struct wl_resource *resource) { - int i; - struct weston_surface *surface = container_of(resource, struct weston_surface, surface.resource); @@ -693,14 +691,10 @@ destroy_surface(struct wl_resource *resource) if (weston_surface_is_mapped(surface)) weston_surface_unmap(surface); - glDeleteTextures(surface->num_textures, surface->textures); - if (surface->buffer) wl_list_remove(&surface->buffer_destroy_listener.link); - for (i = 0; i < surface->num_images; i++) - compositor->destroy_image(compositor->egl_display, - surface->images[i]); + compositor->renderer->destroy_surface(surface); pixman_region32_fini(&surface->transform.boundingbox); pixman_region32_fini(&surface->damage); diff --git a/src/compositor.h b/src/compositor.h index fd066e2..728be6f 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -272,6 +272,7 @@ struct weston_renderer { pixman_region32_t *output_damage); void (*flush_damage)(struct weston_surface *surface); void (*attach)(struct weston_surface *es, struct wl_buffer *buffer); + void (*destroy_surface)(struct weston_surface *surface); }; struct weston_compositor { diff --git a/src/gles2-renderer.c b/src/gles2-renderer.c index f1941e6..a19c8c5 100644 --- a/src/gles2-renderer.c +++ b/src/gles2-renderer.c @@ -821,6 +821,18 @@ gles2_renderer_attach(struct weston_surface *es, struct wl_buffer *buffer) } } +static void +gles2_renderer_destroy_surface(struct weston_surface *surface) +{ + struct weston_compositor *ec = surface->compositor; + int i; + + glDeleteTextures(surface->num_textures, surface->textures); + + for (i = 0; i < surface->num_images; i++) + ec->destroy_image(ec->egl_display, surface->images[i]); +} + static const char vertex_shader[] = "uniform mat4 proj;\n" "attribute vec2 position;\n" @@ -1164,6 +1176,7 @@ gles2_renderer_init(struct weston_compositor *ec) renderer->base.repaint_output = gles2_renderer_repaint_output; renderer->base.flush_damage = gles2_renderer_flush_damage; renderer->base.attach = gles2_renderer_attach; + renderer->base.destroy_surface = gles2_renderer_destroy_surface; ec->renderer = &renderer->base; return 0;