diff options
Diffstat (limited to 'EGL/yagl_display.c')
-rw-r--r-- | EGL/yagl_display.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/EGL/yagl_display.c b/EGL/yagl_display.c index 1433c8a..4aec282 100644 --- a/EGL/yagl_display.c +++ b/EGL/yagl_display.c @@ -42,6 +42,7 @@ #include "yagl_fence.h" #include "yagl_native_display.h" #include "yagl_native_platform.h" +#include "yagl_client_image.h" #include <stdio.h> #include <stdlib.h> #include <assert.h> @@ -534,6 +535,33 @@ int yagl_display_image_remove(struct yagl_display *dpy, return 0; } +void yagl_display_finalize_images(struct yagl_display *dpy) +{ + struct yagl_resource *res; + + pthread_mutex_lock(&dpy->mutex); + + yagl_list_for_each(struct yagl_resource, res, &dpy->images, list) { + struct yagl_image *image = (struct yagl_image *)res; + int need_finalize; + + yagl_image_acquire(image); + + yagl_client_image_acquire(image->client_image); + need_finalize = image->client_image->need_finalize; + image->client_image->need_finalize = 0; + yagl_client_image_release(image->client_image); + + if (need_finalize && image->finalize) { + image->finalize(image); + } + + yagl_image_release(image); + } + + pthread_mutex_unlock(&dpy->mutex); +} + void yagl_display_fence_add(struct yagl_display *dpy, struct yagl_fence *fence) { |