diff src/video/dummy/SDL_nullvideo.c @ 1662:782fd950bd46 SDL-1.3

Revamp of the video system in progress - adding support for multiple displays, multiple windows, and a full video mode selection API. WARNING: None of the video drivers have been updated for the new API yet! The API is still under design and very fluid. The code is now run through a consistent indent format: indent -i4 -nut -nsc -br -ce The headers are being converted to automatically generate doxygen documentation.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 28 May 2006 13:04:16 +0000
parents c439dad53df8
children 6e7ec5cb83c3
line wrap: on
line diff
--- a/src/video/dummy/SDL_nullvideo.c	Sun May 21 17:27:13 2006 +0000
+++ b/src/video/dummy/SDL_nullvideo.c	Sun May 28 13:04:16 2006 +0000
@@ -49,191 +49,183 @@
 #define DUMMYVID_DRIVER_NAME "dummy"
 
 /* Initialization/Query functions */
-static int DUMMY_VideoInit(_THIS, SDL_PixelFormat *vformat);
-static SDL_Rect **DUMMY_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags);
-static SDL_Surface *DUMMY_SetVideoMode(_THIS, SDL_Surface *current, int width, int height, int bpp, Uint32 flags);
-static int DUMMY_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors);
-static void DUMMY_VideoQuit(_THIS);
-
-/* Hardware surface functions */
-static int DUMMY_AllocHWSurface(_THIS, SDL_Surface *surface);
-static int DUMMY_LockHWSurface(_THIS, SDL_Surface *surface);
-static void DUMMY_UnlockHWSurface(_THIS, SDL_Surface *surface);
-static void DUMMY_FreeHWSurface(_THIS, SDL_Surface *surface);
-
-/* etc. */
-static void DUMMY_UpdateRects(_THIS, int numrects, SDL_Rect *rects);
+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_VideoQuit (_THIS);
 
 /* DUMMY driver bootstrap functions */
 
-static int DUMMY_Available(void)
+static int
+DUMMY_Available (void)
 {
-	const char *envr = SDL_getenv("SDL_VIDEODRIVER");
-	if ((envr) && (SDL_strcmp(envr, DUMMYVID_DRIVER_NAME) == 0)) {
-		return(1);
-	}
+    const char *envr = SDL_getenv ("SDL_VIDEODRIVER");
+    if ((envr) && (SDL_strcmp (envr, DUMMYVID_DRIVER_NAME) == 0)) {
+        return (1);
+    }
 
-	return(0);
+    return (0);
 }
 
-static void DUMMY_DeleteDevice(SDL_VideoDevice *device)
+static void
+DUMMY_DeleteDevice (SDL_VideoDevice * device)
 {
-	SDL_free(device->hidden);
-	SDL_free(device);
+    SDL_free (device->hidden);
+    SDL_free (device);
 }
 
-static SDL_VideoDevice *DUMMY_CreateDevice(int devindex)
+static SDL_VideoDevice *
+DUMMY_CreateDevice (int devindex)
 {
-	SDL_VideoDevice *device;
-
-	/* Initialize all variables that we clean on shutdown */
-	device = (SDL_VideoDevice *)SDL_malloc(sizeof(SDL_VideoDevice));
-	if ( device ) {
-		SDL_memset(device, 0, (sizeof *device));
-		device->hidden = (struct SDL_PrivateVideoData *)
-				SDL_malloc((sizeof *device->hidden));
-	}
-	if ( (device == NULL) || (device->hidden == NULL) ) {
-		SDL_OutOfMemory();
-		if ( device ) {
-			SDL_free(device);
-		}
-		return(0);
-	}
-	SDL_memset(device->hidden, 0, (sizeof *device->hidden));
+    SDL_VideoDevice *device;
 
-	/* Set the function pointers */
-	device->VideoInit = DUMMY_VideoInit;
-	device->ListModes = DUMMY_ListModes;
-	device->SetVideoMode = DUMMY_SetVideoMode;
-	device->CreateYUVOverlay = NULL;
-	device->SetColors = DUMMY_SetColors;
-	device->UpdateRects = DUMMY_UpdateRects;
-	device->VideoQuit = DUMMY_VideoQuit;
-	device->AllocHWSurface = DUMMY_AllocHWSurface;
-	device->CheckHWBlit = NULL;
-	device->FillHWRect = NULL;
-	device->SetHWColorKey = NULL;
-	device->SetHWAlpha = NULL;
-	device->LockHWSurface = DUMMY_LockHWSurface;
-	device->UnlockHWSurface = DUMMY_UnlockHWSurface;
-	device->FlipHWSurface = NULL;
-	device->FreeHWSurface = DUMMY_FreeHWSurface;
-	device->SetCaption = NULL;
-	device->SetIcon = NULL;
-	device->IconifyWindow = NULL;
-	device->GrabInput = NULL;
-	device->GetWMInfo = NULL;
-	device->InitOSKeymap = DUMMY_InitOSKeymap;
-	device->PumpEvents = DUMMY_PumpEvents;
+    /* Initialize all variables that we clean on shutdown */
+    device = (SDL_VideoDevice *) SDL_malloc (sizeof (SDL_VideoDevice));
+    if (device) {
+        SDL_memset (device, 0, (sizeof *device));
+        device->hidden = (struct SDL_PrivateVideoData *)
+            SDL_malloc ((sizeof *device->hidden));
+    }
+    if ((device == NULL) || (device->hidden == NULL)) {
+        SDL_OutOfMemory ();
+        if (device) {
+            SDL_free (device);
+        }
+        return (0);
+    }
+    SDL_memset (device->hidden, 0, (sizeof *device->hidden));
 
-	device->free = DUMMY_DeleteDevice;
+    /* Set the function pointers */
+    device->VideoInit = DUMMY_VideoInit;
+    device->SetDisplayMode = DUMMY_SetDisplayMode;
+    device->VideoQuit = DUMMY_VideoQuit;
+    device->InitOSKeymap = DUMMY_InitOSKeymap;
+    device->PumpEvents = DUMMY_PumpEvents;
 
-	return device;
+    device->free = DUMMY_DeleteDevice;
+
+    return device;
 }
 
 VideoBootStrap DUMMY_bootstrap = {
-	DUMMYVID_DRIVER_NAME, "SDL dummy video driver",
-	DUMMY_Available, DUMMY_CreateDevice
+    DUMMYVID_DRIVER_NAME, "SDL dummy video driver",
+    DUMMY_Available, DUMMY_CreateDevice
 };
 
 
