#include "GL/gl.h"
#include "yagl_gles_image.h"
+#include "yagl_gles_texture.h"
+#include "yagl_client_context.h"
+#include "yagl_sharegroup.h"
#include "yagl_malloc.h"
#include "yagl_host_gles_calls.h"
{
struct yagl_gles_image *image = (struct yagl_gles_image*)ref;
- yagl_host_glDeleteObjects(&image->tex_global_name, 1);
+ if (image->texture_obj) {
+ yagl_gles_texture_release(image->texture_obj);
+ } else {
+ yagl_host_glDeleteObjects(&image->tex_global_name, 1);
+ }
yagl_client_image_cleanup(&image->base);
return image;
}
+struct yagl_gles_image *yagl_gles_image_wrap_tex(struct yagl_client_context *ctx,
+ yagl_object_name tex_local_name)
+{
+ struct yagl_gles_texture *texture_obj;
+ struct yagl_gles_image *image;
+
+ texture_obj = (struct yagl_gles_texture *)yagl_sharegroup_acquire_object(ctx->sg,
+ YAGL_NS_TEXTURE,
+ tex_local_name);
+
+ if (!texture_obj) {
+ goto fail;
+ }
+
+ image = yagl_malloc0(sizeof(*image));
+
+ yagl_client_image_init(&image->base, &yagl_gles_image_destroy);
+
+ image->base.update = &yagl_gles_image_update;
+
+ image->tex_global_name = texture_obj->global_name;
+ image->texture_obj = texture_obj;
+
+ return image;
+
+fail:
+ yagl_gles_texture_release(texture_obj);
+
+ return NULL;
+}
+
void yagl_gles_image_acquire(struct yagl_gles_image *image)
{
if (image) {