From a855d6202536ff28e5aae4f22a0f31d8f5b325d0 Mon Sep 17 00:00:00 2001 From: Franklin Wei Date: Sat, 21 Jan 2017 15:18:31 -0500 Subject: Port of Duke Nukem 3D This ports Fabien Sanglard's Chocolate Duke to run on a version of SDL for Rockbox. Change-Id: I8f2c4c78af19de10c1633ed7bb7a997b43256dd9 --- apps/plugins/sdl/src/video/dummy/SDL_nullevents.c | 45 ++++ .../plugins/sdl/src/video/dummy/SDL_nullevents_c.h | 33 +++ apps/plugins/sdl/src/video/dummy/SDL_nullmouse.c | 33 +++ apps/plugins/sdl/src/video/dummy/SDL_nullmouse_c.h | 26 +++ apps/plugins/sdl/src/video/dummy/SDL_nullvideo.c | 239 +++++++++++++++++++++ apps/plugins/sdl/src/video/dummy/SDL_nullvideo.h | 40 ++++ 6 files changed, 416 insertions(+) create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullevents.c create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullevents_c.h create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullmouse.c create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullmouse_c.h create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullvideo.c create mode 100644 apps/plugins/sdl/src/video/dummy/SDL_nullvideo.h (limited to 'apps/plugins/sdl/src/video/dummy') diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullevents.c b/apps/plugins/sdl/src/video/dummy/SDL_nullevents.c new file mode 100644 index 0000000000..177fc3f14c --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullevents.c @@ -0,0 +1,45 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +/* Being a null driver, there's no event stream. We just define stubs for + most of the API. */ + +#include "SDL.h" +#include "../../events/SDL_sysevents.h" +#include "../../events/SDL_events_c.h" + +#include "SDL_nullvideo.h" +#include "SDL_nullevents_c.h" + +void DUMMY_PumpEvents(_THIS) +{ + /* do nothing. */ +} + +void DUMMY_InitOSKeymap(_THIS) +{ + /* do nothing. */ +} + +/* end of SDL_nullevents.c ... */ + diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullevents_c.h b/apps/plugins/sdl/src/video/dummy/SDL_nullevents_c.h new file mode 100644 index 0000000000..3b657945e0 --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullevents_c.h @@ -0,0 +1,33 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include "SDL_nullvideo.h" + +/* Variables and functions exported by SDL_sysevents.c to other parts + of the native video subsystem (SDL_sysvideo.c) +*/ +extern void DUMMY_InitOSKeymap(_THIS); +extern void DUMMY_PumpEvents(_THIS); + +/* end of SDL_nullevents_c.h ... */ + diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullmouse.c b/apps/plugins/sdl/src/video/dummy/SDL_nullmouse.c new file mode 100644 index 0000000000..47daea8a27 --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullmouse.c @@ -0,0 +1,33 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include "SDL_mouse.h" +#include "../../events/SDL_events_c.h" + +#include "SDL_nullmouse_c.h" + + +/* The implementation dependent data for the window manager cursor */ +struct WMcursor { + int unused; +}; diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullmouse_c.h b/apps/plugins/sdl/src/video/dummy/SDL_nullmouse_c.h new file mode 100644 index 0000000000..479eb0e0bb --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullmouse_c.h @@ -0,0 +1,26 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#include "SDL_nullvideo.h" + +/* Functions to be exported */ diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.c b/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.c new file mode 100644 index 0000000000..7e096e2f7f --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.c @@ -0,0 +1,239 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +/* Dummy SDL video driver implementation; this is just enough to make an + * SDL-based application THINK it's got a working video driver, for + * applications that call SDL_Init(SDL_INIT_VIDEO) when they don't need it, + * and also for use as a collection of stubs when porting SDL to a new + * platform for which you haven't yet written a valid video driver. + * + * This is also a great way to determine bottlenecks: if you think that SDL + * is a performance problem for a given platform, enable this driver, and + * then see if your application runs faster without video overhead. + * + * Initial work by Ryan C. Gordon (icculus@icculus.org). A good portion + * of this was cut-and-pasted from Stephane Peter's work in the AAlib + * SDL video driver. Renamed to "DUMMY" by Sam Lantinga. + */ + +#include "SDL_video.h" +#include "SDL_mouse.h" +#include "../SDL_sysvideo.h" +#include "../SDL_pixels_c.h" +#include "../../events/SDL_events_c.h" + +#include "SDL_nullvideo.h" +#include "SDL_nullevents_c.h" +#include "SDL_nullmouse_c.h" + +#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); + +/* DUMMY driver bootstrap functions */ + +static int DUMMY_Available(void) +{ + const char *envr = SDL_getenv("SDL_VIDEODRIVER"); + if ((envr) && (SDL_strcmp(envr, DUMMYVID_DRIVER_NAME) == 0)) { + return(1); + } + + return(0); +} + +static void DUMMY_DeleteDevice(SDL_VideoDevice *device) +{ + SDL_free(device->hidden); + SDL_free(device); +} + +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)); + + /* 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; + + device->free = DUMMY_DeleteDevice; + + return device; +} + +VideoBootStrap DUMMY_bootstrap = { + DUMMYVID_DRIVER_NAME, "SDL dummy video driver", + DUMMY_Available, DUMMY_CreateDevice +}; + + +int DUMMY_VideoInit(_THIS, SDL_PixelFormat *vformat) +{ + /* + fprintf(stderr, "WARNING: You are using the SDL dummy video driver!\n"); + */ + + /* 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); +} + +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) +{ + 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); + } + +/* 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); + } + + /* 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; + + /* 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) +{ + return(0); +} + +static void DUMMY_UnlockHWSurface(_THIS, SDL_Surface *surface) +{ + return; +} + +static void DUMMY_UpdateRects(_THIS, int numrects, SDL_Rect *rects) +{ + /* do nothing. */ +} + +int DUMMY_SetColors(_THIS, int firstcolor, int ncolors, SDL_Color *colors) +{ + /* do nothing of note. */ + return(1); +} + +/* Note: If we are terminated, this could be called in the middle of + another SDL video routine -- notably UpdateRects. +*/ +void DUMMY_VideoQuit(_THIS) +{ + if (this->screen->pixels != NULL) + { + SDL_free(this->screen->pixels); + this->screen->pixels = NULL; + } +} diff --git a/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.h b/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.h new file mode 100644 index 0000000000..05c19e3441 --- /dev/null +++ b/apps/plugins/sdl/src/video/dummy/SDL_nullvideo.h @@ -0,0 +1,40 @@ +/* + SDL - Simple DirectMedia Layer + Copyright (C) 1997-2012 Sam Lantinga + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Sam Lantinga + slouken@libsdl.org +*/ +#include "SDL_config.h" + +#ifndef _SDL_nullvideo_h +#define _SDL_nullvideo_h + +#include "../SDL_sysvideo.h" + +/* Hidden "this" pointer for the video functions */ +#define _THIS SDL_VideoDevice *this + + +/* Private display data */ + +struct SDL_PrivateVideoData { + int w, h; + void *buffer; +}; + +#endif /* _SDL_nullvideo_h */ -- cgit v1.2.3