[cogl] Allocate immediately in _cogl_egl_texture_2d_new_from_image



commit 0206c03d54823b2f6cbb2aa420d07a4db9bcd8a3
Author: Neil Roberts <neil linux intel com>
Date:   Wed Feb 19 17:26:02 2014 +0000

    Allocate immediately in _cogl_egl_texture_2d_new_from_image
    
    The _cogl_egl_texture_2d_new_from_image function has a CoglError
    argument which implies that it is unlike the other texture
    constructors and returns errors immediately rather than having a
    delayed-allocation mechanism. cogl_wayland_texture_2d_new_from_buffer
    which calls it is also like this. We can't rely on delayed-allocation
    semantics for this without changing the applications because the
    texture needs to be allocated before the corresponding EGLImage is
    destroyed. This patch just makes it immediately allocate.
    
    A better patch might be to remove the error argument to make it
    obvious that there are delayed-allocation semantics and then fix all
    of the applications.
    
    This was breaking Cogland and Mutter.
    
    Reviewed-by: Robert Bragg <robert linux intel com>

 cogl/cogl-texture-2d.c |   11 ++++++++++-
 1 files changed, 10 insertions(+), 1 deletions(-)
---
diff --git a/cogl/cogl-texture-2d.c b/cogl/cogl-texture-2d.c
index 28f32e0..94b34ef 100644
--- a/cogl/cogl-texture-2d.c
+++ b/cogl/cogl-texture-2d.c
@@ -241,6 +241,7 @@ _cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
                                      CoglError **error)
 {
   CoglTextureLoader *loader;
+  CoglTexture2D *tex;
 
   _COGL_RETURN_VAL_IF_FAIL (_cogl_context_get_winsys (ctx)->constraints &
                             COGL_RENDERER_CONSTRAINT_USES_EGL,
@@ -258,7 +259,15 @@ _cogl_egl_texture_2d_new_from_image (CoglContext *ctx,
   loader->src.egl_image.height = height;
   loader->src.egl_image.format = format;
 
-  return _cogl_texture_2d_create_base (ctx, width, height, format, loader);
+  tex = _cogl_texture_2d_create_base (ctx, width, height, format, loader);
+
+  if (!cogl_texture_allocate (COGL_TEXTURE (tex), error))
+    {
+      cogl_object_unref (tex);
+      return NULL;
+    }
+
+  return tex;
 }
 #endif /* defined (COGL_HAS_EGL_SUPPORT) && defined (EGL_KHR_image_base) */
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]