Mercurial > sdl-ios-xcode
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: */