src/video/x11/SDL_x11modes.c
changeset 4590 1ad70fb49fcb
parent 3697 f7b03b6838cb
child 4591 1e998db9b597
--- a/src/video/x11/SDL_x11modes.c	Thu Jul 01 07:35:15 2010 +0530
+++ b/src/video/x11/SDL_x11modes.c	Fri Jul 09 21:36:41 2010 +0530
@@ -23,7 +23,7 @@
 
 #include "SDL_x11video.h"
 
-//#define X11MODES_DEBUG
+#define X11MODES_DEBUG
 #undef SDL_VIDEO_DRIVER_X11_XINERAMA
 #undef SDL_VIDEO_DRIVER_X11_XRANDR
 #undef SDL_VIDEO_DRIVER_X11_VIDMODE
@@ -33,11 +33,12 @@
 {
     const char *visual_id = SDL_getenv("SDL_VIDEO_X11_VISUALID");
     int depth;
+    XVisualInfo *vi;
+    int nvis;
 
     /* Look for an exact visual, if requested */
     if (visual_id) {
-        XVisualInfo *vi, template;
-        int nvis;
+        XVisualInfo template;
 
         SDL_zero(template);
         template.visualid = SDL_strtol(visual_id, NULL, 0);
@@ -48,7 +49,22 @@
             return 0;
         }
     }
-
+#ifdef SDL_VIDEO_DRIVER_X11_XRENDER
+    depth = 32;
+    long vinfo_mask;
+    XVisualInfo vinfo_templ;
+    vinfo_mask = (VisualDepthMask | VisualRedMaskMask | VisualGreenMaskMask | VisualBlueMaskMask);
+    vinfo_templ.depth = 32;
+    vinfo_templ.red_mask = 0xFF0000;
+    vinfo_templ.green_mask = 0xFF00;
+    vinfo_templ.blue_mask = 0xFF;
+    vi = XGetVisualInfo(display, vinfo_mask, &vinfo_templ, &nvis);
+    if(vi) {
+        *vinfo = *vi;
+        XFree(vi);
+        return 0;
+    }
+#endif
     depth = DefaultDepth(display, screen);
     if ((X11_UseDirectColorVisuals() &&
          XMatchVisualInfo(display, screen, depth, DirectColor, vinfo)) ||