summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/x11
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/x11')
-rw-r--r--src/mesa/drivers/x11/fakeglx.c30
1 files changed, 27 insertions, 3 deletions
diff --git a/src/mesa/drivers/x11/fakeglx.c b/src/mesa/drivers/x11/fakeglx.c
index 3dd0f6c250..c3334e78fe 100644
--- a/src/mesa/drivers/x11/fakeglx.c
+++ b/src/mesa/drivers/x11/fakeglx.c
@@ -1,4 +1,4 @@
-/* $Id: fakeglx.c,v 1.9 1999/10/13 18:49:47 brianp Exp $ */
+/* $Id: fakeglx.c,v 1.10 1999/10/14 18:47:37 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -718,6 +718,7 @@ static XVisualInfo *choose_x_visual( Display *dpy, int screen,
* Return: pointer to an XVisualInfo or NULL.
*/
static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr,
+ GLboolean rgbFlag,
int level, int trans_type,
int trans_value,
int min_depth,
@@ -809,6 +810,16 @@ static XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr,
continue;
}
+ /* if RGB was requested, make sure we have True/DirectColor */
+ if (rgbFlag && vislist->CLASS != TrueColor
+ && vislist->CLASS != DirectColor)
+ continue;
+
+ /* if CI was requested, make sure we have a color indexed visual */
+ if (!rgbFlag
+ && (vislist->CLASS == TrueColor || vislist->CLASS == DirectColor))
+ continue;
+
if (deepvis==NULL || vislist->depth > deepest) {
/* YES! found a satisfactory visual */
if (deepvis) {
@@ -979,8 +990,21 @@ XVisualInfo *Fake_glXChooseVisual( Display *dpy, int screen, int *list )
}
else {
/* over/underlay planes */
- vis = choose_x_overlay_visual( dpy, screen, level, trans_type,
- trans_value, min_ci, visual_type );
+ if (rgb_flag) {
+ /* rgba overlay */
+ int min_rgb = min_red + min_green + min_blue;
+ if (min_rgb>1 && min_rgb<8) {
+ /* a special case to be sure we can get a monochrome visual */
+ min_rgb = 1;
+ }
+ vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level,
+ trans_type, trans_value, min_rgb, visual_type );
+ }
+ else {
+ /* color index overlay */
+ vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level,
+ trans_type, trans_value, min_ci, visual_type );
+ }
}
if (vis) {