[cogl/cogl-1.18] Allocate immediately in _cogl_egl_texture_2d_new_from_image
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [cogl/cogl-1.18] Allocate immediately in _cogl_egl_texture_2d_new_from_image
- Date: Thu, 20 Feb 2014 16:28:54 +0000 (UTC)
commit dd7b1d53dbb6bf16323403433528c63ffeffc331
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>
(cherry picked from commit 0206c03d54823b2f6cbb2aa420d07a4db9bcd8a3)
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 2c8e780..62b8956 100644
--- a/cogl/cogl-texture-2d.c
+++ b/cogl/cogl-texture-2d.c
@@ -234,6 +234,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,
@@ -251,7 +252,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]