clean up glx native surface (texture from pixmap code) to be more anal
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Thu, 18 Apr 2013 08:16:41 +0000 (17:16 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Thu, 18 Apr 2013 08:16:41 +0000 (17:16 +0900)
about matching depth etc.

src/modules/evas/engines/gl_x11/evas_engine.c

index b967897..1f32bb7 100644 (file)
@@ -2185,32 +2185,43 @@ eng_image_native_set(void *data, void *image, void *native)
                         {
                            int j = 0, val = 0;
                            
-                           tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
-                           glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                GLX_ALPHA_SIZE, &val);
-                           if (val > 0)
+                           for (j = 0; j < num; j++)
                              {
                                 glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                     GLX_BIND_TO_TEXTURE_RGBA_EXT, &val);
-                                if (val) tex_format = GLX_TEXTURE_FORMAT_RGBA_EXT;
-                             }
-                           else
-                             {
+                                                     GLX_BUFFER_SIZE, &val);
+                                if (val != depth) continue;
+                                glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                     GLX_DRAWABLE_TYPE, &val);
+                                if (!(val & GLX_PIXMAP_BIT)) continue;
+                                tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
+                                glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                     GLX_ALPHA_SIZE, &val);
+                                if ((depth == 32) && (!val)) continue;
+                                if (val > 0)
+                                  {
+                                     glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                          GLX_BIND_TO_TEXTURE_RGBA_EXT, &val);
+                                     if (val) tex_format = GLX_TEXTURE_FORMAT_RGBA_EXT;
+                                  }
+                                else
+                                  {
+                                     glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                          GLX_BIND_TO_TEXTURE_RGB_EXT, &val);
+                                     if (val) tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
+                                  }
+                                glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                     GLX_Y_INVERTED_EXT, &val);
+                                yinvert = val;
+                                glXGetFBConfigAttrib(re->win->disp, configs[j],
+                                                     GLX_BIND_TO_TEXTURE_TARGETS_EXT,
+                                                     &val);
+                                tex_target = val;
                                 glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                     GLX_BIND_TO_TEXTURE_RGB_EXT, &val);
-                                if (val) tex_format = GLX_TEXTURE_FORMAT_RGB_EXT;
+                                                     GLX_BIND_TO_MIPMAP_TEXTURE_EXT, &val);
+                                mipmap = val;
+                                n->fbc = configs[j];
+                                break;
                              }
-                           glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                GLX_Y_INVERTED_EXT, &val);
-                           yinvert = val;
-                           glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                GLX_BIND_TO_TEXTURE_TARGETS_EXT,
-                                                &val);
-                           tex_target = val;
-                           glXGetFBConfigAttrib(re->win->disp, configs[j],
-                                                GLX_BIND_TO_MIPMAP_TEXTURE_EXT, &val);
-                           mipmap = val;
-                           n->fbc = configs[j];
                            XFree(configs);
                         }