Fix X11 + EGL + GLFW_TRANSPARENT_FRAMEBUFFER by ignoring visual id

(tested with example/gears.c)
This commit is contained in:
Sylvain 2023-02-14 23:46:51 +01:00
parent 8f470597d6
commit 91637f4578
No known key found for this signature in database
GPG Key ID: 5F87E02E5BC0939E

View File

@ -841,7 +841,13 @@ GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig,
XVisualInfo desired; XVisualInfo desired;
EGLConfig native; EGLConfig native;
EGLint visualID = 0, count = 0; EGLint visualID = 0, count = 0;
const long vimask = VisualScreenMask | VisualIDMask; long vimask;
if (fbconfig->transparent) {
vimask = VisualScreenMask;
} else {
vimask = VisualScreenMask | VisualIDMask;
}
if (!chooseEGLConfig(ctxconfig, fbconfig, &native)) if (!chooseEGLConfig(ctxconfig, fbconfig, &native))
return GLFW_FALSE; return GLFW_FALSE;
@ -860,6 +866,21 @@ GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig,
return GLFW_FALSE; return GLFW_FALSE;
} }
if (fbconfig->transparent) {
int i;
for (i = 0; i < count; i++) {
XVisualInfo *vinfo = &result[i];
if (vinfo->class == DirectColor || vinfo->class == TrueColor) {
if (vinfo->depth == 32) {
*visual = vinfo->visual;
*depth = vinfo->depth;
XFree(result);
return GLFW_TRUE;
}
}
}
}
*visual = result->visual; *visual = result->visual;
*depth = result->depth; *depth = result->depth;