cedric pushed a commit to branch master.

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

commit cc4d41c89001ecc449cdfa5d631ffae8aacd8a9c
Author: Cedric BAIL <[email protected]>
Date:   Fri Aug 25 10:52:03 2017 -0700

    evas: make image_native_set use engine context not output.
---
 src/modules/evas/engines/gl_x11/evas_engine.c | 109 +++++++++++++-------------
 1 file changed, 55 insertions(+), 54 deletions(-)

diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c 
b/src/modules/evas/engines/gl_x11/evas_engine.c
index 0a9a69ce00..45675ecaf0 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -2286,8 +2286,8 @@ eng_image_native_shutdown(void *engine EINA_UNUSED, 
Evas_Native_Surface_Type typ
 static void *
 eng_image_native_set(void *engine, void *image, void *native)
 {
-  Render_Engine *re = (Render_Engine *)engine;
   const Evas_Native_Surface *ns = native;
+  Evas_Engine_GL_Context *gl_context;
   Evas_GL_Image *im = image, *im2 = NULL;
   Visual *vis = NULL;
   Pixmap pm = 0;
@@ -2296,17 +2296,20 @@ eng_image_native_set(void *engine, void *image, void 
*native)
   unsigned int tex = 0;
   unsigned int fbo = 0;
   void *buffer = NULL;
+  Outbuf *ob;
 #ifdef GL_GLES
 # ifdef HAVE_WAYLAND
   void *wlid, *wl_buf = NULL;
 # endif
 #endif
 
+  gl_context = gl_generic_context_find(engine);
+  ob = gl_generic_any_output_get(engine);
   if (!im)
     {
        if ((ns) && (ns->type == EVAS_NATIVE_SURFACE_OPENGL))
          {
-            im = 
glsym_evas_gl_common_image_new_from_data(eng_get_ob(re)->gl_context,
+            im = glsym_evas_gl_common_image_new_from_data(gl_context,
                                                     ns->data.opengl.w,
                                                     ns->data.opengl.h,
                                                     NULL, 1,
@@ -2381,8 +2384,6 @@ eng_image_native_set(void *engine, void *image, void 
*native)
     }
   if ((!ns) && (!im->native.data)) return im;
 
-  eng_window_use(eng_get_ob(re));
-
   if (im->native.data)
     {
        if (im->native.func.free)
@@ -2395,7 +2396,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
   if (ns->type == EVAS_NATIVE_SURFACE_X11)
     {
        pmid = pm;
-       im2 = 
eina_hash_find(eng_get_ob(re)->gl_context->shared->native_pm_hash, &pmid);
+       im2 = eina_hash_find(gl_context->shared->native_pm_hash, &pmid);
        if (im2 == im) return im;
        if (im2)
          {
@@ -2411,7 +2412,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
   else if (ns->type == EVAS_NATIVE_SURFACE_OPENGL)
     {
        texid = tex;
-       im2 = 
eina_hash_find(eng_get_ob(re)->gl_context->shared->native_tex_hash, &texid);
+       im2 = eina_hash_find(gl_context->shared->native_tex_hash, &texid);
        if (im2 == im) return im;
        if (im2)
          {
@@ -2426,7 +2427,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
     }
   else if (ns->type == EVAS_NATIVE_SURFACE_TBM)
     {
-       im2 = 
eina_hash_find(eng_get_ob(re)->gl_context->shared->native_tbm_hash, &buffer);
+       im2 = eina_hash_find(gl_context->shared->native_tbm_hash, &buffer);
        if (im2 == im) return im;
        if (im2)
          {
@@ -2441,7 +2442,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
     }
   else if (ns->type == EVAS_NATIVE_SURFACE_EVASGL)
     {
-       im2 = 
eina_hash_find(eng_get_ob(re)->gl_context->shared->native_evasgl_hash, &buffer);
+       im2 = eina_hash_find(gl_context->shared->native_evasgl_hash, &buffer);
        if (im2 == im) return im;
        if (im2)
          {
@@ -2459,7 +2460,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
 #ifdef GL_GLES
 # ifdef HAVE_WAYLAND
         wlid = wl_buf;
-        im2 = 
eina_hash_find(eng_get_ob(re)->gl_context->shared->native_wl_hash, &wlid);
+        im2 = eina_hash_find(gl_context->shared->native_wl_hash, &wlid);
         if (im2 == im) return im;
         if (im2)
           {
@@ -2473,7 +2474,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
 # endif
 #endif
      }
-  im2 = glsym_evas_gl_common_image_new_from_data(eng_get_ob(re)->gl_context,
+  im2 = glsym_evas_gl_common_image_new_from_data(gl_context,
                                                  im->w, im->h, NULL, im->alpha,
                                                  EVAS_COLORSPACE_ARGB8888);
   glsym_evas_gl_common_image_free(im);
@@ -2519,7 +2520,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                  config_attrs[i++] = EGL_PIXMAP_BIT;
                  config_attrs[i++] = EGL_NONE;
 
-                 if (!eglChooseConfig(eng_get_ob(re)->egl_disp, config_attrs,
+                 if (!eglChooseConfig(ob->egl_disp, config_attrs,
                                       &egl_config, 1, &num_config))
                    {
                       int err = eglGetError();
@@ -2533,7 +2534,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                    {
                       int val;
                       if (extn_have_y_inverted &&
-                          eglGetConfigAttrib(eng_get_ob(re)->egl_disp, 
egl_config,
+                          eglGetConfigAttrib(ob->egl_disp, egl_config,
                                              EGL_Y_INVERTED_NOK, &val))
                             yinvert = val;
                    }
@@ -2541,7 +2542,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                  memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
                  n->ns_data.x11.pixmap = pm;
                  n->ns_data.x11.visual = vis;
-                 n->ns_data.x11.surface = 
glsym_evas_gl_common_eglCreateImage(eng_get_ob(re)->egl_disp,
+                 n->ns_data.x11.surface = 
glsym_evas_gl_common_eglCreateImage(ob->egl_disp,
                                                           EGL_NO_CONTEXT,
                                                           
EGL_NATIVE_PIXMAP_KHR,
                                                           (void *)pm, NULL);
@@ -2561,15 +2562,15 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                  n->ns_data.x11.config = (void *)egl_config;
                  im->native.yinvert     = yinvert;
                  im->native.loose       = 0;
-                 im->native.disp        = eng_get_ob(re)->egl_disp;
-                 im->native.shared      = eng_get_ob(re)->gl_context->shared;
+                 im->native.disp        = ob->egl_disp;
+                 im->native.shared      = gl_context->shared;
                  im->native.data        = n;
                  im->native.func.bind   = _native_bind_cb;
                  im->native.func.unbind = _native_unbind_cb;
                  im->native.func.free   = _native_free_cb;
                  im->native.target      = GL_TEXTURE_2D;
                  im->native.mipmap      = 0;
-                 
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_pm_hash, &pmid, im);
+                 eina_hash_add(ob->gl_context->shared->native_pm_hash, &pmid, 
im);
                  glsym_evas_gl_common_image_native_enable(im);
              }
          }
@@ -2582,7 +2583,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
             Window wdummy;
 
             // fixme: round trip :(
-            XGetGeometry(eng_get_ob(re)->disp, pm, &wdummy, &dummy, &dummy,
+            XGetGeometry(ob->disp, pm, &wdummy, &dummy, &dummy,
                          &w, &h, &border, &depth);
             if (depth <= 32)
               {
@@ -2630,8 +2631,8 @@ eng_image_native_set(void *engine, void *image, void 
*native)
 
                       config_attrs[i++] = 0;
 
-                      configs = glXChooseFBConfig(eng_get_ob(re)->disp,
-                                                  eng_get_ob(re)->screen,
+                      configs = glXChooseFBConfig(ob->disp,
+                                                  ob->screen,
                                                   config_attrs,
                                                   &num);
                       if (configs)
@@ -2645,42 +2646,42 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                                   {
                                      XVisualInfo *vi;
 
-                                     vi = 
glXGetVisualFromFBConfig(eng_get_ob(re)->disp, configs[j]);
+                                     vi = glXGetVisualFromFBConfig(ob->disp, 
configs[j]);
                                      if (!vi) continue;
                                      if (vi->depth != (int)depth) continue;
                                      XFree(vi);
 
-                                     
glXGetFBConfigAttrib(eng_get_ob(re)->disp, configs[j],
+                                     glXGetFBConfigAttrib(ob->disp, configs[j],
                                                           GLX_BUFFER_SIZE, 
&val);
                                      if (val != (int) depth) continue;
                                   }
-                                glXGetFBConfigAttrib(eng_get_ob(re)->disp, 
configs[j],
+                                glXGetFBConfigAttrib(ob->disp, configs[j],
                                                      GLX_DRAWABLE_TYPE, &val);
                                 if (!(val & GLX_PIXMAP_BIT)) continue;
                                 tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
-                                glXGetFBConfigAttrib(eng_get_ob(re)->disp, 
configs[j],
+                                glXGetFBConfigAttrib(ob->disp, configs[j],
                                                      GLX_ALPHA_SIZE, &val);
                                 if ((depth == 32) && (!val)) continue;
                                 if (val > 0)
                                   {
-                                     
glXGetFBConfigAttrib(eng_get_ob(re)->disp, configs[j],
+                                     glXGetFBConfigAttrib(ob->disp, configs[j],
                                                           
GLX_BIND_TO_TEXTURE_RGBA_EXT, &val);
                                      if (val) tex_format = 
GLX_TEXTURE_FORMAT_RGBA_EXT;
                                   }
                                 else
                                   {
-                                     
glXGetFBConfigAttrib(eng_get_ob(re)->disp, configs[j],
+                                     glXGetFBConfigAttrib(ob->disp, configs[j],
                                                           
GLX_BIND_TO_TEXTURE_RGB_EXT, &val);
                                      if (val) tex_format = 
GLX_TEXTURE_FORMAT_RGB_EXT;
                                   }
-                                glXGetFBConfigAttrib(eng_get_ob(re)->disp, 
configs[j],
+                                glXGetFBConfigAttrib(ob->disp, configs[j],
                                                      GLX_Y_INVERTED_EXT, &val);
                                 if (val) yinvert = 1;
-                                glXGetFBConfigAttrib(eng_get_ob(re)->disp, 
configs[j],
+                                glXGetFBConfigAttrib(ob->disp, configs[j],
                                                      
GLX_BIND_TO_TEXTURE_TARGETS_EXT,
                                                      &val);
                                 tex_target = val;
-                                glXGetFBConfigAttrib(eng_get_ob(re)->disp, 
configs[j],
+                                glXGetFBConfigAttrib(ob->disp, configs[j],
                                                      
GLX_BIND_TO_MIPMAP_TEXTURE_EXT, &val);
                                 mipmap = val;
                                 n->ns_data.x11.config = configs[j];
@@ -2695,7 +2696,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                            XFree(configs);
                         }
 
-                      
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_pm_hash, &pmid, im);
+                      eina_hash_add(gl_context->shared->native_pm_hash, &pmid, 
im);
                       if ((tex_target & GLX_TEXTURE_2D_BIT_EXT))
                         target = GLX_TEXTURE_2D_EXT;
                       else if ((tex_target & GLX_TEXTURE_RECTANGLE_BIT_EXT))
@@ -2728,7 +2729,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                       n->ns_data.x11.pixmap = pm;
                       n->ns_data.x11.visual = vis;
                       if (glsym_glXCreatePixmap)
-                        n->ns_data.x11.surface = (void 
*)glsym_glXCreatePixmap(eng_get_ob(re)->disp,
+                        n->ns_data.x11.surface = (void 
*)glsym_glXCreatePixmap(ob->disp,
                                                                    
n->ns_data.x11.config,
                                                                    
n->ns_data.x11.pixmap,
                                                                    pixmap_att);
@@ -2742,7 +2743,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                              {
                                 ERR("no target :(");
                                 if (glsym_glXQueryDrawable)
-                                  glsym_glXQueryDrawable(eng_get_ob(re)->disp,
+                                  glsym_glXQueryDrawable(ob->disp,
                                                          n->ns_data.x11.pixmap,
                                                          
GLX_TEXTURE_TARGET_EXT,
                                                          &target);
@@ -2769,9 +2770,9 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                       else
                         ERR("GLX Pixmap create fail");
                       im->native.yinvert     = yinvert;
-                      im->native.loose       = 
eng_get_ob(re)->detected.loose_binding;
-                      im->native.disp        = eng_get_ob(re)->disp;
-                      im->native.shared      = 
eng_get_ob(re)->gl_context->shared;
+                      im->native.loose       = ob->detected.loose_binding;
+                      im->native.disp        = ob->disp;
+                      im->native.shared      = gl_context->shared;
                       im->native.data        = n;
                       im->native.func.bind   = _native_bind_cb;
                       im->native.func.unbind = _native_unbind_cb;
@@ -2793,18 +2794,18 @@ eng_image_native_set(void *engine, void *image, void 
*native)
               {
                  memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
 
-                 
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_tex_hash, &texid, im);
+                 eina_hash_add(gl_context->shared->native_tex_hash, &texid, 
im);
 
                  n->ns_data.opengl.surface = 0;
 
                  im->native.yinvert     = 0;
                  im->native.loose       = 0;
 #ifdef GL_GLES
-                 im->native.disp        = eng_get_ob(re)->egl_disp;
+                 im->native.disp        = ob->egl_disp;
 #else
-                 im->native.disp        = eng_get_ob(re)->disp;
+                 im->native.disp        = ob->disp;
 #endif
-                 im->native.shared      = eng_get_ob(re)->gl_context->shared;
+                 im->native.shared      = gl_context->shared;
                  im->native.data        = n;
                  im->native.func.bind   = _native_bind_cb;
                  im->native.func.unbind = _native_unbind_cb;
@@ -2827,13 +2828,13 @@ eng_image_native_set(void *engine, void *image, void 
*native)
             n = calloc(1, sizeof(Native));
             if (n)
               {
-                 
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_tbm_hash, &buffer, im);
+                 eina_hash_add(gl_context->shared->native_tbm_hash, &buffer, 
im);
 
                  memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
                  n->ns_data.tbm.buffer = buffer;
                  if (glsym_evas_gl_common_eglDestroyImage)
                    n->ns_data.tbm.surface =
-                     
glsym_evas_gl_common_eglCreateImage(eng_get_ob(re)->egl_disp,
+                     glsym_evas_gl_common_eglCreateImage(ob->egl_disp,
                                                          EGL_NO_CONTEXT,
                                                          
EGL_NATIVE_SURFACE_TIZEN,
                                                          (void *)buffer,
@@ -2844,8 +2845,8 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                    ERR("eglCreateImage() for %p failed", buffer);
                  im->native.yinvert     = 1;
                  im->native.loose       = 0;
-                 im->native.disp        = eng_get_ob(re)->egl_disp;
-                 im->native.shared      = eng_get_ob(re)->gl_context->shared;
+                 im->native.disp        = ob->egl_disp;
+                 im->native.shared      = gl_context->shared;
                  im->native.data        = n;
                  im->native.func.bind   = _native_bind_cb;
                  im->native.func.unbind = _native_unbind_cb;
@@ -2866,18 +2867,18 @@ eng_image_native_set(void *engine, void *image, void 
*native)
               {
                  memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
 
-                 
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_evasgl_hash, &buffer, 
im);
+                 eina_hash_add(gl_context->shared->native_evasgl_hash, 
&buffer, im);
 
                  n->ns_data.evasgl.surface = ns->data.evasgl.surface;
 
                  im->native.yinvert      = 0;
                  im->native.loose        = 0;
 #ifdef GL_GLES
-                 im->native.disp        = eng_get_ob(re)->egl_disp;
+                 im->native.disp        = ob->egl_disp;
 #else
-                 im->native.disp        = eng_get_ob(re)->disp;
+                 im->native.disp        = ob->disp;
 #endif
-                 im->native.shared      = eng_get_ob(re)->gl_context->shared;
+                 im->native.shared      = gl_context->shared;
                  im->native.data         = n;
                  im->native.func.bind    = _native_bind_cb;
                  im->native.func.unbind  = _native_unbind_cb;
@@ -2904,7 +2905,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                   EGLAttrib attribs[3];
                   int format, yinvert = 1;
 
-                  glsym_eglQueryWaylandBufferWL(eng_get_ob(re)->egl_disp, 
wl_buf,
+                  glsym_eglQueryWaylandBufferWL(ob->egl_disp, wl_buf,
                                                 EGL_TEXTURE_FORMAT, &format);
                   if ((format != EGL_TEXTURE_RGB) &&
                       (format != EGL_TEXTURE_RGBA))
@@ -2926,24 +2927,24 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                   attribs[2] = EGL_NONE;
 
                   memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
-                  if (glsym_eglQueryWaylandBufferWL(eng_get_ob(re)->egl_disp, 
wl_buf,
+                  if (glsym_eglQueryWaylandBufferWL(ob->egl_disp, wl_buf,
                                                     EGL_WAYLAND_Y_INVERTED_WL,
                                                     &yinvert) == EGL_FALSE)
                     yinvert = 1;
-                  
eina_hash_add(eng_get_ob(re)->gl_context->shared->native_wl_hash,
+                  eina_hash_add(gl_context->shared->native_wl_hash,
                                 &wlid, im);
 
                   n->ns_data.wl_surface.wl_buf = wl_buf;
                   if (glsym_evas_gl_common_eglDestroyImage)
                     n->ns_data.wl_surface.surface =
-                      
glsym_evas_gl_common_eglCreateImage(eng_get_ob(re)->egl_disp,
+                      glsym_evas_gl_common_eglCreateImage(ob->egl_disp,
                                                           NULL,
                                                           
EGL_WAYLAND_BUFFER_WL,
                                                           wl_buf, attribs);
                   else
                     {
                        ERR("Try eglCreateImage on EGL with no support");
-                       
eina_hash_del(eng_get_ob(re)->gl_context->shared->native_wl_hash,
+                       eina_hash_del(gl_context->shared->native_wl_hash,
                                      &wlid, im);
                        glsym_evas_gl_common_image_free(im);
                        free(n);
@@ -2953,7 +2954,7 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                   if (!n->ns_data.wl_surface.surface)
                     {
                        ERR("eglCreatePixmapSurface() for %p failed", wl_buf);
-                       
eina_hash_del(eng_get_ob(re)->gl_context->shared->native_wl_hash,
+                       eina_hash_del(gl_context->shared->native_wl_hash,
                                      &wlid, im);
                        glsym_evas_gl_common_image_free(im);
                        free(n);
@@ -2965,8 +2966,8 @@ eng_image_native_set(void *engine, void *image, void 
*native)
                   //im->native.yinvert = yinvert;
                   im->native.yinvert = 1;
                   im->native.loose = 0;
-                  im->native.disp        = eng_get_ob(re)->egl_disp;
-                  im->native.shared      = eng_get_ob(re)->gl_context->shared;
+                  im->native.disp        = ob->egl_disp;
+                  im->native.shared      = gl_context->shared;
                   im->native.data = n;
                   im->native.func.bind = _native_bind_cb;
                   im->native.func.unbind = _native_unbind_cb;

-- 


Reply via email to