EvasGL: modify context_create() for GLES3 on wayland_egl
authorDaekwang Ryu <dkdk.ryu@samsung.com>
Wed, 22 Nov 2017 02:51:32 +0000 (11:51 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Thu, 21 Dec 2017 13:30:52 +0000 (22:30 +0900)
Change-Id: Iad5abfd22077dace59899a6fc87adc72cc4a37d4

src/modules/evas/engines/wayland_egl/evas_engine.c [changed mode: 0755->0644]

old mode 100755 (executable)
new mode 100644 (file)
index dbd0c5c..51e38b2
@@ -441,17 +441,52 @@ evgl_eng_context_create(void *data, void *ctxt, Evas_GL_Context_Version version)
    EGLContext context = EGL_NO_CONTEXT;
    int attrs[3];
 
-   if (!(re = (Render_Engine *)data)) return NULL;
+   if (!(re = (Render_Engine *)data))
+     {
+        ERR("Invalid Render Engine Data!");
+        glsym_evas_gl_common_error_set(data, EVAS_GL_NOT_INITIALIZED);
+        return NULL;
+     }
+
    if (!(ob = eng_get_ob(re))) return NULL;
 
-   if (version != EVAS_GL_GLES_2_X)
+   if ((version < EVAS_GL_GLES_1_X) || (version > EVAS_GL_GLES_3_X))
      {
-        ERR("This engine only supports OpenGL-ES 2.0 contexts for now!");
+        ERR("Invalid context version number %d", version);
+        glsym_evas_gl_common_error_set(data, EVAS_GL_BAD_PARAMETER);
         return NULL;
      }
 
+   if ((version == EVAS_GL_GLES_3_X) &&
+       ((!ob->gl_context) || (ob->gl_context->gles_version != EVAS_GL_GLES_3_X)))
+     {
+        EGLint num_config=0;
+        EGLint version_config_attrs[3];
+        version_config_attrs[0] = EGL_RENDERABLE_TYPE;
+        version_config_attrs[1] = EGL_OPENGL_ES3_BIT;
+        version_config_attrs[2] = EGL_NONE;
+
+        if ((!eglChooseConfig(ob->egl_disp, version_config_attrs, NULL, 0, &num_config))
+           || (num_config < 1))
+          {
+             ERR("GLES 3 version not supported!");
+             glsym_evas_gl_common_error_set(data, EVAS_GL_BAD_ATTRIBUTE);
+             return NULL;
+          }
+        else if (ob->gl_context)
+          {
+             ob->gl_context->gles_version = EVAS_GL_GLES_3_X;
+          }
+        else
+          {
+             ERR("Evas GL Context not initialised!");
+             glsym_evas_gl_common_error_set(data, EVAS_GL_NOT_INITIALIZED);
+             return NULL;
+          }
+     }
+
    attrs[0] = EGL_CONTEXT_CLIENT_VERSION;
-   attrs[1] = 2;
+   attrs[1] = version;
    attrs[2] = EGL_NONE;
 
    if (ctxt)
@@ -460,6 +495,12 @@ evgl_eng_context_create(void *data, void *ctxt, Evas_GL_Context_Version version)
             EVGL_TH(eglCreateContext, ob->egl_disp, ob->egl_config,
                            (EGLContext)ctxt, attrs);
      }
+   else if (version == EVAS_GL_GLES_1_X || version == EVAS_GL_GLES_3_X)
+     {
+        context =
+            EVGL_TH(eglCreateContext, ob->egl_disp, ob->egl_config,
+                                      NULL, attrs);
+     }
    else
      {
         context =
@@ -471,6 +512,7 @@ evgl_eng_context_create(void *data, void *ctxt, Evas_GL_Context_Version version)
      {
         int err = EVGL_TH(eglGetError);
         ERR("Failed to create egl context: %#x", err);
+        glsym_evas_gl_common_error_set(data, err - EGL_SUCCESS);
         return NULL;
      }