jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=24447641d38cb9bf7b9e816d38cfeab55dae14c7

commit 24447641d38cb9bf7b9e816d38cfeab55dae14c7
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Wed Jan 17 15:17:59 2018 +0900

    evas gl: Properly verify that Evas GL works
    
    For SW engine we need to verify that OSMesa is present. The patch
    fb048e73120b39095cc87aa4f8d7f3d397a93c56 broke the logic.
    
    Tested by temporarily removing OSMesa from my system.
    
    Fixes T6617 (again)
---
 src/lib/evas/canvas/evas_gl.c                           | 5 ++++-
 src/lib/evas/include/evas_private.h                     | 1 +
 src/modules/evas/engines/gl_generic/evas_engine.c       | 9 +++++++++
 src/modules/evas/engines/software_generic/evas_engine.c | 9 ++++++++-
 4 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/canvas/evas_gl.c b/src/lib/evas/canvas/evas_gl.c
index a54de42236..62b7a3fa0f 100644
--- a/src/lib/evas/canvas/evas_gl.c
+++ b/src/lib/evas/canvas/evas_gl.c
@@ -147,7 +147,10 @@ evas_gl_new(Evas *e)
    evas_gl->evas = efl_data_ref(e, EVAS_CANVAS_CLASS);
    LKI(evas_gl->lck);
 
-   if (!evas_gl->evas->engine.func->gl_context_create)
+   if (!evas_gl->evas->engine.func->gl_context_create ||
+       !evas_gl->evas->engine.func->gl_supports_evas_gl ||
+       !evas_gl->evas->engine.func->gl_supports_evas_gl(
+          _evas_engine_context(evas_gl->evas)))
      {
         ERR("Evas GL engine not available.");
         efl_data_unref(e, evas_gl->evas);
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 168a7569d6..7c43a64295 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1432,6 +1432,7 @@ struct _Evas_Func
    int  (*font_right_inset_get)            (void *engine, Evas_Font_Set *font, 
const Evas_Text_Props *text_props);
 
    /* EFL-GL Glue Layer */
+   Eina_Bool (*gl_supports_evas_gl)      (void *engine);
    void *(*gl_output_set)                (void *engine, void *output);
    void *(*gl_surface_create)            (void *engine, void *config, int w, 
int h);
    void *(*gl_pbuffer_surface_create)    (void *engine, void *config, int w, 
int h, int const *attrib_list);
diff --git a/src/modules/evas/engines/gl_generic/evas_engine.c 
b/src/modules/evas/engines/gl_generic/evas_engine.c
index d5c8544fda..b0edce0255 100644
--- a/src/modules/evas/engines/gl_generic/evas_engine.c
+++ b/src/modules/evas/engines/gl_generic/evas_engine.c
@@ -1528,6 +1528,14 @@ evgl_init(Render_Engine_GL_Generic *engine)
 
 #define EVGLINIT(_ret) Render_Output_GL_Generic *re; if ((re = 
evgl_init(engine)) == NULL) return _ret
 
+static Eina_Bool
+eng_gl_supports_evas_gl(void *engine EINA_UNUSED)
+{
+   // Evas GL should always work... But let's do a full init anyway.
+   EVGLINIT(EINA_FALSE);
+   return EINA_TRUE;
+}
+
 static void *
 eng_gl_output_set(void *eng, void *output)
 {
@@ -3166,6 +3174,7 @@ module_open(Evas_Module *em)
    ORD(font_cache_set);
    ORD(font_cache_get);
 
+   ORD(gl_supports_evas_gl);
    ORD(gl_output_set);
    ORD(gl_surface_create);
    ORD(gl_pbuffer_surface_create);
diff --git a/src/modules/evas/engines/software_generic/evas_engine.c 
b/src/modules/evas/engines/software_generic/evas_engine.c
index 209ce71dbe..d1085c3665 100644
--- a/src/modules/evas/engines/software_generic/evas_engine.c
+++ b/src/modules/evas/engines/software_generic/evas_engine.c
@@ -3461,13 +3461,19 @@ _tls_check(void)
 }
 #endif
 
-static inline int
+static inline Eina_Bool
 _check_gl(void)
 {
    if (!gl_lib_init()) return 0;
    return 1;
 }
 
+static Eina_Bool
+eng_gl_supports_evas_gl(void *data EINA_UNUSED)
+{
+   return _check_gl();
+}
+
 static void *
 eng_gl_surface_create(void *data EINA_UNUSED, void *config, int w, int h)
 {
@@ -4815,6 +4821,7 @@ static Evas_Func func =
      eng_font_pen_coords_get,
      eng_font_text_props_info_create,
      eng_font_right_inset_get,
+     eng_gl_supports_evas_gl, // returns true iif OSMesa is present
      NULL, // No need to set output for software engine
      eng_gl_surface_create, // need software mesa for gl rendering <- 
gl_surface_create
      NULL, // need software mesa for gl rendering <- gl_pbuffer_surface_create

-- 


Reply via email to