diff --git a/gsk/gpu/gskglframe.c b/gsk/gpu/gskglframe.c index a85ae5a5e0..75a65f201d 100644 --- a/gsk/gpu/gskglframe.c +++ b/gsk/gpu/gskglframe.c @@ -89,6 +89,7 @@ gsk_gl_frame_upload_texture (GskGpuFrame *frame, image = gsk_gl_image_new_for_texture (GSK_GL_DEVICE (gsk_gpu_frame_get_device (frame)), texture, gdk_gl_texture_get_id (gl_texture), + 0, FALSE, gdk_gl_texture_has_mipmap (gl_texture) ? (GSK_GPU_IMAGE_CAN_MIPMAP | GSK_GPU_IMAGE_MIPMAP) : 0); @@ -115,6 +116,7 @@ gsk_gl_frame_upload_texture (GskGpuFrame *frame, return gsk_gl_image_new_for_texture (GSK_GL_DEVICE (gsk_gpu_frame_get_device (frame)), texture, tex_id, + 0, TRUE, (external ? GSK_GPU_IMAGE_EXTERNAL | GSK_GPU_IMAGE_NO_BLIT : 0)); } diff --git a/gsk/gpu/gskglimage.c b/gsk/gpu/gskglimage.c index 8adae431f6..7e1b5835bd 100644 --- a/gsk/gpu/gskglimage.c +++ b/gsk/gpu/gskglimage.c @@ -10,6 +10,7 @@ struct _GskGLImage GskGpuImage parent_instance; guint texture_id; + guint memory_id; guint framebuffer_id; GLint gl_internal_format; @@ -49,6 +50,9 @@ gsk_gl_image_finalize (GObject *object) if (self->owns_texture) glDeleteTextures (1, &self->texture_id); + if (self->memory_id) + glDeleteMemoryObjectsEXT (1, &self->memory_id); + G_OBJECT_CLASS (gsk_gl_image_parent_class)->finalize (object); } @@ -216,6 +220,7 @@ GskGpuImage * gsk_gl_image_new_for_texture (GskGLDevice *device, GdkTexture *owner, GLuint tex_id, + GLuint mem_id, gboolean take_ownership, GskGpuImageFlags extra_flags) { @@ -258,6 +263,7 @@ gsk_gl_image_new_for_texture (GskGLDevice *device, gsk_gpu_image_toggle_ref_texture (GSK_GPU_IMAGE (self), owner); self->texture_id = tex_id; + self->memory_id = mem_id; self->owns_texture = take_ownership; return GSK_GPU_IMAGE (self); diff --git a/gsk/gpu/gskglimageprivate.h b/gsk/gpu/gskglimageprivate.h index a4f83aa5a3..60e071028e 100644 --- a/gsk/gpu/gskglimageprivate.h +++ b/gsk/gpu/gskglimageprivate.h @@ -25,6 +25,7 @@ GskGpuImage * gsk_gl_image_new (GskGLDe GskGpuImage * gsk_gl_image_new_for_texture (GskGLDevice *device, GdkTexture *owner, GLuint tex_id, + GLuint mem_id, gboolean take_ownership, GskGpuImageFlags extra_flags);