-int DUMMY_VideoInit(_THIS, SDL_PixelFormat *vformat)
+int
+DUMMY_VideoInit (_THIS)
 {
-	/*
-	fprintf(stderr, "WARNING: You are using the SDL dummy video driver!\n");
-	*/
+    SDL_AddBasicVideoDisplay (NULL);
 
-	/* Determine the screen depth (use default 8-bit depth) */
-	/* we change this during the SDL_SetVideoMode implementation... */
-	vformat->BitsPerPixel = 8;
-	vformat->BytesPerPixel = 1;
+    /* We're done! */
+    return 0;
+}
 
-	/* We're done! */
-	return(0);
+static int
+DUMMY_SetDisplayMode (_THIS, const SDL_DisplayMode * mode)
+{
+    return 0;
 }
 
-SDL_Rect **DUMMY_ListModes(_THIS, SDL_PixelFormat *format, Uint32 flags)
-{
-   	 return (SDL_Rect **) -1;
-}
-
-SDL_Surface *DUMMY_SetVideoMode(_THIS, SDL_Surface *current,
-				int width, int height, int bpp, Uint32 flags)
+static SDL_Surface *
+DUMMY_CreateWindowSurface (_THIS, SDL_Window * window)
 {
-	if ( this->hidden->buffer ) {
-		SDL_free( this->hidden->buffer );
-	}
+    int bpp;
+    Uint32 Rmask, Gmask, Bmask, Amask;
+
+    if (_this->hidden->buffer) {
+        SDL_free (_this->hidden->buffer);
+    }
 
-	this->hidden->buffer = SDL_malloc(width * height * (bpp / 8));
-	if ( ! this->hidden->buffer ) {
-		SDL_SetError("Couldn't allocate buffer for requested mode");
-		return(NULL);
-	}
+    _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, width * height * (bpp / 8));
-
-	/* Allocate the new pixel format for the screen */
-	if ( ! SDL_ReallocFormat(current, bpp, 0, 0, 0, 0) ) {
-		SDL_free(this->hidden->buffer);
-		this->hidden->buffer = NULL;
-		SDL_SetError("Couldn't allocate new pixel format for requested mode");
-		return(NULL);
-	}
+    SDL_memset (_this->hidden->buffer, 0,
+                mode->w * mode->h * SDL_BYTESPERPIXEL (mode->format));
 
-	/* Set up the new mode framebuffer */
-	current->flags = flags & SDL_FULLSCREEN;
-	this->hidden->w = current->w = width;
-	this->hidden->h = current->h = height;
-	current->pitch = current->w * (bpp / 8);
-	current->pixels = this->hidden->buffer;
+    /* 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);
+    }
 
-	/* We're done */
-	return(current);
+    /* 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);
 }
 
-/* We don't actually allow hardware surfaces other than the main one */
-static int DUMMY_AllocHWSurface(_THIS, SDL_Surface *surface)
-{
-	return(-1);
-}
-static void DUMMY_FreeHWSurface(_THIS, SDL_Surface *surface)
-{
-	return;
-}
-
-/* We need to wait for vertical retrace on page flipped displays */
-static int DUMMY_LockHWSurface(_THIS, SDL_Surface *surface)
+SDL_Surface *
+DUMMY_SetVideoMode (_THIS, SDL_Surface * current,
+                    const SDL_DisplayMode * mode, Uint32 flags)
 {
-	return(0);
-}
+    int bpp;
+    Uint32 Rmask, Gmask, Bmask, Amask;
+
+    if (_this->hidden->buffer) {
+        SDL_free (_this->hidden->buffer);
+    }
 
-static void DUMMY_UnlockHWSurface(_THIS, SDL_Surface *surface)
-{
-	return;
-}
+    _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));
 
-static void DUMMY_UpdateRects(_THIS, int numrects, SDL_Rect *rects)
-{
-	/* do nothing. */
-}
+    /* 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);
+    }
 
-int DUMMY_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors)
-{
-	/* do nothing of note. */
-	return(1);
+    /* 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);
 }
 
 /* Note:  If we are terminated, this could be called in the middle of
    another SDL video routine -- notably UpdateRects.
 */
-void DUMMY_VideoQuit(_THIS)
+void
+DUMMY_VideoQuit (_THIS)
 {
-	if (this->screen->pixels != NULL)
-	{
-		SDL_free(this->screen->pixels);
-		this->screen->pixels = NULL;
-	}
+    if (_this->hidden->buffer) {
+        SDL_free (_this->hidden->buffer);
+    }
 }
+
+/* vi: set ts=4 sw=4 expandtab: */