Instead of hardcoding yinvert=1 we should query for
EGL_NOK_texture_from_pixmap extension and if it's present
use EGL_Y_INVERTED_NOK value
---
 src/modules/evas/engines/gl_x11/evas_engine.c |   20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c 
b/src/modules/evas/engines/gl_x11/evas_engine.c
index d25610f..4e5c22c 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -71,6 +71,7 @@ struct _Render_Engine
 static int initted = 0;
 static int gl_wins = 0;
 static int extn_have_buffer_age = 1;
+static int extn_have_y_inverted = 0;
 
 typedef void            (*_eng_fn) (void);
 typedef _eng_fn         (*glsym_func_eng_fn) ();
@@ -90,6 +91,9 @@ static Eina_Bool eng_preload_make_current(void *data, void 
*doit);
 #ifndef EGL_BUFFER_AGE_EXT
 # define EGL_BUFFER_AGE_EXT 0x313d
 #endif
+#ifndef EGL_Y_INVERTED_NOK
+# define EGL_Y_INVERTED_NOK 0x307F
+#endif
 
 _eng_fn  (*glsym_eglGetProcAddress)            (const char *a) = NULL;
 void    *(*glsym_eglCreateImage)               (EGLDisplay a, EGLContext b, 
EGLenum c, EGLClientBuffer d, const int *e) = NULL;
@@ -711,6 +715,10 @@ gl_extn_veto(Render_Engine *re)
           {
              extn_have_buffer_age = 0;
           }
+        if (strstr(str, "EGL_NOK_texture_from_pixmap"))
+          {
+             extn_have_y_inverted = 1;
+          }
      }
    else
      {
@@ -2225,6 +2233,7 @@ eng_image_native_set(void *data, void *image, void 
*native)
               EGLConfig egl_config;
               int config_attrs[20];
               int num_config, i = 0;
+              int yinvert = 1;
 
               eina_hash_add(re->win->gl_context->shared->native_pm_hash, 
&pmid, im);
 
@@ -2250,6 +2259,15 @@ eng_image_native_set(void *data, void *image, void 
*native)
               if (!eglChooseConfig(re->win->egl_disp, config_attrs,
                                    &egl_config, 1, &num_config))
                 ERR("eglChooseConfig() failed for pixmap 0x%x, num_config = 
%i", (unsigned int)pm, num_config);
+              else
+                {
+                  int val;
+                  if (extn_have_y_inverted &&
+                      eglGetConfigAttrib(re->win->egl_disp, egl_config,
+                                         EGL_Y_INVERTED_NOK, &val))
+                        yinvert = val;
+                }
+
               memcpy(&(n->ns), ns, sizeof(Evas_Native_Surface));
               n->pixmap = pm;
               n->visual = vis;
@@ -2263,7 +2281,7 @@ eng_image_native_set(void *data, void *image, void 
*native)
                 ERR("Try eglCreateImage on EGL with no support");
               if (!n->egl_surface)
                 ERR("eglCreatePixmapSurface() for 0x%x failed", (unsigned 
int)pm);
-              im->native.yinvert     = 1;
+              im->native.yinvert     = yinvert;
               im->native.loose       = 0;
               im->native.data        = n;
               im->native.func.data   = re;
-- 
1.7.9.5


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349351&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to