From 1281af2ddea6201998800ec4bb413922d3568be5 Mon Sep 17 00:00:00 2001 From: Daekwang Ryu Date: Wed, 22 Nov 2017 11:51:32 +0900 Subject: [PATCH] EvasGL: modify context_create() for GLES3 on wayland_egl Change-Id: Iad5abfd22077dace59899a6fc87adc72cc4a37d4 --- src/modules/evas/engines/wayland_egl/evas_engine.c | 50 ++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) mode change 100755 => 100644 src/modules/evas/engines/wayland_egl/evas_engine.c diff --git a/src/modules/evas/engines/wayland_egl/evas_engine.c b/src/modules/evas/engines/wayland_egl/evas_engine.c old mode 100755 new mode 100644 index dbd0c5c..51e38b2 --- a/src/modules/evas/engines/wayland_egl/evas_engine.c +++ b/src/modules/evas/engines/wayland_egl/evas_engine.c @@ -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; } -- 2.7.4