EvasGL: Add error handling for GL_OES_EGL_image/EGL_Image_KHR 31/52231/2
authorJoogab Yun <joogab.yun@samsung.com>
Fri, 20 Nov 2015 05:39:17 +0000 (14:39 +0900)
committerjoogab yun <joogab.yun@samsung.com>
Wed, 25 Nov 2015 06:13:35 +0000 (22:13 -0800)
Summary:
Add code for exception case for GL_OES_EGL_image/EGL_Image_KHR
These EvasGL's extension functions does not have the code for exception case.
e.g. EvasGLImage is NULL.

Test Plan: Native Pixmap surface's example is created and changed EvasGLImage's value(e.g. valid data or NULL)

Reviewers: raster, spacegrapher, jpeg

Subscribers: scholb.kim, JoogabYun, dkdk, cedric

Differential Revision: https://phab.enlightenment.org/D3284

From 64890d260f9ee9607aa21e52761bba226a7b0bd1 Mon Sep 17 00:00:00 2001
From: Wonsik Jung <sidein@samsung.com>

Change-Id: Idb8eebbca8c6f02ea9fe66ad2a3ec455f085409d

src/modules/evas/engines/gl_common/evas_gl_api_ext.c

index fd6cb55..7c41575 100644 (file)
@@ -249,6 +249,13 @@ _evgl_evasglDestroyImage(EvasGLImage image)
 {
    EvasGLImage_EGL *img = image;
 
+   if (!img)
+     {
+        ERR("EvasGLImage is NULL.");
+        evas_gl_common_error_set(NULL, EVAS_GL_BAD_PARAMETER);
+        return;
+     }
+
    EXT_FUNC_EGL(eglDestroyImage)(img->dpy, img->img);
    free(img);
 }
@@ -257,6 +264,34 @@ static void
 _evgl_glEvasGLImageTargetTexture2D(GLenum target, EvasGLImage image)
 {
    EvasGLImage_EGL *img = image;
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+  if (!img)
+    {
+       ERR("EvasGLImage is NULL");
+       EXT_FUNC(glEGLImageTargetTexture2DOES)(target, NULL);
+       return;
+    }
 
    EXT_FUNC(glEGLImageTargetTexture2DOES)(target, img->img);
 }
@@ -265,6 +300,34 @@ static void
 _evgl_glEvasGLImageTargetRenderbufferStorage(GLenum target, EvasGLImage image)
 {
    EvasGLImage_EGL *img = image;
+   EVGL_Resource *rsc;
+   EVGL_Context *ctx;
+
+   if (!(rsc=_evgl_tls_resource_get()))
+     {
+        ERR("Unable to execute GL command. Error retrieving tls");
+        return;
+     }
+
+   if (!rsc->current_eng)
+     {
+        ERR("Unable to retrive Current Engine");
+        return;
+     }
+
+   ctx = rsc->current_ctx;
+   if (!ctx)
+     {
+        ERR("Unable to retrive Current Context");
+        return;
+     }
+
+  if (!img)
+    {
+       ERR("EvasGLImage is NULL");
+       EXT_FUNC(glEGLImageTargetRenderbufferStorageOES)(target, NULL);
+       return;
+    }
 
    EXT_FUNC(glEGLImageTargetRenderbufferStorageOES)(target, img->img);
 }