WhatsNew
changeset 5046 4cb778067834
parent 1895 c121d94672cb
     1.1 --- a/WhatsNew	Wed Jan 19 22:18:45 2011 -0800
     1.2 +++ b/WhatsNew	Wed Jan 19 22:20:44 2011 -0800
     1.3 @@ -1,709 +1,3 @@
     1.4  
     1.5  This is a list of API changes in SDL's version history.
     1.6  
     1.7 -1.3.0:
     1.8 -	Added SDL_GetNumVideoDrivers() and SDL_GetVideoDriver().
     1.9 -	Replaced SDL_VideoDriverName() with SDL_GetCurrentVideoDriver()
    1.10 -	Added SDL_GetNumAudioDrivers() and SDL_GetAudioDriver().
    1.11 -	Replaced SDL_AudioDriverName() with SDL_GetCurrentAudioDriver()
    1.12 -
    1.13 -1.2.10:
    1.14 -	If SDL_OpenAudio() is passed zero for the desired format
    1.15 -	fields, the following environment variables will be used
    1.16 -	to fill them in:
    1.17 -		SDL_AUDIO_FREQUENCY
    1.18 -		SDL_AUDIO_FORMAT
    1.19 -		SDL_AUDIO_CHANNELS
    1.20 -		SDL_AUDIO_SAMPLES
    1.21 -	If an environment variable is not specified, it will be set
    1.22 -	to a reasonable default value.
    1.23 -
    1.24 -	Added support for the SDL_VIDEO_FULLSCREEN_HEAD environment
    1.25 -	variable, currently supported on X11 Xinerama configurations.
    1.26 -
    1.27 -	Added SDL_GL_SWAP_CONTROL to wait for vsync in OpenGL applications.
    1.28 -
    1.29 -	Added SDL_GL_ACCELERATED_VISUAL to guarantee hardware acceleration.
    1.30 -
    1.31 -	Added current_w and current_h to the SDL_VideoInfo structure,
    1.32 -	which is set to the desktop resolution during video intialization,
    1.33 -	and then set to the current resolution when a video mode is set.
    1.34 -
    1.35 -	SDL_SetVideoMode() now accepts 0 for width or height and will use
    1.36 -	the current video mode (or the desktop mode if no mode has been set.)
    1.37 -
    1.38 -	Added SDL_GetKeyRepeat()
    1.39 -
    1.40 -	Added SDL_config.h, with defaults for various build environments.
    1.41 -
    1.42 -1.2.7:
    1.43 -	Added CPU feature detection functions to SDL_cpuinfo.h:
    1.44 -		SDL_HasRDTSC(), SDL_HasMMX(), SDL_Has3DNow(), SDL_HasSSE(),
    1.45 -		SDL_HasAltiVec()
    1.46 -	Added function to create RWops from const memory: SDL_RWFromConstMem()
    1.47 -
    1.48 -1.2.6:
    1.49 -	Added SDL_LoadObject(), SDL_LoadFunction(), and SDL_UnloadObject()
    1.50 -
    1.51 -	Added SDL_GL_MULTISAMPLEBUFFERS and SDL_GL_MULTISAMPLESAMPLES for FSAA
    1.52 -
    1.53 -1.2.5:
    1.54 -	Added SDL_BUTTON_WHEELUP (4) and SDL_BUTTON_WHEELDOWN (5)
    1.55 -
    1.56 -	Added SDL_GL_STEREO for stereoscopic OpenGL contexts
    1.57 -
    1.58 -1.2.0:
    1.59 -	Added SDL_VIDEOEXPOSE event to signal that the screen needs to
    1.60 -	be redrawn.  This is currently only delivered to OpenGL windows
    1.61 -	on X11, though it may be delivered in the future when the video
    1.62 -	memory is lost under DirectX.
    1.63 -
    1.64 -1.1.8:
    1.65 -	You can pass SDL_NOFRAME to SDL_VideoMode() to create a window
    1.66 -	that has no title bar or frame decoration.  Fullscreen video
    1.67 -	modes automatically have this flag set.
    1.68 -
    1.69 -	Added a function to query the clipping rectangle for a surface:
    1.70 -		void SDL_GetClipRect(SDL_Surface *surface, SDL_Rect *rect)
    1.71 -
    1.72 -	Added a function to query the current event filter:
    1.73 -		SDL_EventFilter SDL_GetEventFilter(void)
    1.74 -
    1.75 -	If you pass -1 to SDL_ShowCursor(), it won't change the current
    1.76 -	cursor visibility state, but will still return it.
    1.77 -
    1.78 -	SDL_LockSurface() and SDL_UnlockSurface() are recursive, meaning
    1.79 -	you can nest them as deep as you want, as long as each lock call
    1.80 -	has a matching unlock call.  The surface remains locked until the
    1.81 -	last matching unlock call.
    1.82 -
    1.83 -	Note that you may not blit to or from a locked surface.
    1.84 -
    1.85 -1.1.7:
    1.86 -	The SDL_SetGammaRamp() and SDL_GetGammaRamp() functions now take
    1.87 -	arrays of Uint16 values instead of Uint8 values.  For the most part,
    1.88 -	you can just take your old values and shift them up 8 bits to get
    1.89 -	new correct values for your gamma ramps.
    1.90 -
    1.91 -	You can pass SDL_RLEACCEL in flags passed to SDL_ConvertSurface()
    1.92 -        and SDL will try to RLE accelerate colorkey and alpha blits in the
    1.93 -	resulting surface.
    1.94 -
    1.95 -1.1.6:
    1.96 -	Added a function to return the thread ID of a specific thread:
    1.97 -		Uint32 SDL_GetThreadID(SDL_Thread *thread)
    1.98 -	If 'thread' is NULL, this function returns the id for this thread.
    1.99 -
   1.100 -1.1.5:
   1.101 -	The YUV overlay structure has been changed to use an array of
   1.102 -	pitches and pixels representing the planes of a YUV image, to
   1.103 -	better enable hardware acceleration.  The YV12 and IYUV formats
   1.104 -	each have three planes, corresponding to the Y, U, and V portions
   1.105 -	of the image, while packed pixel YUV formats just have one plane.
   1.106 -
   1.107 -	For palettized mode (8bpp), the screen colormap is now split in
   1.108 -	a physical and a logical palette. The physical palette determines
   1.109 -	what colours the screen pixels will get when displayed, and the
   1.110 -	logical palette controls the mapping from blits to/from the screen.
   1.111 -	A new function, SDL_SetPalette() has been added to change
   1.112 -	logical and physical palettes separately. SDL_SetColors() works
   1.113 -	just as before, and is equivalent to calling SDL_SetPalette() with
   1.114 -	a flag argument of (SDL_LOGPAL|SDL_PHYSPAL).
   1.115 -
   1.116 -	SDL_BlitSurface() no longer modifies the source rectangle, only the
   1.117 -	destination rectangle. The width/height members of the destination
   1.118 -	rectangle are ignored, only the position is used.
   1.119 -
   1.120 -	The old source clipping function SDL_SetClipping() has been replaced
   1.121 -	with a more useful function to set the destination clipping rectangle:
   1.122 -		SDL_bool SDL_SetClipRect(SDL_Surface *surface, SDL_Rect *rect)
   1.123 -		
   1.124 -	Added a function to see what subsystems have been initialized:
   1.125 -		Uint32 SDL_WasInit(Uint32 flags)
   1.126 -
   1.127 -	The Big Alpha Flip: SDL now treats alpha as opacity like everybody
   1.128 -	else, and not as transparency:
   1.129 -
   1.130 -	A new cpp symbol: SDL_ALPHA_OPAQUE is defined as 255
   1.131 -	A new cpp symbol: SDL_ALPHA_TRANSPARENT is defined as 0
   1.132 -	Values between 0 and 255 vary from fully transparent to fully opaque.
   1.133 -
   1.134 -	New functions:
   1.135 -	SDL_DisplayFormatAlpha()
   1.136 -	    Returns a surface converted to a format with alpha-channel
   1.137 -	    that can be blit efficiently to the screen. (In other words,
   1.138 -	    like SDL_DisplayFormat() but the resulting surface has
   1.139 -	    an alpha channel.)  This is useful for surfaces with alpha.
   1.140 -	SDL_MapRGBA()
   1.141 -	    Works as SDL_MapRGB() but takes an additional alpha parameter.
   1.142 -	SDL_GetRGBA()
   1.143 -	    Works as SDL_GetRGB() but also returns the alpha value
   1.144 -	    (SDL_ALPHA_OPAQUE for formats without an alpha channel)
   1.145 -
   1.146 -	Both SDL_GetRGB() and SDL_GetRGBA() now always return values in
   1.147 -	the [0..255] interval. Previously, SDL_GetRGB() would return
   1.148 -	(0xf8, 0xfc, 0xf8) for a completely white pixel in RGB565 format.
   1.149 -	(N.B.: This is broken for bit fields < 3 bits.)
   1.150 -
   1.151 -	SDL_MapRGB() returns pixels in which the alpha channel is set opaque.
   1.152 -
   1.153 -	SDL_SetAlpha() can now be used for both setting the per-surface
   1.154 -	alpha, using the new way of thinking of alpha, and also to enable
   1.155 -	and disable per-pixel alpha blending for surfaces with an alpha
   1.156 -	channel:
   1.157 -		To disable alpha blending:
   1.158 -			SDL_SetAlpha(surface, 0, 0);
   1.159 -		To re-enable alpha blending:
   1.160 -			SDL_SetAlpha(surface, SDL_SRCALPHA, 0);
   1.161 -	Surfaces with an alpha channel have blending enabled by default.
   1.162 -
   1.163 -	SDL_SetAlpha() now accepts SDL_RLEACCEL as a flag, which requests
   1.164 -	RLE acceleration of blits, just as like with SDL_SetColorKey().
   1.165 -	This flag can be set for both surfaces with an alpha channel
   1.166 -	and surfaces with an alpha value set by SDL_SetAlpha().
   1.167 -	As always, RLE surfaces must be locked before pixel access is
   1.168 -	allowed, and unlocked before any other SDL operations are done
   1.169 -	on it.
   1.170 -
   1.171 -	The blit semantics for surfaces with and without alpha and colorkey
   1.172 -	have now been defined:
   1.173 -
   1.174 -	RGBA->RGB:
   1.175 -	    SDL_SRCALPHA set:
   1.176 -		alpha-blend (using alpha-channel).
   1.177 -		SDL_SRCCOLORKEY ignored.
   1.178 -	    SDL_SRCALPHA not set:
   1.179 -		copy RGB.
   1.180 -		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.181 -		RGB values of the source colour key, ignoring alpha in the
   1.182 -		comparison.
   1.183 -
   1.184 -	RGB->RGBA:
   1.185 -	    SDL_SRCALPHA set:
   1.186 -		alpha-blend (using the source per-surface alpha value);
   1.187 -		set destination alpha to opaque.
   1.188 -	    SDL_SRCALPHA not set:
   1.189 -		copy RGB, set destination alpha to opaque.
   1.190 -	    both:
   1.191 -		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.192 -		source colour key.
   1.193 -
   1.194 -	RGBA->RGBA:
   1.195 -	    SDL_SRCALPHA set:
   1.196 -		alpha-blend (using the source alpha channel) the RGB values;
   1.197 -		leave destination alpha untouched. [Note: is this correct?]
   1.198 -		SDL_SRCCOLORKEY ignored.
   1.199 -	    SDL_SRCALPHA not set:
   1.200 -		copy all of RGBA to the destination.
   1.201 -		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.202 -		RGB values of the source colour key, ignoring alpha in the
   1.203 -		comparison.
   1.204 -
   1.205 -	RGB->RGB: 
   1.206 -	    SDL_SRCALPHA set:
   1.207 -		alpha-blend (using the source per-surface alpha value).
   1.208 -	    SDL_SRCALPHA not set:
   1.209 -		copy RGB.
   1.210 -	    both:
   1.211 -		if SDL_SRCCOLORKEY set, only copy the pixels matching the
   1.212 -		source colour key.
   1.213 -
   1.214 -	As a special case, blits from surfaces with per-surface alpha
   1.215 -	value of 128 (50% transparency) are optimised and much faster
   1.216 -	than other alpha values. This does not apply to surfaces with
   1.217 -	alpha channels (per-pixel alpha).
   1.218 -
   1.219 -	New functions for manipulating the gamma of the display have
   1.220 -	been added:
   1.221 -		int SDL_SetGamma(float red, float green, float blue);
   1.222 -		int SDL_SetGammaRamp(Uint8 *red, Uint8 *green, Uint8 *blue);
   1.223 -		int SDL_GetGammaRamp(Uint8 *red, Uint8 *green, Uint8 *blue);
   1.224 -	Gamma ramps are tables with 256 entries which map the screen color
   1.225 -	components into actually displayed colors.  For an example of
   1.226 -	implementing gamma correction and gamma fades, see test/testgamma.c
   1.227 -	Gamma control is not supported on all hardware.
   1.228 -
   1.229 -1.1.4:
   1.230 -	The size of the SDL_CDtrack structure changed from 8 to 12 bytes
   1.231 -	as the size of the length member was extended to 32 bits.
   1.232 -
   1.233 -        You can now use SDL for 2D blitting with a GL mode by passing the
   1.234 -	SDL_OPENGLBLIT flag to SDL_SetVideoMode().  You can specify 16 or
   1.235 -	32 bpp, and the data in the framebuffer is put into the GL scene
   1.236 -	when you call SDL_UpdateRects(), and the scene will be visible
   1.237 -	when you call SDL_GL_SwapBuffers().
   1.238 -
   1.239 -	Run the "testgl" test program with the -logo command line option
   1.240 -	to see an example of this blending of 2D and 3D in SDL.
   1.241 -
   1.242 -1.1.3:
   1.243 -	Added SDL_FreeRW() to the API, to complement SDL_AllocRW()
   1.244 -
   1.245 -	Added resizable window support - just add SDL_RESIZABLE to the
   1.246 -	SDL_SetVideoMode() flags, and then wait for SDL_VIDEORESIZE events.
   1.247 -	See SDL_events.h for details on the new SDL_ResizeEvent structure.
   1.248 -
   1.249 -	Added condition variable support, based on mutexes and semaphores.
   1.250 -		SDL_CreateCond()
   1.251 -		SDL_DestroyCond()
   1.252 -		SDL_CondSignal()
   1.253 -		SDL_CondBroadcast()
   1.254 -		SDL_CondWait()
   1.255 -		SDL_CondTimedWait()
   1.256 -	The new function prototypes are in SDL_mutex.h
   1.257 -
   1.258 -	Added counting semaphore support, based on the mutex primitive.
   1.259 -		SDL_CreateSemaphore()
   1.260 -		SDL_DestroySemaphore()
   1.261 -		SDL_SemWait()
   1.262 -		SDL_SemTryWait()
   1.263 -		SDL_SemWaitTimeout()
   1.264 -		SDL_SemPost()
   1.265 -		SDL_SemValue()
   1.266 -	The new function prototypes are in SDL_mutex.h
   1.267 -
   1.268 -	Added support for asynchronous blitting.  To take advantage of this,
   1.269 -	you must set the SDL_ASYNCBLIT flag when setting the video mode and
   1.270 -	creating surfaces that you want accelerated in this way.  You must
   1.271 -	lock surfaces that have this flag set, and the lock will block until
   1.272 -	any queued blits have completed.
   1.273 -
   1.274 -	Added YUV video overlay support.
   1.275 -	The supported YUV formats are: YV12, IYUV, YUY2, UYVY, and YVYU.
   1.276 -	This function creates an overlay surface:
   1.277 -		SDL_CreateYUVOverlay()
   1.278 -	You must lock and unlock the overlay to get access to the data:
   1.279 -		SDL_LockYUVOverlay() SDL_UnlockYUVOverlay()
   1.280 -	You can then display the overlay:
   1.281 -		SDL_DisplayYUVOverlay()
   1.282 -	You must free the overlay when you are done using it:
   1.283 -		SDL_FreeYUVOverlay()
   1.284 -	See SDL_video.h for the full function prototypes.
   1.285 -
   1.286 -	The joystick hat position constants have been changed:
   1.287 -	Old constant            New constant
   1.288 -	------------            ------------
   1.289 -	     0                  SDL_HAT_CENTERED
   1.290 -	     1                  SDL_HAT_UP
   1.291 -	     2                  SDL_HAT_RIGHTUP
   1.292 -	     3                  SDL_HAT_RIGHT
   1.293 -	     4                  SDL_HAT_RIGHTDOWN
   1.294 -	     5                  SDL_HAT_DOWN
   1.295 -	     6                  SDL_HAT_LEFTDOWN
   1.296 -	     7                  SDL_HAT_LEFT
   1.297 -	     8                  SDL_HAT_LEFTUP
   1.298 -	The new constants are bitmasks, so you can check for the
   1.299 -	individual axes like this:
   1.300 -		if ( hat_position & SDL_HAT_UP ) {
   1.301 -		}
   1.302 -	and you'll catch left-up, up, and right-up.
   1.303 -
   1.304 -1.1.2:
   1.305 -	Added multiple timer support:
   1.306 -		SDL_AddTimer() and SDL_RemoveTimer()
   1.307 -
   1.308 -	SDL_WM_SetIcon() now respects the icon colorkey if mask is NULL.
   1.309 -
   1.310 -1.1.0:
   1.311 -	Added initial OpenGL support.
   1.312 -	First set GL attributes (such as RGB depth, alpha depth, etc.)
   1.313 -		SDL_GL_SetAttribute()
   1.314 -	Then call SDL_SetVideoMode() with the SDL_OPENGL flag.
   1.315 -	Perform all of your normal GL drawing.
   1.316 -	Finally swap the buffers with the new SDL function:
   1.317 -		SDL_GL_SwapBuffers()
   1.318 -	See the new 'testgl' test program for an example of using GL with SDL.
   1.319 -
   1.320 -	You can load GL extension functions by using the function:
   1.321 -		SDL_GL_LoadProcAddress()
   1.322 -
   1.323 -	Added functions to initialize and cleanup specific SDL subsystems:
   1.324 -		SDL_InitSubSystem() and SDL_QuitSubSystem()
   1.325 -
   1.326 -	Added user-defined event type:
   1.327 -		typedef struct {
   1.328 -        		Uint8 type;
   1.329 -        		int code;
   1.330 -        		void *data1;
   1.331 -        		void *data2;
   1.332 -		} SDL_UserEvent;
   1.333 -	This structure is in the "user" member of an SDL_Event.
   1.334 -
   1.335 -	Added a function to push events into the event queue:
   1.336 -		SDL_PushEvent()
   1.337 -
   1.338 -	Example of using the new SDL user-defined events:
   1.339 -	{
   1.340 -		SDL_Event event;
   1.341 -
   1.342 -		event.type = SDL_USEREVENT;
   1.343 -		event.user.code = my_event_code;
   1.344 -		event.user.data1 = significant_data;
   1.345 -		event.user.data2 = 0;
   1.346 -		SDL_PushEvent(&event);
   1.347 -	}
   1.348 -
   1.349 -	Added a function to get mouse deltas since last query:
   1.350 -		SDL_GetRelativeMouseState()
   1.351 -
   1.352 -	Added a boolean datatype to SDL_types.h:
   1.353 -		SDL_bool = { SDL_TRUE, SDL_FALSE }
   1.354 -
   1.355 -	Added a function to get the current audio status:
   1.356 -		SDL_GetAudioState();
   1.357 -	It returns one of:
   1.358 -		SDL_AUDIO_STOPPED,
   1.359 -		SDL_AUDIO_PLAYING,
   1.360 -		SDL_AUDIO_PAUSED
   1.361 -
   1.362 -	Added an AAlib driver (ASCII Art) - by Stephane Peter.
   1.363 -
   1.364 -1.0.6:
   1.365 -	The input grab state is reset after each call to SDL_SetVideoMode().
   1.366 -	The input is grabbed by default in fullscreen mode, and ungrabbed in
   1.367 -	windowed mode.  If you want to set input grab to a particular value,
   1.368 -	you should set it after each call to SDL_SetVideoMode().
   1.369 -
   1.370 -1.0.5:
   1.371 -	Exposed SDL_AudioInit(), SDL_VideoInit()
   1.372 -	Added SDL_AudioDriverName() and SDL_VideoDriverName()
   1.373 -
   1.374 -	Added new window manager function:
   1.375 -		SDL_WM_ToggleFullScreen()
   1.376 -	This is currently implemented only on Linux
   1.377 -
   1.378 -	The ALT-ENTER code has been removed - it's not appropriate for a
   1.379 -	lib to bind keys when they aren't even emergency escape sequences.
   1.380 -
   1.381 -	ALT-ENTER functionality can be implemented with the following code:
   1.382 -
   1.383 -	int Handle_AltEnter(const SDL_Event *event)
   1.384 -	{
   1.385 -	    if ( event->type == SDL_KEYDOWN ) {
   1.386 -	        if ( (event->key.keysym.sym == SDLK_RETURN) &&
   1.387 -	             (event->key.keysym.mod & KMOD_ALT) ) {   
   1.388 -	                SDL_WM_ToggleFullScreen(SDL_GetVideoSurface());
   1.389 -	                return(0);
   1.390 -	        }
   1.391 -	    }
   1.392 -	    return(1);
   1.393 -	}
   1.394 -	SDL_SetEventFilter(Handle_AltEnter);
   1.395 -
   1.396 -1.0.3:
   1.397 -	Under X11, if you grab the input and hide the mouse cursor,
   1.398 -	the mouse will go into a "relative motion" mode where you
   1.399 -	will always get relative motion events no matter how far in
   1.400 -	each direction you move the mouse - relative motion is not
   1.401 -	bounded by the edges of the window (though the absolute values
   1.402 -	of the mouse positions are clamped by the size of the window).
   1.403 -	The SVGAlib, framebuffer console, and DirectInput drivers all
   1.404 -	have this behavior naturally, and the GDI and BWindow drivers
   1.405 -	never go into "relative motion" mode.
   1.406 -
   1.407 -1.0.2:
   1.408 -	Added a function to enable keyboard repeat:
   1.409 -		SDL_EnableKeyRepeat()
   1.410 -
   1.411 -	Added a function to grab the mouse and keyboard input
   1.412 -		SDL_WM_GrabInput()
   1.413 -
   1.414 -	Added a function to iconify the window.
   1.415 -		SDL_WM_IconifyWindow()
   1.416 -	If this function succeeds, the application will receive an event
   1.417 -	signaling SDL_APPACTIVE event 
   1.418 -
   1.419 -1.0.1:
   1.420 -	Added constants to SDL_audio.h for 16-bit native byte ordering:
   1.421 -		AUDIO_U16SYS, AUDIO_S16SYS
   1.422 -
   1.423 -1.0.0:
   1.424 -	New public release
   1.425 -
   1.426 -0.11.5:
   1.427 -	A new function SDL_GetVideoSurface() has been added, and returns
   1.428 -	a pointer to the current display surface.
   1.429 -
   1.430 -	SDL_AllocSurface() has been renamed SDL_CreateRGBSurface(), and
   1.431 -	a new function SDL_CreateRGBSurfaceFrom() has been added to allow
   1.432 -	creating an SDL surface from an existing pixel data buffer.
   1.433 -
   1.434 -	Added SDL_GetRGB() to the headers and documentation.
   1.435 -
   1.436 -0.11.4:
   1.437 -	SDL_SetLibraryPath() is no longer meaningful, and has been removed.
   1.438 -
   1.439 -0.11.3:
   1.440 -	A new flag for SDL_Init(), SDL_INIT_NOPARACHUTE, prevents SDL from
   1.441 -	installing fatal signal handlers on operating systems that support
   1.442 -	them.
   1.443 -
   1.444 -0.9.15:
   1.445 -	SDL_CreateColorCursor() has been removed.  Color cursors should
   1.446 -	be implemented as sprites, blitted by the application when the
   1.447 -	cursor moves.  To get smooth color cursor updates when the app
   1.448 -	is busy, pass the SDL_INIT_EVENTTHREAD flag to SDL_Init().  This
   1.449 -	allows you to handle the mouse motion in another thread from an
   1.450 -	event filter function, but is currently only supported by Linux
   1.451 -	and BeOS.  Note that you'll have to protect the display surface
   1.452 -	from multi-threaded access by using mutexes if you do this.
   1.453 -
   1.454 -	Thread-safe surface support has been removed from SDL.
   1.455 -	This makes blitting somewhat faster, by removing SDL_MiddleBlit().
   1.456 -	Code that used SDL_MiddleBlit() should use SDL_LowerBlit() instead.
   1.457 -	You can make your surfaces thread-safe by allocating your own
   1.458 -	mutex and making lock/unlock calls around accesses to your surface.
   1.459 -
   1.460 -0.9.14:
   1.461 -	SDL_GetMouseState() now takes pointers to int rather than Uint16.
   1.462 -
   1.463 -	If you set the SDL_WINDOWID environment variable under UNIX X11,
   1.464 -	SDL will use that as the main window instead of creating it's own.
   1.465 -	This is an unsupported extension to SDL, and not portable at all.
   1.466 -
   1.467 -0.9.13:
   1.468 -	Added a function SDL_SetLibraryPath() which can be used to specify
   1.469 -	the directory containing the SDL dynamic libraries.  This is useful
   1.470 -	for commercial applications which ship with particular versions
   1.471 -	of the libraries, and for security on multi-user systems.
   1.472 -	If this function is not used, the default system directories are 
   1.473 -	searched using the native dynamic object loading mechanism.
   1.474 -
   1.475 -	In order to support C linkage under Visual C++, you must declare
   1.476 -	main() without any return type:
   1.477 -		main(int argc, char *argv[]) {
   1.478 -			/* Do the program... */
   1.479 -			return(0);
   1.480 -		}
   1.481 -	C++ programs should also return a value if compiled under VC++.
   1.482 -
   1.483 -	The blit_endian member of the SDL_VideoInfo struct has been removed.
   1.484 -
   1.485 -	SDL_SymToASCII() has been replaced with SDL_GetKeyName(), so there
   1.486 -	is now no longer any function to translate a keysym to a character.
   1.487 -
   1.488 -	The SDL_keysym structure has been extended with a 'scancode' and
   1.489 -	'unicode' member.  The 'scancode' is a hardware specific scancode
   1.490 -	for the key that was pressed, and may be 0.  The 'unicode' member
   1.491 -	is a 16-bit UNICODE translation of the key that was pressed along
   1.492 -	with any modifiers or compose keys that have been pressed.
   1.493 -	If no UNICODE translation exists for the key, 'unicode' will be 0.
   1.494 -
   1.495 -	Added a function SDL_EnableUNICODE() to enable/disable UNICODE
   1.496 -	translation of character keypresses.  Translation defaults off.
   1.497 -
   1.498 -	To convert existing code to use the new API, change code which
   1.499 -	uses SDL_SymToASCII() to get the keyname to use SDL_GetKeyName(),
   1.500 -	and change code which uses it to get the ASCII value of a sym to
   1.501 -	use the 'unicode' member of the event keysym.
   1.502 -
   1.503 -0.9.12:
   1.504 -	There is partial support for 64-bit datatypes.  I don't recommend 
   1.505 -	you use this if you have a choice, because 64-bit datatypes are not
   1.506 -	supported on many platforms.  On platforms for which it is supported,
   1.507 -	the SDL_HAS_64BIT_TYPE C preprocessor define will be enabled, and
   1.508 -	you can use the Uint64 and Sint64 datatypes.
   1.509 -
   1.510 -	Added functions to SDL_endian.h to support 64-bit datatypes:
   1.511 -	    SDL_SwapLE64(), SDL_SwapBE64(),
   1.512 -	    SDL_ReadLE64(), SDL_ReadBE64(), SDL_WriteLE64(), SDL_WriteBE64()
   1.513 -
   1.514 -	A new member "len_ratio" has been added to the SDL_AudioCVT structure,
   1.515 -	and allows you to determine either the original buffer length or the
   1.516 -	converted buffer length, given the other.
   1.517 -
   1.518 -	A new function SDL_FreeWAV() has been added to the API to free data
   1.519 -	allocated by SDL_LoadWAV_RW().  This is necessary under Win32 since
   1.520 -	the gcc compiled DLL uses a different heap than VC++ compiled apps.
   1.521 -
   1.522 -	SDL now has initial support for international keyboards using the
   1.523 -	Latin character set.
   1.524 -	If a particular mapping is desired, you can set the DEFAULT_KEYBOARD
   1.525 -	compile-time variable, or you can set the environment variable 
   1.526 -	"SDL_KEYBOARD" to a string identifying the keyboard mapping you desire.
   1.527 -	The valid values for these variables can be found in SDL_keyboard.c
   1.528 -
   1.529 -	Full support for German and French keyboards under X11 is implemented.
   1.530 -
   1.531 -0.9.11:
   1.532 -	The THREADED_EVENTS compile-time define has been replaced with the
   1.533 -	SDL_INIT_EVENTTHREAD flag.  If this flag is passed to SDL_Init(),
   1.534 -	SDL will create a separate thread to perform input event handling.
   1.535 -	If this flag is passed to SDL_Init(), and the OS doesn't support 
   1.536 -	event handling in a separate thread, SDL_Init() will fail.
   1.537 -	Be sure to add calls to SDL_Delay() in your main thread to allow
   1.538 -	the OS to schedule your event thread, or it may starve, leading
   1.539 -	to slow event delivery and/or dropped events.
   1.540 -	Currently MacOS and Win32 do not support this flag, while BeOS 
   1.541 -	and Linux do support it.  I recommend that your application only
   1.542 -	use this flag if absolutely necessary.
   1.543 -
   1.544 -	The SDL thread function passed to SDL_CreateThread() now returns a
   1.545 -	status.  This status can be retrieved by passing a non-NULL pointer
   1.546 -	as the 'status' argument to SDL_WaitThread().
   1.547 -
   1.548 -	The volume parameter to SDL_MixAudio() has been increased in range
   1.549 -	from (0-8) to (0-128)
   1.550 -
   1.551 -	SDL now has a data source abstraction which can encompass a file,
   1.552 -	an area of memory, or any custom object you can envision.  It uses
   1.553 -	these abstractions, SDL_RWops, in the endian read/write functions,
   1.554 -	and the built-in WAV and BMP file loaders.  This means you can load
   1.555 -	WAV chunks from memory mapped files, compressed archives, network
   1.556 -	pipes, or anything else that has a data read abstraction.
   1.557 -
   1.558 -	There are three built-in data source abstractions:
   1.559 -	    SDL_RWFromFile(), SDL_RWFromFP(), SDL_RWFromMem()
   1.560 -	along with a generic data source allocation function:
   1.561 -	    SDL_AllocRW()
   1.562 -	These data sources can be used like stdio file pointers with the
   1.563 -	following convenience functions:
   1.564 -	    SDL_RWseek(), SDL_RWread(), SDL_RWwrite(), SDL_RWclose()
   1.565 -	These functions are defined in the new header file "SDL_rwops.h"
   1.566 -
   1.567 -	The endian swapping functions have been turned into macros for speed
   1.568 -	and SDL_CalculateEndian() has been removed.  SDL_endian.h now defines
   1.569 -	SDL_BYTEORDER as either SDL_BIG_ENDIAN or SDL_LIL_ENDIAN depending on
   1.570 -	the endianness of the host system.
   1.571 -
   1.572 -	The endian read/write functions now take an SDL_RWops pointer
   1.573 -	instead of a stdio FILE pointer, to support the new data source
   1.574 -	abstraction.
   1.575 -
   1.576 -	The SDL_*LoadWAV() functions have been replaced with a single
   1.577 -	SDL_LoadWAV_RW() function that takes a SDL_RWops pointer as it's
   1.578 -	first parameter, and a flag whether or not to automatically 
   1.579 -	free it as the second parameter.  SDL_LoadWAV() is a macro for
   1.580 -	backward compatibility and convenience:
   1.581 -	    SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, ...);
   1.582 -
   1.583 -	The SDL_*LoadBMP()/SDL_*SaveBMP() functions have each been replaced
   1.584 -	with a single function that takes a SDL_RWops pointer as it's
   1.585 -	first parameter, and a flag whether or not to automatically 
   1.586 -	free it as the second parameter.  SDL_LoadBMP() and SDL_SaveBMP()
   1.587 -	are macros for backward compatibility and convenience:
   1.588 -	    SDL_LoadBMP_RW(SDL_RWFromFile("sample.bmp", "rb"), 1, ...);
   1.589 -	    SDL_SaveBMP_RW(SDL_RWFromFile("sample.bmp", "wb"), 1, ...);
   1.590 -	Note that these functions use SDL_RWseek() extensively, and should
   1.591 -	not be used on pipes or other non-seekable data sources.
   1.592 -
   1.593 -0.9.10:
   1.594 -	The Linux SDL_SysWMInfo and SDL_SysWMMsg structures have been 
   1.595 -	extended to support multiple types of display drivers, as well as
   1.596 -        safe access to the X11 display when THREADED_EVENTS is enabled.
   1.597 -        The new structures are documented in the SDL_syswm.h header file.
   1.598 -
   1.599 -	Thanks to John Elliott <jce@seasip.demon.co.uk>, the UK keyboard
   1.600 -	should now work properly, as well as the "Windows" keys on US
   1.601 -	keyboards.
   1.602 -
   1.603 -	The Linux CD-ROM code now reads the CD-ROM devices from /etc/fstab
   1.604 -	instead of trying to open each block device on the system.
   1.605 -	The CD must be listed in /etc/fstab as using the iso9660 filesystem.
   1.606 -
   1.607 -	On Linux, if you define THREADED_EVENTS at compile time, a separate
   1.608 -	thread will be spawned to gather X events asynchronously from the
   1.609 -	graphics updates.  This hasn't been extensively tested, but it does
   1.610 -	provide a means of handling keyboard and mouse input in a separate
   1.611 -	thread from the graphics thread.  (This is now enabled by default.)
   1.612 -
   1.613 -	A special access function SDL_PeepEvents() allows you to manipulate
   1.614 -	the event queue in a thread-safe manner, including peeking at events,
   1.615 -	removing events of a specified type, and adding new events of arbitrary
   1.616 -	type to the queue (use the new 'user' member of the SDL_Event type).
   1.617 -
   1.618 -	If you use SDL_PeepEvents() to gather events, then the main graphics
   1.619 -	thread needs to call SDL_PumpEvents() periodically to drive the event
   1.620 -	loop and generate input events.  This is not necessary if SDL has been 
   1.621 -	compiled with THREADED_EVENTS defined, but doesn't hurt.
   1.622 -
   1.623 -	A new function SDL_ThreadID() returns the identifier associated with
   1.624 -	the current thread.
   1.625 -
   1.626 -0.9.9:
   1.627 -	The AUDIO_STEREO format flag has been replaced with a new 'channels'
   1.628 -	member of the SDL_AudioSpec structure.  The channels are 1 for mono
   1.629 -	audio, and 2 for stereo audio.  In the future more channels may be
   1.630 -	supported for 3D surround sound.
   1.631 -
   1.632 -	The SDL_MixAudio() function now takes an additional volume parameter,
   1.633 -	which should be set to SDL_MIX_MAXVOLUME for compatibility with the
   1.634 -	original function.
   1.635 -
   1.636 -	The CD-ROM functions which take a 'cdrom' parameter can now be
   1.637 -	passed NULL, and will act on the last successfully opened CD-ROM.
   1.638 -
   1.639 -0.9.8:
   1.640 -	No changes, bugfixes only.
   1.641 -	
   1.642 -0.9.7:
   1.643 -	No changes, bugfixes only.
   1.644 -	
   1.645 -0.9.6:
   1.646 -	Added a fast rectangle fill function: SDL_FillRect()
   1.647 -
   1.648 -	Addition of a useful function for getting info on the video hardware:
   1.649 -	    const SDL_VideoInfo *SDL_GetVideoInfo(void)
   1.650 -        This function replaces SDL_GetDisplayFormat().
   1.651 -
   1.652 -	Initial support for double-buffering:
   1.653 -	  Use the SDL_DOUBLEBUF flag in SDL_SetVideoMode()
   1.654 -	  Update the screen with a new function: SDL_Flip()
   1.655 -
   1.656 -	SDL_AllocSurface() takes two new flags:
   1.657 -	SDL_SRCCOLORKEY means that the surface will be used for colorkey blits
   1.658 -	  and if the hardware supports hardware acceleration of colorkey blits
   1.659 -	  between two surfaces in video memory, to place the surface in video
   1.660 -	  memory if possible, otherwise it will be placed in system memory.
   1.661 -	SDL_SRCALPHA means that the surface will be used for alpha blits and
   1.662 -	  if the hardware supports hardware acceleration of alpha blits between
   1.663 -	  two surfaces in video memory, to place the surface in video memory
   1.664 -	  if possible, otherwise it will be placed in system memory.
   1.665 -	SDL_HWSURFACE now means that the surface will be created with the 
   1.666 -	  same format as the display surface, since having surfaces in video
   1.667 -	  memory is only useful for fast blitting to the screen, and you can't
   1.668 -	  blit surfaces with different surface formats in video memory.
   1.669 -
   1.670 -0.9.5:
   1.671 -	You can now pass a NULL mask to SDL_WM_SetIcon(), and it will assume
   1.672 -	that the icon consists of the entire image.
   1.673 -
   1.674 -	SDL_LowerBlit() is back -- but don't use it on the display surface.
   1.675 -	It is exactly the same as SDL_MiddleBlit(), but doesn't check for
   1.676 -	thread safety.
   1.677 -
   1.678 -	Added SDL_FPLoadBMP(), SDL_FPSaveBMP(), SDL_FPLoadWAV(), which take
   1.679 -	a FILE pointer instead of a file name.
   1.680 -
   1.681 -	Added CD-ROM audio control API:
   1.682 -	    SDL_CDNumDrives()
   1.683 -	    SDL_CDName()
   1.684 -	    SDL_CDOpen()
   1.685 -	    SDL_CDStatus()
   1.686 -	    SDL_CDPlayTracks()
   1.687 -	    SDL_CDPlay()
   1.688 -	    SDL_CDPause()
   1.689 -	    SDL_CDResume()
   1.690 -	    SDL_CDStop()
   1.691 -	    SDL_CDEject()
   1.692 -	    SDL_CDClose()
   1.693 -
   1.694 -0.9.4:
   1.695 -	No changes, bugfixes only.
   1.696 -
   1.697 -0.9.3:
   1.698 -	Mouse motion event now includes relative motion information:
   1.699 -	    Sint16 event->motion.xrel, Sint16 event->motion.yrel
   1.700 -
   1.701 -	X11 keyrepeat handling can be disabled by defining IGNORE_X_KEYREPEAT
   1.702 -	    (Add -DIGNORE_X_KEYREPEAT to CFLAGS line in obj/x11Makefile)
   1.703 -
   1.704 -0.9.2:
   1.705 -	No changes, bugfixes only.
   1.706 -
   1.707 -0.9.1:
   1.708 -	Removed SDL_MapSurface() and SDL_UnmapSurface() -- surfaces are now
   1.709 -	automatically mapped on blit.
   1.710 -
   1.711 -0.8.0:
   1.712 -	SDL stable release