The dummy video driver compiles. :) SDL-1.3
authorSam Lantinga <slouken@libsdl.org>
Sun, 28 May 2006 21:56:07 +0000
branchSDL-1.3
changeset 1666 6e7ec5cb83c3
parent 1665 28193f833b2b
child 1667 1fddae038bc8
The dummy video driver compiles. :)
src/events/SDL_events.c
src/video/SDL_surface.c
src/video/SDL_sysvideo.h
src/video/SDL_video.c
src/video/dummy/SDL_nullvideo.c
test/testsprite.c
--- a/src/events/SDL_events.c	Sun May 28 18:18:30 2006 +0000
+++ b/src/events/SDL_events.c	Sun May 28 21:56:07 2006 +0000
@@ -219,7 +219,6 @@
     SDL_StopEventThread ();
 
     /* Shutdown event handlers */
-    SDL_AppActiveQuit ();
     SDL_KeyboardQuit ();
     SDL_MouseQuit ();
     SDL_QuitQuit ();
@@ -251,7 +250,6 @@
 
     /* Initialize event handlers */
     retcode = 0;
-    retcode += SDL_AppActiveInit ();
     retcode += SDL_KeyboardInit ();
     retcode += SDL_MouseInit ();
     retcode += SDL_QuitInit ();
--- a/src/video/SDL_surface.c	Sun May 28 18:18:30 2006 +0000
+++ b/src/video/SDL_surface.c	Sun May 28 21:56:07 2006 +0000
@@ -896,12 +896,7 @@
 void
 SDL_FreeSurface (SDL_Surface * surface)
 {
-    SDL_VideoDevice *_this = SDL_GetVideoDevice ();
-
-    /* Free anything that's not NULL, and not the screen surface */
-    if ((surface == NULL) ||
-        (_this &&
-         ((surface == SDL_ShadowSurface) || (surface == SDL_VideoSurface)))) {
+    if (surface == NULL) {
         return;
     }
     if (--surface->refcount > 0) {
--- a/src/video/SDL_sysvideo.h	Sun May 28 18:18:30 2006 +0000
+++ b/src/video/SDL_sysvideo.h	Sun May 28 21:56:07 2006 +0000
@@ -122,7 +122,7 @@
     void (*SetWindowGrab) (_THIS, SDL_Window * window);
     void (*DestroyWindow) (_THIS, SDL_Window * window);
 
-    SDL_Surface *(*CreateWindowSurface) (_THIS, SDL_Window * window);
+    void (*CreateWindowSurface) (_THIS, SDL_Window * window, Uint32 flags);
     void (*UpdateWindowSurface) (_THIS, SDL_Window * window, int numrects,
                                  SDL_Rect * rects);
     void (*FlipWindowSurface) (_THIS, SDL_Window * window);
--- a/src/video/SDL_video.c	Sun May 28 18:18:30 2006 +0000
+++ b/src/video/SDL_video.c	Sun May 28 21:56:07 2006 +0000
@@ -997,10 +997,8 @@
 SDL_CreateWindowSurface (SDL_WindowID windowID, Uint32 format, Uint32 flags)
 {
     SDL_Window *window = SDL_GetWindowFromID (windowID);
+    Uint32 black;
     SDL_Surface *surface;
-    SDL_Surface *shadow;
-    Uint32 surface_format;
-    Uint32 black;
 
     if (!window) {
         return NULL;
@@ -1011,54 +1009,50 @@
     }
 
     if (!window->surface) {
-        window->surface = _this->CreateWindowSurface (_this, window);
+        _this->CreateWindowSurface (_this, window, flags);
         if (!window->surface) {
             return NULL;
         }
+        window->surface->flags |= SDL_SCREEN_SURFACE;
     }
+    surface = window->surface;
 
     if (window->shadow) {
         SDL_FreeSurface (window->shadow);
         window->shadow = NULL;
     }
 
-    surface = window->surface;
-    surface_format =
-        SDL_MasksToPixelFormatEnum (surface->format->BitsPerPixel,
-                                    surface->format->Rmask,
-                                    surface->format->Gmask,
-                                    surface->format->Bmask,
-                                    surface->format->Amask);
-
     /* Create a shadow surface if necessary */
-    if ((!(flags & SDL_ANYFORMAT) && (surface_format != format)) ||
-        ((flags & SDL_HWPALETTE)
-         && !(window->surface->flags & SDL_HWPALETTE))) {
+    if ((!(flags & SDL_ANYFORMAT)
+         && (format != SDL_GetCurrentDisplayMode ()->format))
+        || ((flags & SDL_HWPALETTE)
+            && !(window->surface->flags & SDL_HWPALETTE))) {
         int bpp;
         Uint32 Rmask, Gmask, Bmask, Amask;
 
-        SDL_PixelFormatEnumToMasks (format, &bpp, &Rmask, &Gmask, &Bmask,
+        SDL_PixelFormatEnumToMasks (format, &bpp, &Amask, &Gmask, &Bmask,
                                     &Amask);
-        shadow =
-            SDL_CreateRGBSurface (SDL_SWSURFACE, surface->w, surface->h,
-                                  bpp, Rmask, Gmask, Bmask, Amask);
-        if (shadow == NULL) {
+        window->shadow =
+            SDL_CreateRGBSurface (SDL_SWSURFACE, surface->w, surface->h, bpp,
+                                  Rmask, Gmask, Bmask, Amask);
+        if (window->shadow == NULL) {
             return NULL;
         }
+        window->shadow->flags |= SDL_SHADOW_SURFACE;
+        surface = window->shadow;
 
         /* 8-bit shadow surfaces report that they have exclusive palette */
-        if (shadow->format->palette) {
-            shadow->flags |= SDL_HWPALETTE;
-            if (format == surface_format) {
-                SDL_memcpy (shadow->format->palette->colors,
-                            surface->format->palette->colors,
-                            surface->format->palette->ncolors *
+        if (surface->format->palette) {
+            surface->flags |= SDL_HWPALETTE;
+            if (format == SDL_GetCurrentDisplayMode ()->format) {
+                SDL_memcpy (surface->format->palette->colors,
+                            window->surface->format->palette->colors,
+                            window->surface->format->palette->ncolors *
                             sizeof (SDL_Color));
             } else {
-                SDL_DitherColors (shadow->format->palette->colors, bpp);
+                SDL_DitherColors (surface->format->palette->colors, bpp);
             }
         }
-        surface = window->shadow = shadow;
     }
 
     /* Clear the surface for display */
--- a/src/video/dummy/SDL_nullvideo.c	Sun May 28 18:18:30 2006 +0000
+++ b/src/video/dummy/SDL_nullvideo.c	Sun May 28 21:56:07 2006 +0000
@@ -51,7 +51,8 @@
 /* Initialization/Query functions */
 static int DUMMY_VideoInit (_THIS);
 static int DUMMY_SetDisplayMode (_THIS, const SDL_DisplayMode * mode);
-static SDL_Surface *DUMMY_CreateWindowSurface (_THIS, SDL_Window * window);
+static void DUMMY_CreateWindowSurface (_THIS, SDL_Window * window,
+                                       Uint32 flags);
 static void DUMMY_VideoQuit (_THIS);
 
 /* DUMMY driver bootstrap functions */
@@ -98,6 +99,7 @@
     /* Set the function pointers */
     device->VideoInit = DUMMY_VideoInit;
     device->SetDisplayMode = DUMMY_SetDisplayMode;
+    device->CreateWindowSurface = DUMMY_CreateWindowSurface;
     device->VideoQuit = DUMMY_VideoQuit;
     device->InitOSKeymap = DUMMY_InitOSKeymap;
     device->PumpEvents = DUMMY_PumpEvents;
@@ -128,93 +130,17 @@
     return 0;
 }
 
-static SDL_Surface *
-DUMMY_CreateWindowSurface (_THIS, SDL_Window * window)
+static void
+DUMMY_CreateWindowSurface (_THIS, SDL_Window * window, Uint32 flags)
 {
     int bpp;
     Uint32 Rmask, Gmask, Bmask, Amask;
 
-    if (_this->hidden->buffer) {
-        SDL_free (_this->hidden->buffer);
-    }
-
-    _this->hidden->buffer =
-        SDL_malloc (mode->w * mode->h * SDL_BYTESPERPIXEL (mode->format));
-    if (!_this->hidden->buffer) {
-        SDL_SetError ("Couldn't allocate buffer for requested mode");
-        return (NULL);
-    }
-
-/* 	printf("Setting mode %dx%d\n", width, height); */
-
-    SDL_memset (_this->hidden->buffer, 0,
-                mode->w * mode->h * SDL_BYTESPERPIXEL (mode->format));
-
-    /* Allocate the new pixel format for the screen */
-    SDL_PixelFormatEnumToMasks (mode->format, &bpp, &Rmask, &Gmask, &Bmask,
-                                &Amask);
-    if (!SDL_ReallocFormat (current, bpp, Rmask, Gmask, Bmask, Amask)) {
-        SDL_free (_this->hidden->buffer);
-        _this->hidden->buffer = NULL;
-        SDL_SetError
-            ("Couldn't allocate new pixel format for requested mode");
-        return (NULL);
-    }
-
-    /* Set up the new mode framebuffer */
-    current->flags = flags & SDL_FULLSCREEN;
-    _this->hidden->w = current->w = mode->w;
-    _this->hidden->h = current->h = mode->h;
-    current->pitch = current->w * SDL_BYTESPERPIXEL (mode->format);
-    current->pixels = _this->hidden->buffer;
-
-    /* We're done */
-    return (current);
-}
-
-SDL_Surface *
-DUMMY_SetVideoMode (_THIS, SDL_Surface * current,
-                    const SDL_DisplayMode * mode, Uint32 flags)
-{
-    int bpp;
-    Uint32 Rmask, Gmask, Bmask, Amask;
-
-    if (_this->hidden->buffer) {
-        SDL_free (_this->hidden->buffer);
-    }
-
-    _this->hidden->buffer =
-        SDL_malloc (mode->w * mode->h * SDL_BYTESPERPIXEL (mode->format));
-    if (!_this->hidden->buffer) {
-        SDL_SetError ("Couldn't allocate buffer for requested mode");
-        return (NULL);
-    }
-
-/* 	printf("Setting mode %dx%d\n", width, height); */
-
-    SDL_memset (_this->hidden->buffer, 0,
-                mode->w * mode->h * SDL_BYTESPERPIXEL (mode->format));
-
-    /* Allocate the new pixel format for the screen */
-    SDL_PixelFormatEnumToMasks (mode->format, &bpp, &Rmask, &Gmask, &Bmask,
-                                &Amask);
-    if (!SDL_ReallocFormat (current, bpp, Rmask, Gmask, Bmask, Amask)) {
-        SDL_free (_this->hidden->buffer);
-        _this->hidden->buffer = NULL;
-        SDL_SetError
-            ("Couldn't allocate new pixel format for requested mode");
-        return (NULL);
-    }
-
-    /* Set up the new mode framebuffer */
-    current->flags = flags & SDL_FULLSCREEN;
-    _this->hidden->w = current->w = mode->w;
-    _this->hidden->h = current->h = mode->h;
-    current->pitch = current->w * SDL_BYTESPERPIXEL (mode->format);
-    current->pixels = _this->hidden->buffer;
-
-    /* We're done */
-    return (current);
+    SDL_PixelFormatEnumToMasks (SDL_GetCurrentDisplayMode ()->format, &bpp,
+                                &Rmask, &Gmask, &Bmask, &Amask);
+    window->surface =
+        SDL_CreateRGBSurface (flags, window->w, window->h, bpp, Rmask, Gmask,
+                              Bmask, Amask);
 }
 
 /* Note:  If we are terminated, this could be called in the middle of
@@ -223,9 +149,6 @@
 void
 DUMMY_VideoQuit (_THIS)
 {
-    if (_this->hidden->buffer) {
-        SDL_free (_this->hidden->buffer);
-    }
 }
 
 /* vi: set ts=4 sw=4 expandtab: */
--- a/test/testsprite.c	Sun May 28 18:18:30 2006 +0000
+++ b/test/testsprite.c	Sun May 28 21:56:07 2006 +0000
@@ -156,7 +156,6 @@
 int
 main (int argc, char *argv[])
 {
-    SDL_DisplayMode mode;
     SDL_Surface *screen;
     Uint8 *mem;
     int width, height;
@@ -212,11 +211,7 @@
     }
 
     /* Set video mode */
-    mode.format = 0;            /* FIXME */
-    mode.w = width;
-    mode.h = height;
-    mode.refresh_rate = 0;
-    screen = SDL_SetDisplayMode (&mode, videoflags);
+    screen = SDL_SetVideoMode (width, height, video_bpp, videoflags);
     if (!screen) {
         fprintf (stderr, "Couldn't set %dx%d video mode: %s\n",
                  width, height, SDL_GetError ());