In choose_visual() we need to know if we're being called from

glXChooseVisual() or glXChooseFBConfig() so that we handle the
GLX_DOUBLEBUFFER and GLX_STEREO tokens correctly.
Added some new error checking in those functions too.
This commit is contained in:
Brian Paul 2005-01-06 21:56:16 +00:00
parent 8bb717d2d5
commit 1f98ee9022

View file

@ -2,7 +2,7 @@
* Mesa 3-D graphics library
* Version: 6.3
*
* Copyright (C) 1999-2004 Brian Paul All Rights Reserved.
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@ -903,9 +903,9 @@ choose_x_overlay_visual( Display *dpy, int scr, GLboolean rgbFlag,
static XMesaVisual
choose_visual( Display *dpy, int screen, const int *list,
GLboolean rgbModeDefault )
choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
{
const GLboolean rgbModeDefault = fbConfig;
const int *parselist;
XVisualInfo *vis;
int min_ci = 0;
@ -935,8 +935,14 @@ choose_visual( Display *dpy, int screen, const int *list,
switch (*parselist) {
case GLX_USE_GL:
/* ignore */
parselist++;
if (fbConfig) {
/* invalid token */
return NULL;
}
else {
/* skip */
parselist++;
}
break;
case GLX_BUFFER_SIZE:
parselist++;
@ -947,18 +953,34 @@ choose_visual( Display *dpy, int screen, const int *list,
level = *parselist++;
break;
case GLX_RGBA:
rgb_flag = GL_TRUE;
parselist++;
if (fbConfig) {
/* invalid token */
return NULL;
}
else {
rgb_flag = GL_TRUE;
parselist++;
}
break;
case GLX_DOUBLEBUFFER:
double_flag = GL_TRUE;
parselist++;
parselist++;
if (fbConfig) {
double_flag = *parselist++;
}
else {
double_flag = GL_TRUE;
}
break;
case GLX_STEREO:
stereo_flag = GL_TRUE;
return NULL;
parselist++;
if (fbConfig) {
stereo_flag = *parselist++;
}
else {
stereo_flag = GL_TRUE;
}
return NULL; /* stereo not supported */
case GLX_AUX_BUFFERS:
/* ignore */
parselist++;
numAux = *parselist++;
if (numAux > MAX_AUX_BUFFERS)
@ -1542,6 +1564,8 @@ get_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig )
ASSERT(xmvis);
switch(attrib) {
case GLX_USE_GL:
if (fbconfig)
return GLX_BAD_ATTRIBUTE;
*value = (int) True;
return 0;
case GLX_BUFFER_SIZE:
@ -1551,6 +1575,8 @@ get_config( XMesaVisual xmvis, int attrib, int *value, GLboolean fbconfig )
*value = xmvis->mesa_visual.level;
return 0;
case GLX_RGBA:
if (fbconfig)
return GLX_BAD_ATTRIBUTE;
if (xmvis->mesa_visual.rgbMode) {
*value = True;
}