Framebuffer support in progress.
authorNathan Heisey <nathanheisey@gmail.com>
Wed, 20 Jul 2011 19:25:38 +0000
changeset 59214cec9ba57dfb
parent 5920 6a9a009f9a5c
child 5922 efd1498efdff
Framebuffer support in progress.
src/video/bwindow/SDL_BWin.h
src/video/bwindow/SDL_bevents.cc
src/video/bwindow/SDL_bevents.h
src/video/bwindow/SDL_bmodes.cc
src/video/bwindow/SDL_bmodes.h
src/video/bwindow/SDL_bvideo.cc
src/video/bwindow/SDL_bvideo.h
src/video/bwindow/SDL_bwindow.cc
     1.1 --- a/src/video/bwindow/SDL_BWin.h	Thu Jul 14 17:58:47 2011 +0000
     1.2 +++ b/src/video/bwindow/SDL_BWin.h	Wed Jul 20 19:25:38 2011 +0000
     1.3 @@ -66,17 +66,16 @@
     1.4                                           B_TITLED_WINDOW, 0)
     1.5      {
     1.6          last_buttons = 0;
     1.7 -
     1.8 +printf("SDL_BWin.h: 69\n");
     1.9          the_view = NULL;
    1.10  #if SDL_VIDEO_OPENGL
    1.11          SDL_GLView = NULL;
    1.12  #endif
    1.13          SDL_View = NULL;
    1.14 -        Unlock();
    1.15          _shown = false;
    1.16          inhibit_resize = false;
    1.17          mouse_focused = false;
    1.18 -        prev_frame = NULL;
    1.19 +        prev_frame = NULL; printf("SDL_BWin.h: 79\n");
    1.20      }
    1.21  
    1.22      virtual ~ SDL_BWin()
    1.23 @@ -151,6 +150,12 @@
    1.24          return (retval);
    1.25      }
    1.26      
    1.27 +    
    1.28 +    /* * * * * Framebuffering* * * * */
    1.29 +    virtual void DirectConnected(direct_buffer_info *info) {
    1.30 +    }
    1.31 +    
    1.32 +    
    1.33      /* * * * * Event sending * * * * */
    1.34      /* Hook functions */
    1.35      virtual void FrameMoved(BPoint origin) {
    1.36 @@ -460,13 +465,16 @@
    1.37      	
    1.38      	/* Add any mouse button events */
    1.39      	if(buttonStateChange & B_PRIMARY_MOUSE_BUTTON) {
    1.40 -    		_SendMouseButton(SDL_BUTTON_LEFT, buttons & B_PRIMARY_MOUSE_BUTTON);
    1.41 +    		_SendMouseButton(SDL_BUTTON_LEFT, buttons &
    1.42 +    			B_PRIMARY_MOUSE_BUTTON);
    1.43      	}
    1.44      	if(buttonStateChange & B_SECONDARY_MOUSE_BUTTON) {
    1.45 -    		_SendMouseButton(SDL_BUTTON_RIGHT, buttons & B_PRIMARY_MOUSE_BUTTON);
    1.46 +    		_SendMouseButton(SDL_BUTTON_RIGHT, buttons &
    1.47 +    			B_PRIMARY_MOUSE_BUTTON);
    1.48      	}
    1.49      	if(buttonStateChange & B_TERTIARY_MOUSE_BUTTON) {
    1.50 -    		_SendMouseButton(SDL_BUTTON_MIDDLE, buttons & B_PRIMARY_MOUSE_BUTTON);
    1.51 +    		_SendMouseButton(SDL_BUTTON_MIDDLE, buttons &
    1.52 +    			B_PRIMARY_MOUSE_BUTTON);
    1.53      	}
    1.54      	
    1.55      	last_buttons = buttons;
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/src/video/bwindow/SDL_bevents.cc	Wed Jul 20 19:25:38 2011 +0000
     2.3 @@ -0,0 +1,33 @@
     2.4 +/*
     2.5 +  Simple DirectMedia Layer
     2.6 +  Copyright (C) 1997-2011 Sam Lantinga <slouken@libsdl.org>
     2.7 +
     2.8 +  This software is provided 'as-is', without any express or implied
     2.9 +  warranty.  In no event will the authors be held liable for any damages
    2.10 +  arising from the use of this software.
    2.11 +
    2.12 +  Permission is granted to anyone to use this software for any purpose,
    2.13 +  including commercial applications, and to alter it and redistribute it
    2.14 +  freely, subject to the following restrictions:
    2.15 +
    2.16 +  1. The origin of this software must not be misrepresented; you must not
    2.17 +     claim that you wrote the original software. If you use this software
    2.18 +     in a product, an acknowledgment in the product documentation would be
    2.19 +     appreciated but is not required.
    2.20 +  2. Altered source versions must be plainly marked as such, and must not be
    2.21 +     misrepresented as being the original software.
    2.22 +  3. This notice may not be removed or altered from any source distribution.
    2.23 +*/
    2.24 +
    2.25 +#include "SDL_bevents.h"
    2.26 +
    2.27 +#ifdef __cplusplus
    2.28 +extern "C" {
    2.29 +#endif
    2.30 +
    2.31 +void BE_PumpEvents(_THIS) {
    2.32 +}
    2.33 +
    2.34 +#ifdef __cplusplus
    2.35 +}
    2.36 +#endif
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/src/video/bwindow/SDL_bevents.h	Wed Jul 20 19:25:38 2011 +0000
     3.3 @@ -0,0 +1,37 @@
     3.4 +/*
     3.5 +  Simple DirectMedia Layer
     3.6 +  Copyright (C) 1997-2011 Sam Lantinga <slouken@libsdl.org>
     3.7 +
     3.8 +  This software is provided 'as-is', without any express or implied
     3.9 +  warranty.  In no event will the authors be held liable for any damages
    3.10 +  arising from the use of this software.
    3.11 +
    3.12 +  Permission is granted to anyone to use this software for any purpose,
    3.13 +  including commercial applications, and to alter it and redistribute it
    3.14 +  freely, subject to the following restrictions:
    3.15 +
    3.16 +  1. The origin of this software must not be misrepresented; you must not
    3.17 +     claim that you wrote the original software. If you use this software
    3.18 +     in a product, an acknowledgment in the product documentation would be
    3.19 +     appreciated but is not required.
    3.20 +  2. Altered source versions must be plainly marked as such, and must not be
    3.21 +     misrepresented as being the original software.
    3.22 +  3. This notice may not be removed or altered from any source distribution.
    3.23 +*/	
    3.24 +
    3.25 +#ifndef SDL_BEVENTS_H
    3.26 +#define SDL_BEVENTS_H
    3.27 +
    3.28 +#include "../SDL_sysvideo.h"
    3.29 +
    3.30 +#ifdef __cplusplus
    3.31 +extern "C" {
    3.32 +#endif
    3.33 +
    3.34 +extern void BE_PumpEvents(_THIS);
    3.35 +
    3.36 +#ifdef __cplusplus
    3.37 +}
    3.38 +#endif
    3.39 +
    3.40 +#endif
     4.1 --- a/src/video/bwindow/SDL_bmodes.cc	Thu Jul 14 17:58:47 2011 +0000
     4.2 +++ b/src/video/bwindow/SDL_bmodes.cc	Wed Jul 20 19:25:38 2011 +0000
     4.3 @@ -19,60 +19,186 @@
     4.4    3. This notice may not be removed or altered from any source distribution.
     4.5  */
     4.6  
     4.7 -#include "../SDL_sysvideo.h"
     4.8 +
     4.9 +
    4.10 +#include <AppKit.h>
    4.11 +#include <InterfaceKit.h>
    4.12 +#include "SDL_bmodes.h"
    4.13 +
    4.14 +#include "../../main/beos/SDL_BApp.h"
    4.15 +
    4.16 +#ifdef __cplusplus
    4.17 +extern "C" {
    4.18 +#endif
    4.19 +
    4.20 +
    4.21 +static inline SDL_BApp *_GetBeApp() {
    4.22 +	return ((SDL_BApp*)be_app);
    4.23 +}
    4.24 +
    4.25 +
    4.26 +/* Copied from haiku/trunk/src/preferences/screen/ScreenMode.cpp */
    4.27 +static float get_refresh_rate(display_mode &mode) {
    4.28 +	return rint(10 * float(mode.timing.pixel_clock * 1000)
    4.29 +		/ float(mode.timing.h_total * mode.timing.v_total)) / 10.0;
    4.30 +}
    4.31 +
    4.32 +static inline int ColorSpaceToBitsPerPixel(uint32 colorspace)
    4.33 +{
    4.34 +	int bitsperpixel;
    4.35 +
    4.36 +	bitsperpixel = 0;
    4.37 +	switch (colorspace) {
    4.38 +	    case B_CMAP8:
    4.39 +		bitsperpixel = 8;
    4.40 +		break;
    4.41 +	    case B_RGB15:
    4.42 +	    case B_RGBA15:
    4.43 +	    case B_RGB15_BIG:
    4.44 +	    case B_RGBA15_BIG:
    4.45 +		bitsperpixel = 15;
    4.46 +		break;
    4.47 +	    case B_RGB16:
    4.48 +	    case B_RGB16_BIG:
    4.49 +		bitsperpixel = 16;
    4.50 +		break;
    4.51 +	    case B_RGB32:
    4.52 +	    case B_RGBA32:
    4.53 +	    case B_RGB32_BIG:
    4.54 +	    case B_RGBA32_BIG:
    4.55 +		bitsperpixel = 32;
    4.56 +		break;
    4.57 +	    default:
    4.58 +		break;
    4.59 +	}
    4.60 +	return(bitsperpixel);
    4.61 +}
    4.62 +
    4.63 +static inline int32 BppToSDLPxFormat(int32 bpp) {
    4.64 +	/* Translation taken from SDL_windowsmodes.c */
    4.65 +	switch (bpp) {
    4.66 +	case 32:
    4.67 +		return SDL_PIXELFORMAT_RGB888;
    4.68 +		break;
    4.69 +	case 24:	/* May not be supported by Haiku */
    4.70 +		return SDL_PIXELFORMAT_RGB24;
    4.71 +		break;
    4.72 +	case 16:
    4.73 +		return SDL_PIXELFORMAT_RGB565;
    4.74 +		break;
    4.75 +	case 15:
    4.76 +		return SDL_PIXELFORMAT_RGB555;
    4.77 +		break;
    4.78 +	case 8:
    4.79 +		return SDL_PIXELFORMAT_INDEX8;
    4.80 +		break;
    4.81 +	case 4:		/* May not be supported by Haiku */
    4.82 +		return SDL_PIXELFORMAT_INDEX4LSB;
    4.83 +		break;
    4.84 +	}
    4.85 +}
    4.86 +
    4.87 +static inline void BE_BDisplayModeToSdlDisplayMode(display_mode *bmode,
    4.88 +		SDL_DisplayMode *mode) {
    4.89 +	mode->w = bmode->virtual_width;
    4.90 +	mode->h = bmode->virtual_height;
    4.91 +	mode->refresh_rate = (int)get_refresh_rate(*bmode);
    4.92 +	mode->driverdata = bmode;	/* This makes setting display
    4.93 +									   modes easier */
    4.94 +
    4.95 +	/* Set the format */
    4.96 +	int32 bpp = ColorSpaceToBitsPerPixel(bmode->space);
    4.97 +	mode->format = BppToSDLPxFormat(bpp);
    4.98 +}
    4.99 +
   4.100 +/* Later, there may be more than one monitor available */
   4.101 +void BE_AddDisplay(BScreen *screen) {
   4.102 +	SDL_VideoDisplay display;
   4.103 +	SDL_DisplayMode mode;
   4.104 +	display_mode bmode;
   4.105 +	screen->GetMode(&bmode);
   4.106 +
   4.107 +	BE_BDisplayModeToSdlDisplayMode(&bmode, &mode);
   4.108 +	
   4.109 +	SDL_zero(display);
   4.110 +	display.desktop_mode = mode;
   4.111 +	display.current_mode = mode;
   4.112 +	SDL_AddVideoDisplay(&display);
   4.113 +}
   4.114  
   4.115  int BE_InitModes(_THIS) {
   4.116 -#if 0
   4.117 -	display_mode *modes;
   4.118 -	uint32 i, nmodes;
   4.119 -	int bpp;
   4.120 +	printf("Init Modes\n");
   4.121 +	BScreen screen;
   4.122 +	
   4.123 +	/* Save the current display mode */
   4.124 +	display_mode *prevMode;
   4.125 +	screen.GetMode(prevMode);
   4.126 +	_GetBeApp()->SetPrevMode(prevMode);
   4.127  
   4.128 -	/* It is important that this be created after SDL_InitBeApp() */
   4.129 -	BScreen bscreen;
   4.130 -
   4.131 -	/* Save the current display mode */
   4.132 -	bscreen.GetMode(&saved_mode);
   4.133 -	_this->info.current_w = saved_mode.virtual_width;
   4.134 -	_this->info.current_h = saved_mode.virtual_height;
   4.135 -        
   4.136 -	/* Get the video modes we can switch to in fullscreen mode */
   4.137 -	bscreen.GetModeList(&modes, &nmodes);
   4.138 -	SDL_qsort(modes, nmodes, sizeof *modes, CompareModes);
   4.139 -	for (i = 0; i < nmodes; ++i) {
   4.140 -		bpp = ColorSpaceToBitsPerPixel(modes[i].space);
   4.141 -		//if ( bpp != 0 ) { // There are bugs in changing colorspace
   4.142 -		if (modes[i].space == saved_mode.space) {
   4.143 -			BE_AddMode(_this, ((bpp + 7) / 8) - 1,
   4.144 -				modes[i].virtual_width, modes[i].virtual_height);
   4.145 -		}
   4.146 -	}
   4.147 -#else
   4.148 -return -1;
   4.149 -#endif
   4.150 +	/* Only one possible video display right now */
   4.151 +	BE_AddDisplay(&screen);
   4.152  }
   4.153  
   4.154  int BE_QuitModes(_THIS) {
   4.155 -#if 0
   4.156 -    int i, j;
   4.157 -	for (i = 0; i < NUM_MODELISTS; ++i) {
   4.158 -		if (SDL_modelist[i]) {
   4.159 -			for (j = 0; SDL_modelist[i][j]; ++j) {
   4.160 -				SDL_free(SDL_modelist[i][j]);
   4.161 -			}
   4.162 -			SDL_free(SDL_modelist[i]);
   4.163 -			SDL_modelist[i] = NULL;
   4.164 +	/* Restore the previous video mode */
   4.165 +	printf("Quit Modes\n");
   4.166 +	
   4.167 +	BScreen screen;
   4.168 +	display_mode *savedMode = _GetBeApp()->GetPrevMode();
   4.169 +	screen.SetMode(savedMode);
   4.170 +	return 0;
   4.171 +}
   4.172 +
   4.173 +
   4.174 +int BE_GetDisplayBounds(_THIS, SDL_VideoDisplay *display, SDL_Rect *rect) {
   4.175 +	BScreen bscreen;
   4.176 +	BRect rc = bscreen.Frame();
   4.177 +	rect->x = (int)rc.left;
   4.178 +	rect->y = (int)rc.top;
   4.179 +	rect->w = (int)rc.Width() + 1;
   4.180 +	rect->h = (int)rc.Height() + 1;
   4.181 +	return 0;
   4.182 +}
   4.183 +
   4.184 +void BE_GetDisplayModes(_THIS, SDL_VideoDisplay *display) {
   4.185 +	printf("Get Display Modes\n");
   4.186 +	/* Get the current screen */
   4.187 +	BScreen bscreen;
   4.188 +	
   4.189 +	/* Iterate through all of the modes */
   4.190 +	SDL_DisplayMode mode;
   4.191 +	display_mode this_bmode;
   4.192 +	display_mode *bmodes;
   4.193 +	uint32 count, i;
   4.194 +	
   4.195 +	/* Get graphics-hardware supported modes */
   4.196 +	bscreen.GetModeList(&bmodes, &count);
   4.197 +	bscreen.GetMode(&this_bmode);
   4.198 +	
   4.199 +	for(i = 0; i < count; ++i) {
   4.200 +		//FIXME: Apparently there are errors with colorspace changes
   4.201 +		if (bmodes[i].space == this_bmode.space) {
   4.202 +			BE_BDisplayModeToSdlDisplayMode(&bmodes[i], &mode);
   4.203 +			SDL_AddDisplayMode(display, &mode);
   4.204  		}
   4.205  	}
   4.206 +	free(bmodes);
   4.207 +}
   4.208  
   4.209 -	/* Restore the original video mode */
   4.210 -	if (_this->screen) {
   4.211 -		if ((_this->screen->flags & SDL_FULLSCREEN) == SDL_FULLSCREEN) {
   4.212 -			BScreen bscreen;
   4.213 -			bscreen.SetMode(&saved_mode);
   4.214 -		}
   4.215 -		_this->screen->pixels = NULL;
   4.216 +int BE_SetDisplayMode(_THIS, SDL_VideoDisplay *display, SDL_DisplayMode *mode){
   4.217 +	printf("Set Display Modes\n");
   4.218 +	/* Get the current screen */
   4.219 +	BScreen bscreen;
   4.220 +	
   4.221 +	/* Set the mode using the driver data */
   4.222 +	display_mode *bmode = (display_mode*)mode->driverdata;
   4.223 +	if(bscreen.SetMode(bmode) == B_OK) {
   4.224 +		return 0;	/* No error */
   4.225  	}
   4.226 -#else
   4.227 -return -1;
   4.228 +	
   4.229 +	return -1;
   4.230 +}
   4.231 +
   4.232 +#ifdef __cplusplus
   4.233 +}
   4.234  #endif
   4.235 -}
     5.1 --- a/src/video/bwindow/SDL_bmodes.h	Thu Jul 14 17:58:47 2011 +0000
     5.2 +++ b/src/video/bwindow/SDL_bmodes.h	Wed Jul 20 19:25:38 2011 +0000
     5.3 @@ -22,6 +22,22 @@
     5.4  #ifndef SDL_BMODES_H
     5.5  #define SDL_BMODES_H
     5.6  
     5.7 +#ifdef __cplusplus
     5.8 +extern "C" {
     5.9 +#endif
    5.10 +
    5.11 +#include "../SDL_sysvideo.h"
    5.12 +
    5.13  extern int BE_InitModes(_THIS);
    5.14  extern int BE_QuitModes(_THIS);
    5.15 +extern int BE_GetDisplayBounds(_THIS, SDL_VideoDisplay *display,
    5.16 +	SDL_Rect *rect);
    5.17 +extern void BE_GetDisplayModes(_THIS, SDL_VideoDisplay *display);
    5.18 +extern int BE_SetDisplayMode(_THIS, SDL_VideoDisplay *display,
    5.19 +	SDL_DisplayMode *mode);
    5.20 +
    5.21 +#ifdef __cplusplus
    5.22 +}
    5.23  #endif
    5.24 +
    5.25 +#endif
     6.1 --- a/src/video/bwindow/SDL_bvideo.cc	Thu Jul 14 17:58:47 2011 +0000
     6.2 +++ b/src/video/bwindow/SDL_bvideo.cc	Wed Jul 20 19:25:38 2011 +0000
     6.3 @@ -20,22 +20,21 @@
     6.4  */
     6.5  
     6.6  
     6.7 +
     6.8 +
     6.9 +#ifdef __cplusplus
    6.10 +extern "C" {
    6.11 +#endif
    6.12 +
    6.13  #include "SDL_bwindow.h"
    6.14  #include "SDL_bclipboard.h"
    6.15  #include "SDL_bvideo.h"
    6.16  #include "SDL_bopengl.h"
    6.17  #include "SDL_bmodes.h"
    6.18 +#include "SDL_bevents.h"
    6.19  
    6.20 -#ifdef __cplusplus
    6.21 -extern "C" {
    6.22 -#endif
    6.23  /* FIXME: Undefined functions */
    6.24 -//    #define BE_VideoInit NULL
    6.25 -//    #define BE_VideoQuit NULL
    6.26 -    #define BE_GetDisplayBounds NULL
    6.27 -    #define BE_GetDisplayModes NULL
    6.28 -    #define BE_SetDisplayMode NULL
    6.29 -    #define BE_PumpEvents NULL
    6.30 +//    #define BE_PumpEvents NULL
    6.31      
    6.32  #if SDL_VIDEO_OPENGL_WGL	/* FIXME: Replace with BeOs's SDL OPENGL stuff */
    6.33  //    #define BE_GL_LoadLibrary NULL
    6.34 @@ -138,6 +137,11 @@
    6.35      return device;
    6.36  }
    6.37  
    6.38 +VideoBootStrap BWINDOW_bootstrap = {
    6.39 +	"bwindow", "BDirectWindow graphics",
    6.40 +	BE_Available, BE_CreateDevice
    6.41 +};
    6.42 +
    6.43  static void BE_DeleteDevice(SDL_VideoDevice * device)
    6.44  {
    6.45  	SDL_free(device->driverdata);
     7.1 --- a/src/video/bwindow/SDL_bvideo.h	Thu Jul 14 17:58:47 2011 +0000
     7.2 +++ b/src/video/bwindow/SDL_bvideo.h	Wed Jul 20 19:25:38 2011 +0000
     7.3 @@ -36,6 +36,7 @@
     7.4  extern void BE_VideoQuit(_THIS);
     7.5  extern int BE_VideoInit(_THIS);
     7.6  extern void BE_DeleteDevice(_THIS);
     7.7 +extern int BE_Available(void);
     7.8  
     7.9  #ifdef __cplusplus
    7.10  }
     8.1 --- a/src/video/bwindow/SDL_bwindow.cc	Thu Jul 14 17:58:47 2011 +0000
     8.2 +++ b/src/video/bwindow/SDL_bwindow.cc	Wed Jul 20 19:25:38 2011 +0000
     8.3 @@ -37,25 +37,25 @@
     8.4  	return ((SDL_BApp*)be_app);
     8.5  }
     8.6  
     8.7 -int _InitWindow(_THIS, SDL_Window *window) {
     8.8 +int _InitWindow(_THIS, SDL_Window *window) {printf("SDL_bwindow.cc: 40\n");
     8.9  	BRect bounds(
    8.10          window->x,
    8.11          window->y,
    8.12          window->x + window->w - 1,	//BeWindows have an off-by-one px w/h thing
    8.13          window->y + window->h - 1
    8.14      );
    8.15 -    
    8.16 +printf("SDL_bwindow.cc: 30\n");
    8.17      SDL_BWin *bwin = new(std::nothrow) SDL_BWin(bounds);
    8.18      if(bwin == NULL)
    8.19      	return ENOMEM;
    8.20 -    
    8.21 +printf("SDL_bwindow.cc: 51\n");
    8.22      window->driverdata = bwin;
    8.23      int32 winID = _GetBeApp()->GetID(window);
    8.24      bwin->SetID(winID);
    8.25      return 0;
    8.26  }
    8.27  
    8.28 -int BE_CreateWindow(_THIS, SDL_Window *window) {
    8.29 +int BE_CreateWindow(_THIS, SDL_Window *window) {printf("SDL_bwindow.cc: 58\n");
    8.30  	if(_InitWindow(_this, window) == ENOMEM)
    8.31  		return ENOMEM;
    8.32  	
    8.33 @@ -179,21 +179,27 @@
    8.34  }
    8.35  
    8.36  
    8.37 -extern int BE_CreateWindowFramebuffer(_THIS, SDL_Window * window,
    8.38 +
    8.39 +int BE_CreateWindowFramebuffer(_THIS, SDL_Window * window,
    8.40                                         Uint32 * format,
    8.41                                         void ** pixels, int *pitch) {
    8.42 -	/* FIXME: Not BeOs/Haiku supported */
    8.43 +	/* pitch = width of screen, in bytes */
    8.44 +	BScreen bscreen;
    8.45 +	*pitch = (bscreen->Frame().right - bscreen->Frame().left + 1) *	/*screen w*/
    8.46 +			 SDL_BYTESPERPIXEL(*format);
    8.47 +
    8.48 +	/* FIXME: FINISH! */
    8.49  	return -1;
    8.50  }
    8.51  
    8.52 -extern int BE_UpdateWindowFramebuffer(_THIS, SDL_Window * window,
    8.53 +int BE_UpdateWindowFramebuffer(_THIS, SDL_Window * window,
    8.54                                         SDL_Rect * rects, int numrects) {
    8.55 -	/* FIXME: Not BeOs/Haiku supported */
    8.56 +	
    8.57  	return -1;
    8.58  }
    8.59  
    8.60 -extern void BE_DestroyWindowFramebuffer(_THIS, SDL_Window * window) {
    8.61 -	/* FIXME: Not BeOs/Haiku supported */
    8.62 +void BE_DestroyWindowFramebuffer(_THIS, SDL_Window * window) {
    8.63 +	/* FIXME: FINISH! */
    8.64  }
    8.65  
    8.66