clean up glx native surface (texture from pixmap code) to be more anal

about matching depth etc.
This commit is contained in:
Carsten Haitzler 2013-04-18 17:16:41 +09:00
parent 7cae29becd
commit d0f1933923
1 changed files with 33 additions and 22 deletions

View File

@ -2185,32 +2185,43 @@ eng_image_native_set(void *data, void *image, void *native)
{ {
int j = 0, val = 0; int j = 0, val = 0;
tex_format = GLX_TEXTURE_FORMAT_RGB_EXT; for (j = 0; j < num; j++)
glXGetFBConfigAttrib(re->win->disp, configs[j],
GLX_ALPHA_SIZE, &val);
if (val > 0)
{ {
glXGetFBConfigAttrib(re->win->disp, configs[j], glXGetFBConfigAttrib(re->win->disp, configs[j],
GLX_BIND_TO_TEXTURE_RGBA_EXT, &val); GLX_BUFFER_SIZE, &val);
if (val) tex_format = GLX_TEXTURE_FORMAT_RGBA_EXT; if (val != depth) continue;
}
else
{
glXGetFBConfigAttrib(re->win->disp, configs[j], glXGetFBConfigAttrib(re->win->disp, configs[j],
GLX_BIND_TO_TEXTURE_RGB_EXT, &val); GLX_DRAWABLE_TYPE, &val);
if (val) tex_format = GLX_TEXTURE_FORMAT_RGB_EXT; 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_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); XFree(configs);
} }