raster pushed a commit to branch master.
commit d0f193392394763e4aaa4faefd89ad98dcc2f622
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date: Thu Apr 18 17:16:41 2013 +0900
clean up glx native surface (texture from pixmap code) to be more anal
about matching depth etc.
---
src/modules/evas/engines/gl_x11/evas_engine.c | 55 ++++++++++++++++-----------
1 file changed, 33 insertions(+), 22 deletions(-)
diff --git a/src/modules/evas/engines/gl_x11/evas_engine.c
b/src/modules/evas/engines/gl_x11/evas_engine.c
index b967897..1f32bb7 100644
--- a/src/modules/evas/engines/gl_x11/evas_engine.c
+++ b/src/modules/evas/engines/gl_x11/evas_engine.c
@@ -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);
}
--
------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter