winex11.drv: Spring cleanup in X11DRV_setup_opengl_visual, and added one new visual config (with aux buffers).
This commit is contained in:
parent
95efeb7e4b
commit
24eabb8a46
|
@ -3083,37 +3083,34 @@ BOOL X11DRV_SwapBuffers(X11DRV_PDEVICE *physDev)
|
||||||
XVisualInfo *X11DRV_setup_opengl_visual( Display *display )
|
XVisualInfo *X11DRV_setup_opengl_visual( Display *display )
|
||||||
{
|
{
|
||||||
XVisualInfo *visual = NULL;
|
XVisualInfo *visual = NULL;
|
||||||
/* In order to support OpenGL or D3D, we require a double-buffered visual and stencil buffer support, */
|
int i;
|
||||||
int dblBuf[] = {GLX_RGBA,GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, None};
|
|
||||||
if (!has_opengl()) return NULL;
|
/* In order to support OpenGL or D3D, we require a double-buffered visual and stencil buffer support,
|
||||||
|
* D3D and some applications can make use of aux buffers.
|
||||||
|
*/
|
||||||
|
int visualProperties[][11] = {
|
||||||
|
{ GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, GLX_AUX_BUFFERS, 1, None },
|
||||||
|
{ GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 24, GLX_STENCIL_SIZE, 8, GLX_ALPHA_SIZE, 8, None },
|
||||||
|
{ GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, GLX_STENCIL_SIZE, 8, None },
|
||||||
|
{ GLX_RGBA, GLX_DOUBLEBUFFER, GLX_DEPTH_SIZE, 16, None },
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!has_opengl())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
wine_tsx11_lock();
|
wine_tsx11_lock();
|
||||||
visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf);
|
for (i = 0; i < sizeof(visualProperties)/sizeof(visualProperties[0]); ++i) {
|
||||||
|
visual = pglXChooseVisual(display, DefaultScreen(display), visualProperties[i]);
|
||||||
|
if (visual)
|
||||||
|
break;
|
||||||
|
}
|
||||||
wine_tsx11_unlock();
|
wine_tsx11_unlock();
|
||||||
if (visual == NULL) {
|
|
||||||
/* fallback to 16 bits depth, no alpha */
|
|
||||||
int dblBuf2[] = {GLX_RGBA,GLX_DEPTH_SIZE, 16, GLX_STENCIL_SIZE, 8, GLX_DOUBLEBUFFER, None};
|
|
||||||
WARN("Failed to get a visual with at least 24 bits depth\n");
|
|
||||||
|
|
||||||
wine_tsx11_lock();
|
if (visual)
|
||||||
visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf2);
|
TRACE("Visual ID %lx Chosen\n", visual->visualid);
|
||||||
wine_tsx11_unlock();
|
else
|
||||||
if (visual == NULL) {
|
WARN("No suitable visual found\n");
|
||||||
/* fallback to no stencil */
|
|
||||||
int dblBuf2[] = {GLX_RGBA,GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, None};
|
|
||||||
WARN("Failed to get a visual with at least 8 bits of stencil\n");
|
|
||||||
|
|
||||||
wine_tsx11_lock();
|
|
||||||
visual = pglXChooseVisual(display, DefaultScreen(display), dblBuf2);
|
|
||||||
wine_tsx11_unlock();
|
|
||||||
if (visual == NULL) {
|
|
||||||
/* This should only happen if we cannot find a match with a depth size 16 */
|
|
||||||
FIXME("Failed to find a suitable visual\n");
|
|
||||||
return visual;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
TRACE("Visual ID %lx Chosen\n",visual->visualid);
|
|
||||||
return visual;
|
return visual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue