> i would suggest to you to re-submit an updated patch which which works
> with cvs and includes full description. Please  cc fabrice.

Thanks for the advice!

I'm sending an updated patch which works with 0.8.0 together with my old
description. Which cvs server should I use to get access to the source
from CVS? I don't cc Fabrice with this message as the code is untested
with cvs source.

regards Henrik

-8<---------------------------------------------------
Most X servers I have seen have color masks something like this (from
xdpyinfo):
red, green, blue masks: 0xf800, 0x7e0, 0x1f

However, Hummingbird eXceed which is an X server for Microsoft Windows
instead looks something like this:
red, green, blue masks: 0xff, 0xff00, 0xff0000

With such an X server connected to a Linux host qemu version 0.7.2 gives
strange colors on screen as the red and blue components of colors gets
mixed up. For example an MS Windows blue screen of death becomes a red
screen of death instead.

The SDL_SetVideoMode function call returns some information about how the
color masks are ordered in the returned struct, and that data could be
used to correctly render the colors by modifying files like console.c and
vga.c. However, I found it easier to only call SDL_SetVideoMode again to
find a bit depth which does not correspond to the actual bit depth of the
X server. Then SDL gives a surface which has the color masks in the right
order.

My simple patch looks like this:

-8<-----------------------------------------------------------------
--- sdl.c.org   2005-12-28 23:09:32.000000000 +0100
+++ sdl.c       2005-12-28 23:16:06.000000000 +0100
@@ -49,6 +49,8 @@
 static void sdl_resize(DisplayState *ds, int w, int h)
 {
     int flags;
+    int i=0;
+    int a[4]={0,32,16,0};
  
     //    printf("resizing to %d %d\n", w, h);
  
@@ -57,11 +59,16 @@
         flags |= SDL_FULLSCREEN;
  
  again:
-    screen = SDL_SetVideoMode(w, h, 0, flags);
-    if (!screen) {
-        fprintf(stderr, "Could not open SDL display\n");
-        exit(1);
-    }
+    do
+    {
+        screen = SDL_SetVideoMode(w, h, a[i], flags);
+        if (!screen) {
+            fprintf(stderr, "Could not open SDL display\n");
+            exit(1);
+       }
+    }while ( (screen->format->Rmask < screen->format->Bmask) && (++i <
4));
+    /* Trying to find a screen which won't produce wrong colors */
+
     if (!screen->pixels && (flags & SDL_HWSURFACE) && (flags &
SDL_FULLSCREEN)) {
         flags &= ~SDL_HWSURFACE;
         goto again;
-8<-----------------------------------------------------------------

-- 
NOTE: Dear Outlook users: Please remove me from your address books.
      Read this article and you know why:
      http://newsforge.com/article.pl?sid=03/08/21/143258


_______________________________________________
Qemu-devel mailing list
Qemu-devel@nongnu.org
http://lists.nongnu.org/mailman/listinfo/qemu-devel

Reply via email to