libs: updated SDL2 to 2.0.7

This commit is contained in:
Alam Ed Arias 2017-10-28 17:50:36 -04:00
parent daf442f17b
commit b7d0896c83
350 changed files with 32968 additions and 17572 deletions

View File

@ -1,16 +1,16 @@
Bugs are now managed in the SDL bug tracker, here: Bugs are now managed in the SDL bug tracker, here:
http://bugzilla.libsdl.org/ https://bugzilla.libsdl.org/
You may report bugs there, and search to see if a given issue has already You may report bugs there, and search to see if a given issue has already
been reported, discussed, and maybe even fixed. been reported, discussed, and maybe even fixed.
You may also find help on the SDL mailing list. Subscription information: You may also find help at the SDL forums/mailing list:
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org https://discourse.libsdl.org/
Bug reports are welcome here, but we really appreciate if you use Bugzilla, as Bug reports are welcome here, but we really appreciate if you use Bugzilla, as
bugs discussed on the mailing list may be forgotten or missed. bugs discussed on the mailing list may be forgotten or missed.

View File

@ -1,20 +1,20 @@
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
arising from the use of this software. arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions: freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not 1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be in a product, an acknowledgment in the product documentation would be
appreciated but is not required. appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be 2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software. misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.

View File

@ -1,53 +1,53 @@
Simple DirectMedia Layer CREDITS Simple DirectMedia Layer CREDITS
Thanks to everyone who made this possible, including: Thanks to everyone who made this possible, including:
* Cliff Matthews, for giving me a reason to start this project. :) * Cliff Matthews, for giving me a reason to start this project. :)
-- Executor rocks! *grin* -- Executor rocks! *grin*
* Ryan Gordon for helping everybody out and keeping the dream alive. :) * Ryan Gordon for helping everybody out and keeping the dream alive. :)
* Gabriel Jacobo for his work on the Android port and generally helping out all around. * Gabriel Jacobo for his work on the Android port and generally helping out all around.
* Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches. * Philipp Wiesemann for his attention to detail reviewing the entire SDL code base and proposes patches.
* Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code. * Andreas Schiffler for his dedication to unit tests, Visual Studio projects, and managing the Google Summer of Code.
* Mike Sartain for incorporating SDL into Team Fortress 2 and cheering me on at Valve. * Mike Sartain for incorporating SDL into Team Fortress 2 and cheering me on at Valve.
* Alfred Reynolds for the game controller API and general (in)sanity * Alfred Reynolds for the game controller API and general (in)sanity
* Jørgen Tjernø for numerous magical Mac OS X fixes. * Jørgen Tjernø for numerous magical Mac OS X fixes.
* Pierre-Loup Griffais for his deep knowledge of OpenGL drivers. * Pierre-Loup Griffais for his deep knowledge of OpenGL drivers.
* Julian Winter for the SDL 2.0 website. * Julian Winter for the SDL 2.0 website.
* Sheena Smith for many months of great work on the SDL wiki creating the API documentation and style guides. * Sheena Smith for many months of great work on the SDL wiki creating the API documentation and style guides.
* Paul Hunkin for his port of SDL to Android during the Google Summer of Code 2010. * Paul Hunkin for his port of SDL to Android during the Google Summer of Code 2010.
* Eli Gottlieb for his work on shaped windows during the Google Summer of Code 2010. * Eli Gottlieb for his work on shaped windows during the Google Summer of Code 2010.
* Jim Grandpre for his work on multi-touch and gesture recognition during * Jim Grandpre for his work on multi-touch and gesture recognition during
the Google Summer of Code 2010. the Google Summer of Code 2010.
* Edgar "bobbens" Simo for his force feedback API development during the * Edgar "bobbens" Simo for his force feedback API development during the
Google Summer of Code 2008. Google Summer of Code 2008.
* Aaron Wishnick for his work on audio resampling and pitch shifting during * Aaron Wishnick for his work on audio resampling and pitch shifting during
the Google Summer of Code 2008. the Google Summer of Code 2008.
* Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the * Holmes Futrell for his port of SDL to the iPhone and iPod Touch during the
Google Summer of Code 2008. Google Summer of Code 2008.
* Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation. * Jon Atkins for SDL_image, SDL_mixer and SDL_net documentation.
* Everybody at Loki Software, Inc. for their great contributions! * Everybody at Loki Software, Inc. for their great contributions!
And a big hand to everyone else who has contributed over the years. And a big hand to everyone else who has contributed over the years.
THANKS! :) THANKS! :)
-- Sam Lantinga <slouken@libsdl.org> -- Sam Lantinga <slouken@libsdl.org>

View File

@ -1,15 +1,18 @@
To install SDL for native development: The 32-bit files are in i686-w64-mingw32
make native The 64-bit files are in x86_64-w64-mingw32
To install SDL for cross-compiling development: To install SDL for native development:
make cross make native
Look at the example programs in ./test, and check out online documentation: To install SDL for cross-compiling development:
http://wiki.libsdl.org/ make cross
Join the SDL developer mailing list if you want to join the community: Look at the example programs in ./test, and check out online documentation:
http://www.libsdl.org/mailing-list.php http://wiki.libsdl.org/
That's it! Join the SDL developer mailing list if you want to join the community:
Sam Lantinga <slouken@libsdl.org> http://www.libsdl.org/mailing-list.php
That's it!
Sam Lantinga <slouken@libsdl.org>

View File

@ -6,7 +6,7 @@ ARCHITECTURES := i686-w64-mingw32 x86_64-w64-mingw32
all install: all install:
@echo "Type \"make native\" to install 32-bit to /usr" @echo "Type \"make native\" to install 32-bit to /usr"
@echo "Type \"make cross\" to install 32-bit and 64-bit to $(CROSS_PATH)" @echo "Type \"make cross\" to install 32-bit and 64-bit to CROSS_PATH ($(CROSS_PATH))"
native: native:
make install-package arch=i686-w64-mingw32 prefix=/usr make install-package arch=i686-w64-mingw32 prefix=/usr

View File

@ -1,13 +1,13 @@
Please distribute this file with the SDL runtime environment: Please distribute this file with the SDL runtime environment:
The Simple DirectMedia Layer (SDL for short) is a cross-platform library The Simple DirectMedia Layer (SDL for short) is a cross-platform library
designed to make it easy to write multi-media software, such as games and designed to make it easy to write multi-media software, such as games
emulators. and emulators.
The Simple DirectMedia Layer library source code is available from: The Simple DirectMedia Layer library source code is available from:
http://www.libsdl.org/ https://www.libsdl.org/
This library is distributed under the terms of the zlib license: This library is distributed under the terms of the zlib license:
http://www.zlib.net/zlib_license.html http://www.zlib.net/zlib_license.html

View File

@ -1,21 +1,21 @@
Simple DirectMedia Layer Simple DirectMedia Layer
(SDL) (SDL)
Version 2.0 Version 2.0
--- ---
http://www.libsdl.org/ https://www.libsdl.org/
Simple DirectMedia Layer is a cross-platform development library designed Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software, hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve's award winning catalog emulators, and popular games including Valve's award winning catalog
and many Humble Bundle games. and many Humble Bundle games.
More extensive documentation is available in the docs directory, starting More extensive documentation is available in the docs directory, starting
with README.md with README.md
Enjoy! Enjoy!
Sam Lantinga (slouken@libsdl.org) Sam Lantinga (slouken@libsdl.org)

View File

@ -1,199 +1,349 @@
This is a list of major changes in SDL's version history. This is a list of major changes in SDL's version history.
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
2.0.4: 2.0.7:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
General: General:
* Added support for web applications using Emscripten, see docs/README-emscripten.md for more information * Added audio stream conversion functions:
* Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information SDL_NewAudioStream
* Added an API to queue audio instead of using the audio callback: SDL_AudioStreamPut
SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio() SDL_AudioStreamGet
* Added events for audio device hot plug support: SDL_AudioStreamAvailable
SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED SDL_AudioStreamFlush
* Added SDL_PointInRect() SDL_AudioStreamClear
* Added SDL_HasAVX2() to detect CPUs with AVX2 support SDL_FreeAudioStream
* Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas) * Added functions to query and set the SDL memory allocation functions:
* Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any SDL_GetMemoryFunctions()
* Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer SDL_SetMemoryFunctions()
* Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window SDL_GetNumAllocations()
* Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space * Added locking functions for multi-threaded access to the joystick and game controller APIs:
* Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window SDL_LockJoysticks()
* Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not SDL_UnlockJoysticks()
* Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension) * The following functions are now thread-safe:
* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms SDL_SetEventFilter()
* Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers SDL_GetEventFilter()
* Added a Vivante video driver that is used on various SoC platforms SDL_AddEventWatch()
* Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated SDL_DelEventWatch()
* Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling
* Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads
* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines General:
* Improved support for WAV and BMP files with unusual chunks in them ---------------------------------------------------------------------------
* Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState 2.0.6:
* Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden ---------------------------------------------------------------------------
* Added SDL_GetDisplayDPI() to get the DPI information for a display
* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick General:
* Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to. * Added cross-platform Vulkan graphics support in SDL_vulkan.h
* Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to. SDL_Vulkan_LoadLibrary()
SDL_Vulkan_GetVkGetInstanceProcAddr()
Windows: SDL_Vulkan_GetInstanceExtensions()
* Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform) SDL_Vulkan_CreateSurface()
* Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint SDL_Vulkan_GetDrawableSize()
* SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds SDL_Vulkan_UnloadLibrary()
* Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage() This is all the platform-specific code you need to bring up Vulkan on all SDL platforms. You can look at an example in test/testvulkan.c
* Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop * Added SDL_ComposeCustomBlendMode() to create custom blend modes for 2D rendering
* You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field * Added SDL_HasNEON() which returns whether the CPU has NEON instruction support
* SDL_SysWMinfo now contains the window HDC * Added support for many game controllers, including the Nintendo Switch Pro Controller
* Added support for Unicode command line options * Added support for inverted axes and separate axis directions in game controller mappings
* Prevent beeping when Alt-key combos are pressed * Added functions to return information about a joystick before it's opened:
* SDL_SetTextInputRect() re-positions the OS-rendered IME SDL_JoystickGetDeviceVendor()
* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed SDL_JoystickGetDeviceProduct()
* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated) SDL_JoystickGetDeviceProductVersion()
SDL_JoystickGetDeviceType()
Mac OS X: SDL_JoystickGetDeviceInstanceID()
* Implemented drag-and-drop support * Added functions to return information about an open joystick:
* Improved joystick hot-plug detection SDL_JoystickGetVendor()
* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations SDL_JoystickGetProduct()
* Fixed relative mouse mode when the application loses/regains focus SDL_JoystickGetProductVersion()
* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode SDL_JoystickGetType()
* Fixed the refresh rate of display modes SDL_JoystickGetAxisInitialState()
* SDL_SysWMInfo is now ARC-compatible * Added functions to return information about an open game controller:
* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process SDL_GameControllerGetVendor()
SDL_GameControllerGetProduct()
Linux: SDL_GameControllerGetProductVersion()
* Enabled building with Mir and Wayland support by default. * Added SDL_GameControllerNumMappings() and SDL_GameControllerMappingForIndex() to be able to enumerate the built-in game controller mappings
* Added IBus IME support * Added SDL_LoadFile() and SDL_LoadFile_RW() to load a file into memory
* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events * Added SDL_DuplicateSurface() to make a copy of a surface
* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow() * Added an experimental JACK audio driver
* Added support for multiple audio devices when using Pulseaudio * Implemented non-power-of-two audio resampling, optionally using libsamplerate to perform the resampling
* Fixed duplicate mouse events when using relative mouse motion * Added the hint SDL_HINT_AUDIO_RESAMPLING_MODE to control the quality of resampling
* Added the hint SDL_HINT_RENDER_LOGICAL_SIZE_MODE to control the scaling policy for SDL_RenderSetLogicalSize():
iOS: "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen (the default)
* Added support for iOS 8 "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels * Added the hints SDL_HINT_MOUSE_NORMAL_SPEED_SCALE and SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE to scale the mouse speed when being read from raw mouse input
* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior) * Added the hint SDL_HINT_TOUCH_MOUSE_EVENTS to control whether SDL will synthesize mouse events from touch events
* Added native resolution support for the iPhone 6 Plus
* Added support for MFi game controllers Windows:
* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK * The new default audio driver on Windows is WASAPI and supports hot-plugging devices and changing the default audio device
* Added sRGB OpenGL ES context support on iOS 7+ * The old XAudio2 audio driver is deprecated and will be removed in the next release
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER * Added hints SDL_HINT_WINDOWS_INTRESOURCE_ICON and SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL to specify a custom icon resource ID for SDL windows
* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view * The hint SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING is now on by default for compatibility with .NET languages and various Windows debuggers
* Fixed various rotation and orientation issues * Updated the GUID format for game controller mappings, older mappings will be automatically converted on load
* Fixed memory leaks * Implemented the SDL_WINDOW_ALWAYS_ON_TOP flag on Windows
Android: Linux:
* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events * Added an experimental KMS/DRM video driver for embedded development
* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER iOS:
* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox() * Added a hint SDL_HINT_AUDIO_CATEGORY to control the audio category, determining whether the phone mute switch affects the audio
Raspberry Pi: ---------------------------------------------------------------------------
* Added support for the Raspberry Pi 2 2.0.5:
---------------------------------------------------------------------------
--------------------------------------------------------------------------- General:
2.0.3: * Implemented audio capture support for some platforms
--------------------------------------------------------------------------- * Added SDL_DequeueAudio() to retrieve audio when buffer queuing is turned on for audio capture
* Added events for dragging and dropping text
Mac OS X: * Added events for dragging and dropping multiple items
* Fixed creating an OpenGL context by default on Mac OS X 10.6 * By default the click raising a window will not be delivered to the SDL application. You can set the hint SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH to "1" to allow that click through to the window.
* Saving a surface with an alpha channel as a BMP will use a newer BMP format that supports alpha information. You can set the hint SDL_HINT_BMP_SAVE_LEGACY_FORMAT to "1" to use the old format.
* Added SDL_GetHintBoolean() to get the boolean value of a hint
--------------------------------------------------------------------------- * Added SDL_RenderSetIntegerScale() to set whether to smoothly scale or use integral multiples of the viewport size when scaling the rendering output
2.0.2: * Added SDL_CreateRGBSurfaceWithFormat() and SDL_CreateRGBSurfaceWithFormatFrom() to create an SDL surface with a specific pixel format
--------------------------------------------------------------------------- * Added SDL_GetDisplayUsableBounds() which returns the area usable for windows. For example, on Mac OS X, this subtracts the area occupied by the menu bar and dock.
General: * Added SDL_GetWindowBordersSize() which returns the size of the window's borders around the client area
* Added SDL_GL_ResetAttributes() to reset OpenGL attributes to default values * Added a window event SDL_WINDOWEVENT_HIT_TEST when a window had a hit test that wasn't SDL_HITTEST_NORMAL (e.g. in the title bar or window frame)
* Added an API to load a database of game controller mappings from a file: * Added SDL_SetWindowResizable() to change whether a window is resizable
SDL_GameControllerAddMappingsFromFile(), SDL_GameControllerAddMappingsFromRW() * Added SDL_SetWindowOpacity() and SDL_GetWindowOpacity() to affect the window transparency
* Added game controller mappings for the PS4 and OUYA controllers * Added SDL_SetWindowModalFor() to set a window as modal for another window
* Added SDL_GetDefaultAssertionHandler() and SDL_GetAssertionHandler() * Added support for AUDIO_U16LSB and AUDIO_U16MSB to SDL_MixAudioFormat()
* Added SDL_DetachThread() * Fixed flipped images when reading back from target textures when using the OpenGL renderer
* Added SDL_HasAVX() to determine if the CPU has AVX features * Fixed texture color modulation with SDL_BLENDMODE_NONE when using the OpenGL renderer
* Added SDL_vsscanf(), SDL_acos(), and SDL_asin() to the stdlib routines * Fixed bug where the alpha value of colorkeys was ignored when blitting in some cases
* EGL can now create/manage OpenGL and OpenGL ES 1.x/2.x contexts, and share
them using SDL_GL_SHARE_WITH_CURRENT_CONTEXT Windows:
* Added a field "clicks" to the mouse button event which records whether the event is a single click, double click, etc. * Added a hint SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING to prevent SDL from raising a debugger exception to name threads. This exception can cause problems with .NET applications when running under a debugger.
* The screensaver is now disabled by default, and there is a hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER that can change that behavior. * The hint SDL_HINT_THREAD_STACK_SIZE is now supported on Windows
* Added a hint SDL_HINT_MOUSE_RELATIVE_MODE_WARP to specify whether mouse relative mode should be emulated using mouse warping. * Fixed XBox controller triggers automatically being pulled at startup
* testgl2 does not need to link with libGL anymore * The first icon from the executable is used as the default window icon at runtime
* Added testgles2 test program to demonstrate working with OpenGL ES 2.0 * Fixed SDL log messages being printed twice if SDL was built with C library support
* Added controllermap test program to visually map a game controller * Reset dead keys when the SDL window loses focus, so dead keys pressed in SDL applications don't affect text input into other applications.
Windows: Mac OS X:
* Support for OpenGL ES 2.x contexts using either WGL or EGL (natively via * Fixed selecting the dummy video driver
the driver or emulated through ANGLE) * The caps lock key now generates a pressed event when pressed and a released event when released, instead of a press/release event pair when pressed.
* Added a hint SDL_HINT_VIDEO_WIN_D3DCOMPILER to specify which D3D shader compiler to use for OpenGL ES 2 support through ANGLE * Fixed mouse wheel events on Mac OS X 10.12
* Added a hint SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT that is useful when creating multiple windows that should share the same OpenGL context. * The audio driver has been updated to use AVFoundation for better compatibility with newer versions of Mac OS X
* Added an event SDL_RENDER_TARGETS_RESET that is sent when D3D9 render targets are reset after the device has been restored.
Linux:
Mac OS X: * Added support for the Fcitx IME
* Added a hint SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK to control whether Ctrl+click should be treated as a right click on Mac OS X. This is off by default. * Added a window event SDL_WINDOWEVENT_TAKE_FOCUS when a window manager asks the SDL window whether it wants to take focus.
* Refresh rates are now rounded instead of truncated, e.g. 59.94 Hz is rounded up to 60 Hz instead of 59.
Linux: * Added initial support for touchscreens on Raspberry Pi
* Fixed fullscreen and focused behavior when receiving NotifyGrab events
* Added experimental Wayland and Mir support, disabled by default OpenBSD:
* SDL_GetBasePath() is now implemented on OpenBSD
Android:
* Joystick support (minimum SDK version required to build SDL is now 12, iOS:
the required runtime version remains at 10, but on such devices joystick * Added support for dynamically loaded objects on iOS 8 and newer
support won't be available).
* Hotplugging support for joysticks tvOS:
* Added a hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK to control whether the accelerometer should be listed as a 3 axis joystick, which it will by default. * Added support for Apple TV
* Added a hint SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION to control whether he Apple TV remote's joystick axes will automatically match the rotation of the remote.
--------------------------------------------------------------------------- Android:
2.0.1: * Fixed SDL not resizing window when Android screen resolution changes
--------------------------------------------------------------------------- * Corrected the joystick Z axis reporting for the accelerometer
General: Emscripten (running in a web browser):
* Added an API to get common filesystem paths in SDL_filesystem.h: * Many bug fixes and improvements
SDL_GetBasePath(), SDL_GetPrefPath()
* Added an API to do optimized YV12 and IYUV texture updates:
SDL_UpdateYUVTexture() ---------------------------------------------------------------------------
* Added an API to get the amount of RAM on the system: 2.0.4:
SDL_GetSystemRAM() ---------------------------------------------------------------------------
* Added a macro to perform timestamp comparisons with SDL_GetTicks():
SDL_TICKS_PASSED() General:
* Dramatically improved OpenGL ES 2.0 rendering performance * Added support for web applications using Emscripten, see docs/README-emscripten.md for more information
* Added OpenGL attribute SDL_GL_FRAMEBUFFER_SRGB_CAPABLE * Added support for web applications using Native Client (NaCl), see docs/README-nacl.md for more information
* Added an API to queue audio instead of using the audio callback:
Windows: SDL_QueueAudio(), SDL_GetQueuedAudioSize(), SDL_ClearQueuedAudio()
* Created a static library configuration for the Visual Studio 2010 project * Added events for audio device hot plug support:
* Added a hint to create the Direct3D device with support for multi-threading: SDL_AUDIODEVICEADDED, SDL_AUDIODEVICEREMOVED
SDL_HINT_RENDER_DIRECT3D_THREADSAFE * Added SDL_PointInRect()
* Added a function to get the D3D9 adapter index for a display: * Added SDL_HasAVX2() to detect CPUs with AVX2 support
SDL_Direct3D9GetAdapterIndex() * Added SDL_SetWindowHitTest() to let apps treat parts of their SDL window like traditional window decorations (drag areas, resize areas)
* Added a function to get the D3D9 device for a D3D9 renderer: * Added SDL_GetGrabbedWindow() to get the window that currently has input grab, if any
SDL_RenderGetD3D9Device() * Added SDL_RenderIsClipEnabled() to tell whether clipping is currently enabled in a renderer
* Fixed building SDL with the mingw32 toolchain (mingw-w64 is preferred) * Added SDL_CaptureMouse() to capture the mouse to get events while the mouse is not in your window
* Fixed crash when using two XInput controllers at the same time * Added SDL_WarpMouseGlobal() to warp the mouse cursor in global screen space
* Fixed detecting a mixture of XInput and DirectInput controllers * Added SDL_GetGlobalMouseState() to get the current mouse state outside of an SDL window
* Fixed clearing a D3D render target larger than the window * Added a direction field to mouse wheel events to tell whether they are flipped (natural) or not
* Improved support for format specifiers in SDL_snprintf() * Added GL_CONTEXT_RELEASE_BEHAVIOR GL attribute (maps to [WGL|GLX]_ARB_context_flush_control extension)
* Added EGL_KHR_create_context support to allow OpenGL ES version selection on some platforms
Mac OS X: * Added NV12 and NV21 YUV texture support for OpenGL and OpenGL ES 2.0 renderers
* Added support for retina displays: * Added a Vivante video driver that is used on various SoC platforms
Create your window with the SDL_WINDOW_ALLOW_HIGHDPI flag, and then use SDL_GL_GetDrawableSize() to find the actual drawable size. You are responsible for scaling mouse and drawing coordinates appropriately. * Added an event SDL_RENDER_DEVICE_RESET that is sent from the D3D renderers when the D3D device is lost, and from Android's event loop when the GLES context had to be recreated
* Fixed mouse warping in fullscreen mode * Added a hint SDL_HINT_NO_SIGNAL_HANDLERS to disable SDL's built in signal handling
* Right mouse click is emulated by holding the Ctrl key while left clicking * Added a hint SDL_HINT_THREAD_STACK_SIZE to set the stack size of SDL's threads
* Added SDL_sqrtf(), SDL_tan(), and SDL_tanf() to the stdlib routines
Linux: * Improved support for WAV and BMP files with unusual chunks in them
* Fixed float audio support with the PulseAudio driver * Renamed SDL_assert_data to SDL_AssertData and SDL_assert_state to SDL_AssertState
* Fixed missing line endpoints in the OpenGL renderer on some drivers * Added a hint SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN to prevent window interaction while cursor is hidden
* X11 symbols are no longer defined to avoid collisions when linking statically * Added SDL_GetDisplayDPI() to get the DPI information for a display
* Added SDL_JoystickCurrentPowerLevel() to get the battery level of a joystick
iOS: * Added SDL_JoystickFromInstanceID(), as a helper function, to get the SDL_Joystick* that an event is referring to.
* Fixed status bar visibility on iOS 7 * Added SDL_GameControllerFromInstanceID(), as a helper function, to get the SDL_GameController* that an event is referring to.
* Flipped the accelerometer Y axis to match expected values
Windows:
Android: * Added support for Windows Phone 8.1 and Windows 10/UWP (Universal Windows Platform)
IMPORTANT: You MUST get the updated SDLActivity.java to match C code * Timer resolution is now 1 ms by default, adjustable with the SDL_HINT_TIMER_RESOLUTION hint
* Moved EGL initialization to native code * SDLmain no longer depends on the C runtime, so you can use the same .lib in both Debug and Release builds
* Fixed the accelerometer axis rotation relative to the device rotation * Added SDL_SetWindowsMessageHook() to set a function to be called for every windows message before TranslateMessage()
* Fixed race conditions when handling the EGL context on pause/resume * Added a hint SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP to control whether SDL_PumpEvents() processes the Windows message loop
* Touch devices are available for enumeration immediately after init * You can distinguish between real mouse and touch events by looking for SDL_TOUCH_MOUSEID in the mouse event "which" field
* SDL_SysWMinfo now contains the window HDC
Raspberry Pi: * Added support for Unicode command line options
* Added support for the Raspberry Pi, see README-raspberrypi.txt for details * Prevent beeping when Alt-key combos are pressed
* SDL_SetTextInputRect() re-positions the OS-rendered IME
* Added a hint SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 to prevent generating SDL_WINDOWEVENT_CLOSE events when Alt-F4 is pressed
* Added a hint SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING to use the old axis and button mapping for XInput devices (deprecated)
Mac OS X:
* Implemented drag-and-drop support
* Improved joystick hot-plug detection
* The SDL_WINDOWEVENT_EXPOSED window event is triggered in the appropriate situations
* Fixed relative mouse mode when the application loses/regains focus
* Fixed bugs related to transitioning to and from Spaces-aware fullscreen-desktop mode
* Fixed the refresh rate of display modes
* SDL_SysWMInfo is now ARC-compatible
* Added a hint SDL_HINT_MAC_BACKGROUND_APP to prevent forcing the application to become a foreground process
Linux:
* Enabled building with Mir and Wayland support by default.
* Added IBus IME support
* Added a hint SDL_HINT_IME_INTERNAL_EDITING to control whether IBus should handle text editing internally instead of sending SDL_TEXTEDITING events
* Added a hint SDL_HINT_VIDEO_X11_NET_WM_PING to allow disabling _NET_WM_PING protocol handling in SDL_CreateWindow()
* Added support for multiple audio devices when using Pulseaudio
* Fixed duplicate mouse events when using relative mouse motion
iOS:
* Added support for iOS 8
* The SDL_WINDOW_ALLOW_HIGHDPI window flag now enables high-dpi support, and SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() gets the window resolution in pixels
* SDL_GetWindowSize() and display mode sizes are in the "DPI-independent points" / "screen coordinates" coordinate space rather than pixels (matches OS X behavior)
* Added native resolution support for the iPhone 6 Plus
* Added support for MFi game controllers
* Added support for the hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK
* Added sRGB OpenGL ES context support on iOS 7+
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
* SDL_SysWMinfo now contains the OpenGL ES framebuffer and color renderbuffer objects used by the window's active GLES view
* Fixed various rotation and orientation issues
* Fixed memory leaks
Android:
* Added a hint SDL_HINT_ANDROID_SEPARATE_MOUSE_AND_TOUCH to prevent mouse events from being registered as touch events
* Added hints SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION and SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION
* Added support for SDL_DisableScreenSaver(), SDL_EnableScreenSaver() and the hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER
* Added support for SDL_ShowMessageBox() and SDL_ShowSimpleMessageBox()
Raspberry Pi:
* Added support for the Raspberry Pi 2
---------------------------------------------------------------------------
2.0.3:
---------------------------------------------------------------------------
Mac OS X:
* Fixed creating an OpenGL context by default on Mac OS X 10.6
---------------------------------------------------------------------------
2.0.2:
---------------------------------------------------------------------------
General:
* Added SDL_GL_ResetAttributes() to reset OpenGL attributes to default values
* Added an API to load a database of game controller mappings from a file:
SDL_GameControllerAddMappingsFromFile(), SDL_GameControllerAddMappingsFromRW()
* Added game controller mappings for the PS4 and OUYA controllers
* Added SDL_GetDefaultAssertionHandler() and SDL_GetAssertionHandler()
* Added SDL_DetachThread()
* Added SDL_HasAVX() to determine if the CPU has AVX features
* Added SDL_vsscanf(), SDL_acos(), and SDL_asin() to the stdlib routines
* EGL can now create/manage OpenGL and OpenGL ES 1.x/2.x contexts, and share
them using SDL_GL_SHARE_WITH_CURRENT_CONTEXT
* Added a field "clicks" to the mouse button event which records whether the event is a single click, double click, etc.
* The screensaver is now disabled by default, and there is a hint SDL_HINT_VIDEO_ALLOW_SCREENSAVER that can change that behavior.
* Added a hint SDL_HINT_MOUSE_RELATIVE_MODE_WARP to specify whether mouse relative mode should be emulated using mouse warping.
* testgl2 does not need to link with libGL anymore
* Added testgles2 test program to demonstrate working with OpenGL ES 2.0
* Added controllermap test program to visually map a game controller
Windows:
* Support for OpenGL ES 2.x contexts using either WGL or EGL (natively via
the driver or emulated through ANGLE)
* Added a hint SDL_HINT_VIDEO_WIN_D3DCOMPILER to specify which D3D shader compiler to use for OpenGL ES 2 support through ANGLE
* Added a hint SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT that is useful when creating multiple windows that should share the same OpenGL context.
* Added an event SDL_RENDER_TARGETS_RESET that is sent when D3D9 render targets are reset after the device has been restored.
Mac OS X:
* Added a hint SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK to control whether Ctrl+click should be treated as a right click on Mac OS X. This is off by default.
Linux:
* Fixed fullscreen and focused behavior when receiving NotifyGrab events
* Added experimental Wayland and Mir support, disabled by default
Android:
* Joystick support (minimum SDK version required to build SDL is now 12,
the required runtime version remains at 10, but on such devices joystick
support won't be available).
* Hotplugging support for joysticks
* Added a hint SDL_HINT_ACCELEROMETER_AS_JOYSTICK to control whether the accelerometer should be listed as a 3 axis joystick, which it will by default.
---------------------------------------------------------------------------
2.0.1:
---------------------------------------------------------------------------
General:
* Added an API to get common filesystem paths in SDL_filesystem.h:
SDL_GetBasePath(), SDL_GetPrefPath()
* Added an API to do optimized YV12 and IYUV texture updates:
SDL_UpdateYUVTexture()
* Added an API to get the amount of RAM on the system:
SDL_GetSystemRAM()
* Added a macro to perform timestamp comparisons with SDL_GetTicks():
SDL_TICKS_PASSED()
* Dramatically improved OpenGL ES 2.0 rendering performance
* Added OpenGL attribute SDL_GL_FRAMEBUFFER_SRGB_CAPABLE
Windows:
* Created a static library configuration for the Visual Studio 2010 project
* Added a hint to create the Direct3D device with support for multi-threading:
SDL_HINT_RENDER_DIRECT3D_THREADSAFE
* Added a function to get the D3D9 adapter index for a display:
SDL_Direct3D9GetAdapterIndex()
* Added a function to get the D3D9 device for a D3D9 renderer:
SDL_RenderGetD3D9Device()
* Fixed building SDL with the mingw32 toolchain (mingw-w64 is preferred)
* Fixed crash when using two XInput controllers at the same time
* Fixed detecting a mixture of XInput and DirectInput controllers
* Fixed clearing a D3D render target larger than the window
* Improved support for format specifiers in SDL_snprintf()
Mac OS X:
* Added support for retina displays:
Create your window with the SDL_WINDOW_ALLOW_HIGHDPI flag, and then use SDL_GL_GetDrawableSize() to find the actual drawable size. You are responsible for scaling mouse and drawing coordinates appropriately.
* Fixed mouse warping in fullscreen mode
* Right mouse click is emulated by holding the Ctrl key while left clicking
Linux:
* Fixed float audio support with the PulseAudio driver
* Fixed missing line endpoints in the OpenGL renderer on some drivers
* X11 symbols are no longer defined to avoid collisions when linking statically
iOS:
* Fixed status bar visibility on iOS 7
* Flipped the accelerometer Y axis to match expected values
Android:
IMPORTANT: You MUST get the updated SDLActivity.java to match C code
* Moved EGL initialization to native code
* Fixed the accelerometer axis rotation relative to the device rotation
* Fixed race conditions when handling the EGL context on pause/resume
* Touch devices are available for enumeration immediately after init
Raspberry Pi:
* Added support for the Raspberry Pi, see README-raspberrypi.txt for details

View File

@ -1,16 +1,23 @@
Android Android
================================================================================ ================================================================================
Requirements: Matt Styles wrote a tutorial on building SDL for Android with Visual Studio:
http://trederia.blogspot.de/2017/03/building-sdl2-for-android-with-visual.html
Android SDK (version 12 or later) The rest of this README covers the old style build process.
http://developer.android.com/sdk/index.html
================================================================================
Requirements
================================================================================
Android SDK (version 16 or later)
https://developer.android.com/sdk/index.html
Android NDK r7 or later Android NDK r7 or later
http://developer.android.com/tools/sdk/ndk/index.html https://developer.android.com/tools/sdk/ndk/index.html
Minimum API level supported by SDL: 10 (Android 2.3.3) Minimum API level supported by SDL: 10 (Android 2.3.3)
Joystick support is available for API level >=12 devices. Joystick support is available for API level >= 12 devices.
================================================================================ ================================================================================
How the port works How the port works
@ -67,13 +74,13 @@ For more complex projects, follow these instructions:
1. Copy the android-project directory wherever you want to keep your projects 1. Copy the android-project directory wherever you want to keep your projects
and rename it to the name of your project. and rename it to the name of your project.
2. Move or symlink this SDL directory into the <project>/jni directory 2. Move or symlink this SDL directory into the "<project>/jni" directory
3. Edit <project>/jni/src/Android.mk to include your source files 3. Edit "<project>/jni/src/Android.mk" to include your source files
4. Run 'ndk-build' (a script provided by the NDK). This compiles the C source 4. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
If you want to use the Eclipse IDE, skip to the Eclipse section below. If you want to use the Eclipse IDE, skip to the Eclipse section below.
5. Create <project>/local.properties and use that to point to the Android SDK directory, by writing a line with the following form: 5. Create "<project>/local.properties" and use that to point to the Android SDK directory, by writing a line with the following form:
sdk.dir=PATH_TO_ANDROID_SDK sdk.dir=PATH_TO_ANDROID_SDK
@ -121,15 +128,15 @@ This build uses the Android NDK module system.
Instructions: Instructions:
1. Copy the android-project directory wherever you want to keep your projects 1. Copy the android-project directory wherever you want to keep your projects
and rename it to the name of your project. and rename it to the name of your project.
2. Rename <project>/jni/src/Android_static.mk to <project>/jni/src/Android.mk 2. Rename "<project>/jni/src/Android_static.mk" to "<project>/jni/src/Android.mk"
(overwrite the existing one) (overwrite the existing one)
3. Edit <project>/jni/src/Android.mk to include your source files 3. Edit "<project>/jni/src/Android.mk" to include your source files
4. create and export an environment variable named NDK_MODULE_PATH that points 4. create and export an environment variable named NDK_MODULE_PATH that points
to the parent directory of this SDL directory. e.g.: to the parent directory of this SDL directory. e.g.:
export NDK_MODULE_PATH="$PWD"/.. export NDK_MODULE_PATH="$PWD"/..
5. Edit <project>/src/org/libsdl/app/SDLActivity.java and remove the call to 5. Edit "<project>/src/org/libsdl/app/SDLActivity.java" and remove the call to
System.loadLibrary("SDL2"). System.loadLibrary("SDL2").
6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source 6. Run 'ndk-build' (a script provided by the NDK). This compiles the C source
@ -229,7 +236,7 @@ under iOS, if the OS can not restore your GL context it will just kill your app)
================================================================================ ================================================================================
For a quick tour on how Linux native threads interoperate with the Java VM, take For a quick tour on how Linux native threads interoperate with the Java VM, take
a look here: http://developer.android.com/guide/practices/jni.html a look here: https://developer.android.com/guide/practices/jni.html
If you want to use threads in your SDL app, it's strongly recommended that you If you want to use threads in your SDL app, it's strongly recommended that you
do so by creating them using SDL functions. This way, the required attach/detach do so by creating them using SDL functions. This way, the required attach/detach
@ -265,7 +272,7 @@ The best place to start is with docs/OVERVIEW.TXT
================================================================================ ================================================================================
First make sure that you've installed Eclipse and the Android extensions as described here: First make sure that you've installed Eclipse and the Android extensions as described here:
http://developer.android.com/tools/sdk/eclipse-adt.html https://developer.android.com/tools/sdk/eclipse-adt.html
Once you've copied the SDL android project and customized it, you can create an Eclipse project from it: Once you've copied the SDL android project and customized it, you can create an Eclipse project from it:
* File -> New -> Other * File -> New -> Other
@ -281,7 +288,7 @@ Once you've copied the SDL android project and customized it, you can create an
================================================================================ ================================================================================
There are some good tips and tricks for getting the most out of the There are some good tips and tricks for getting the most out of the
emulator here: http://developer.android.com/tools/devices/emulator.html emulator here: https://developer.android.com/tools/devices/emulator.html
Especially useful is the info on setting up OpenGL ES 2.0 emulation. Especially useful is the info on setting up OpenGL ES 2.0 emulation.
@ -419,6 +426,19 @@ When you're done instrumenting with valgrind, you can disable the wrapper:
adb shell setprop wrap.org.libsdl.app "" adb shell setprop wrap.org.libsdl.app ""
================================================================================
Graphics debugging
================================================================================
If you are developing on a compatible Tegra-based tablet, NVidia provides
Tegra Graphics Debugger at their website. Because SDL2 dynamically loads EGL
and GLES libraries, you must follow their instructions for installing the
interposer library on a rooted device. The non-rooted instructions are not
compatible with applications that use SDL2 for video.
The Tegra Graphics Debugger is available from NVidia here:
https://developer.nvidia.com/tegra-graphics-debugger
================================================================================ ================================================================================
Why is API level 10 the minimum required? Why is API level 10 the minimum required?
================================================================================ ================================================================================
@ -433,7 +453,7 @@ Support for native OpenGL ES and ES2 applications was introduced in the NDK for
API level 4 and 8. EGL was made a stable API in the NDK for API level 9, which API level 4 and 8. EGL was made a stable API in the NDK for API level 9, which
has since then been obsoleted, with the recommendation to developers to bump the has since then been obsoleted, with the recommendation to developers to bump the
required API level to 10. required API level to 10.
As of this writing, according to http://developer.android.com/about/dashboards/index.html As of this writing, according to https://developer.android.com/about/dashboards/index.html
about 90% of the Android devices accessing Google Play support API level 10 or about 90% of the Android devices accessing Google Play support API level 10 or
higher (March 2013). higher (March 2013).

View File

@ -1,6 +1,6 @@
CMake CMake
================================================================================ ================================================================================
(www.cmake.org) (www.cmake.org)
SDL's build system was traditionally based on autotools. Over time, this SDL's build system was traditionally based on autotools. Over time, this
approach has suffered from several issues across the different supported approach has suffered from several issues across the different supported

View File

@ -1,5 +1,5 @@
DirectFB DirectFB
======== ========
Supports: Supports:

View File

@ -1,130 +1,130 @@
Dynamic API Dynamic API
================================================================================ ================================================================================
Originally posted by Ryan at: Originally posted by Ryan at:
https://plus.google.com/103391075724026391227/posts/TB8UfnDYu4U https://plus.google.com/103391075724026391227/posts/TB8UfnDYu4U
Background: Background:
- The Steam Runtime has (at least in theory) a really kick-ass build of SDL2, - The Steam Runtime has (at least in theory) a really kick-ass build of SDL2,
but developers are shipping their own SDL2 with individual Steam games. but developers are shipping their own SDL2 with individual Steam games.
These games might stop getting updates, but a newer SDL2 might be needed later. These games might stop getting updates, but a newer SDL2 might be needed later.
Certainly we'll always be fixing bugs in SDL, even if a new video target isn't Certainly we'll always be fixing bugs in SDL, even if a new video target isn't
ever needed, and these fixes won't make it to a game shipping its own SDL. ever needed, and these fixes won't make it to a game shipping its own SDL.
- Even if we replace the SDL2 in those games with a compatible one, that is to - Even if we replace the SDL2 in those games with a compatible one, that is to
say, edit a developer's Steam depot (yuck!), there are developers that are say, edit a developer's Steam depot (yuck!), there are developers that are
statically linking SDL2 that we can't do this for. We can't even force the statically linking SDL2 that we can't do this for. We can't even force the
dynamic loader to ignore their SDL2 in this case, of course. dynamic loader to ignore their SDL2 in this case, of course.
- If you don't ship an SDL2 with the game in some form, people that disabled the - If you don't ship an SDL2 with the game in some form, people that disabled the
Steam Runtime, or just tried to run the game from the command line instead of Steam Runtime, or just tried to run the game from the command line instead of
Steam might find themselves unable to run the game, due to a missing dependency. Steam might find themselves unable to run the game, due to a missing dependency.
- If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target - If you want to ship on non-Steam platforms like GOG or Humble Bundle, or target
generic Linux boxes that may or may not have SDL2 installed, you have to ship generic Linux boxes that may or may not have SDL2 installed, you have to ship
the library or risk a total failure to launch. So now, you might have to have the library or risk a total failure to launch. So now, you might have to have
a non-Steam build plus a Steam build (that is, one with and one without SDL2 a non-Steam build plus a Steam build (that is, one with and one without SDL2
included), which is inconvenient if you could have had one universal build included), which is inconvenient if you could have had one universal build
that works everywhere. that works everywhere.
- We like the zlib license, but the biggest complaint from the open source - We like the zlib license, but the biggest complaint from the open source
community about the license change is the static linking. The LGPL forced this community about the license change is the static linking. The LGPL forced this
as a legal, not technical issue, but zlib doesn't care. Even those that aren't as a legal, not technical issue, but zlib doesn't care. Even those that aren't
concerned about the GNU freedoms found themselves solving the same problems: concerned about the GNU freedoms found themselves solving the same problems:
swapping in a newer SDL to an older game often times can save the day. swapping in a newer SDL to an older game often times can save the day.
Static linking stops this dead. Static linking stops this dead.
So here's what we did: So here's what we did:
SDL now has, internally, a table of function pointers. So, this is what SDL_Init SDL now has, internally, a table of function pointers. So, this is what SDL_Init
now looks like: now looks like:
UInt32 SDL_Init(Uint32 flags) UInt32 SDL_Init(Uint32 flags)
{ {
return jump_table.SDL_Init(flags); return jump_table.SDL_Init(flags);
} }
Except that is all done with a bunch of macro magic so we don't have to maintain Except that is all done with a bunch of macro magic so we don't have to maintain
every one of these. every one of these.
What is jump_table.SDL_init()? Eventually, that's a function pointer of the real What is jump_table.SDL_init()? Eventually, that's a function pointer of the real
SDL_Init() that you've been calling all this time. But at startup, it looks more SDL_Init() that you've been calling all this time. But at startup, it looks more
like this: like this:
Uint32 SDL_Init_DEFAULT(Uint32 flags) Uint32 SDL_Init_DEFAULT(Uint32 flags)
{ {
SDL_InitDynamicAPI(); SDL_InitDynamicAPI();
return jump_table.SDL_Init(flags); return jump_table.SDL_Init(flags);
} }
SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function SDL_InitDynamicAPI() fills in jump_table with all the actual SDL function
pointers, which means that this _DEFAULT function never gets called again. pointers, which means that this _DEFAULT function never gets called again.
First call to any SDL function sets the whole thing up. First call to any SDL function sets the whole thing up.
So you might be asking, what was the value in that? Isn't this what the operating So you might be asking, what was the value in that? Isn't this what the operating
system's dynamic loader was supposed to do for us? Yes, but now we've got this system's dynamic loader was supposed to do for us? Yes, but now we've got this
level of indirection, we can do things like this: level of indirection, we can do things like this:
export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0 export SDL_DYNAMIC_API=/my/actual/libSDL-2.0.so.0
./MyGameThatIsStaticallyLinkedToSDL2 ./MyGameThatIsStaticallyLinkedToSDL2
And now, this game that is staticallly linked to SDL, can still be overridden And now, this game that is staticallly linked to SDL, can still be overridden
with a newer, or better, SDL. The statically linked one will only be used as with a newer, or better, SDL. The statically linked one will only be used as
far as calling into the jump table in this case. But in cases where no override far as calling into the jump table in this case. But in cases where no override
is desired, the statically linked version will provide its own jump table, is desired, the statically linked version will provide its own jump table,
and everyone is happy. and everyone is happy.
So now: So now:
- Developers can statically link SDL, and users can still replace it. - Developers can statically link SDL, and users can still replace it.
(We'd still rather you ship a shared library, though!) (We'd still rather you ship a shared library, though!)
- Developers can ship an SDL with their game, Valve can override it for, say, - Developers can ship an SDL with their game, Valve can override it for, say,
new features on SteamOS, or distros can override it for their own needs, new features on SteamOS, or distros can override it for their own needs,
but it'll also just work in the default case. but it'll also just work in the default case.
- Developers can ship the same package to everyone (Humble Bundle, GOG, etc), - Developers can ship the same package to everyone (Humble Bundle, GOG, etc),
and it'll do the right thing. and it'll do the right thing.
- End users (and Valve) can update a game's SDL in almost any case, - End users (and Valve) can update a game's SDL in almost any case,
to keep abandoned games running on newer platforms. to keep abandoned games running on newer platforms.
- Everyone develops with SDL exactly as they have been doing all along. - Everyone develops with SDL exactly as they have been doing all along.
Same headers, same ABI. Just get the latest version to enable this magic. Same headers, same ABI. Just get the latest version to enable this magic.
A little more about SDL_InitDynamicAPI(): A little more about SDL_InitDynamicAPI():
Internally, InitAPI does some locking to make sure everything waits until a Internally, InitAPI does some locking to make sure everything waits until a
single thread initializes everything (although even SDL_CreateThread() goes single thread initializes everything (although even SDL_CreateThread() goes
through here before spinning a thread, too), and then decides if it should use through here before spinning a thread, too), and then decides if it should use
an external SDL library. If not, it sets up the jump table using the current an external SDL library. If not, it sets up the jump table using the current
SDL's function pointers (which might be statically linked into a program, or in SDL's function pointers (which might be statically linked into a program, or in
a shared library of its own). If so, it loads that library and looks for and a shared library of its own). If so, it loads that library and looks for and
calls a single function: calls a single function:
SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize); SInt32 SDL_DYNAPI_entry(Uint32 version, void *table, Uint32 tablesize);
That function takes a version number (more on that in a moment), the address of That function takes a version number (more on that in a moment), the address of
the jump table, and the size, in bytes, of the table. the jump table, and the size, in bytes, of the table.
Now, we've got policy here: this table's layout never changes; new stuff gets Now, we've got policy here: this table's layout never changes; new stuff gets
added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all added to the end. Therefore SDL_DYNAPI_entry() knows that it can provide all
the needed functions if tablesize <= sizeof its own jump table. If tablesize is the needed functions if tablesize <= sizeof its own jump table. If tablesize is
bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but bigger (say, SDL 2.0.4 is trying to load SDL 2.0.3), then we know to abort, but
if it's smaller, we know we can provide the entire API that the caller needs. if it's smaller, we know we can provide the entire API that the caller needs.
The version variable is a failsafe switch. The version variable is a failsafe switch.
Right now it's always 1. This number changes when there are major API changes Right now it's always 1. This number changes when there are major API changes
(so we know if the tablesize might be smaller, or entries in it have changed). (so we know if the tablesize might be smaller, or entries in it have changed).
Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not Right now SDL_DYNAPI_entry gives up if the version doesn't match, but it's not
inconceivable to have a small dispatch library that only supplies this one inconceivable to have a small dispatch library that only supplies this one
function and loads different, otherwise-incompatible SDL libraries and has the function and loads different, otherwise-incompatible SDL libraries and has the
right one initialize the jump table based on the version. For something that right one initialize the jump table based on the version. For something that
must generically catch lots of different versions of SDL over time, like the must generically catch lots of different versions of SDL over time, like the
Steam Client, this isn't a bad option. Steam Client, this isn't a bad option.
Finally, I'm sure some people are reading this and thinking, Finally, I'm sure some people are reading this and thinking,
"I don't want that overhead in my project!" "I don't want that overhead in my project!"
To which I would point out that the extra function call through the jump table To which I would point out that the extra function call through the jump table
probably wouldn't even show up in a profile, but lucky you: this can all be probably wouldn't even show up in a profile, but lucky you: this can all be
disabled. You can build SDL without this if you absolutely must, but we would disabled. You can build SDL without this if you absolutely must, but we would
encourage you not to do that. However, on heavily locked down platforms like encourage you not to do that. However, on heavily locked down platforms like
iOS, or maybe when debugging, it makes sense to disable it. The way this is iOS, or maybe when debugging, it makes sense to disable it. The way this is
designed in SDL, you just have to change one #define, and the entire system designed in SDL, you just have to change one #define, and the entire system
vaporizes out, and SDL functions exactly like it always did. Most of it is vaporizes out, and SDL functions exactly like it always did. Most of it is
macro magic, so the system is contained to one C file and a few headers. macro magic, so the system is contained to one C file and a few headers.
However, this is on by default and you have to edit a header file to turn it However, this is on by default and you have to edit a header file to turn it
off. Our hopes is that if we make it easy to disable, but not too easy, off. Our hopes is that if we make it easy to disable, but not too easy,
everyone will ultimately be able to get what they want, but we've gently everyone will ultimately be able to get what they want, but we've gently
nudged everyone towards what we think is the best solution. nudged everyone towards what we think is the best solution.

View File

@ -1,37 +1,35 @@
Emscripten Emscripten
================================================================================ ================================================================================
Build: Build:
$ mkdir build $ mkdir build
$ cd build $ cd build
$ emconfigure ../configure --host=asmjs-unknown-emscripten --disable-assembly --disable-threads --enable-cpuinfo=false CFLAGS="-O2" $ emconfigure ../configure --host=asmjs-unknown-emscripten --disable-assembly --disable-threads --disable-cpuinfo CFLAGS="-O2"
$ emmake make $ emmake make
Or with cmake: Or with cmake:
$ mkdir build $ mkdir build
$ cd build $ cd build
$ emcmake cmake .. $ emcmake cmake ..
$ emmake make $ emmake make
To build one of the tests: To build one of the tests:
$ cd test/ $ cd test/
$ emcc -O2 --js-opts 0 -g4 testdraw2.c -I../include ../build/.libs/libSDL2.a ../build/libSDL2_test.a -o a.html $ emcc -O2 --js-opts 0 -g4 testdraw2.c -I../include ../build/.libs/libSDL2.a ../build/libSDL2_test.a -o a.html
Uses GLES2 renderer or software Uses GLES2 renderer or software
tests: https://dl.dropboxusercontent.com/u/17360362/SDL2-em/index.html Some other SDL2 libraries can be easily built (assuming SDL2 is installed somewhere):
Some other SDL2 libraries can be easily built (assuming SDL2 is installed somewhere): SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/):
SDL_mixer (http://www.libsdl.org/projects/SDL_mixer/): $ EMCONFIGURE_JS=1 emconfigure ../configure
build as usual...
$ EMCONFIGURE_JS=1 emconfigure ../configure
build as usual... SDL_gfx (http://cms.ferzkopp.net/index.php/software/13-sdl-gfx):
SDL_gfx (http://cms.ferzkopp.net/index.php/software/13-sdl-gfx): $ EMCONFIGURE_JS=1 emconfigure ../configure --disable-mmx
build as usual...
$ EMCONFIGURE_JS=1 emconfigure ../configure --disable-mmx
build as usual...

View File

@ -1,19 +1,16 @@
Mercurial Mercurial
========= =========
The latest development version of SDL is available via Mercurial. The latest development version of SDL is available via Mercurial.
Mercurial allows you to get up-to-the-minute fixes and enhancements; Mercurial allows you to get up-to-the-minute fixes and enhancements;
as a developer works on a source tree, you can use "hg" to mirror that as a developer works on a source tree, you can use "hg" to mirror that
source tree instead of waiting for an official release. Please look source tree instead of waiting for an official release. Please look
at the Mercurial website ( http://mercurial.selenic.com/ ) for more at the Mercurial website ( https://www.mercurial-scm.org/ ) for more
information on using hg, where you can also download software for information on using hg, where you can also download software for
Mac OS X, Windows, and Unix systems. Mac OS X, Windows, and Unix systems.
hg clone http://hg.libsdl.org/SDL hg clone http://hg.libsdl.org/SDL
If you are building SDL with an IDE, you will need to copy the file
include/SDL_config.h.default to include/SDL_config.h before building.
If you are building SDL via configure, you will need to run autogen.sh If you are building SDL via configure, you will need to run autogen.sh
before running configure. before running configure.

View File

@ -8,6 +8,7 @@ Building the Simple DirectMedia Layer for iOS 5.1+
Requirements: Mac OS X 10.8 or later and the iOS 7+ SDK. Requirements: Mac OS X 10.8 or later and the iOS 7+ SDK.
Instructions: Instructions:
1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in Xcode. 1. Open SDL.xcodeproj (located in Xcode-iOS/SDL) in Xcode.
2. Select your desired target, and hit build. 2. Select your desired target, and hit build.
@ -74,17 +75,17 @@ By default SDL will not use the full pixel density of the screen on
Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when Retina/high-dpi capable devices. Use the SDL_WINDOW_ALLOW_HIGHDPI flag when
creating your window to enable high-dpi support. creating your window to enable high-dpi support.
When high-dpi support is enabled, SDL_GetWindowSize and display mode sizes When high-dpi support is enabled, SDL_GetWindowSize() and display mode sizes
will still be in "screen coordinates" rather than pixels, but the window will will still be in "screen coordinates" rather than pixels, but the window will
have a much greater pixel density when the device supports it, and the have a much greater pixel density when the device supports it, and the
SDL_GL_GetDrawableSize or SDL_GetRendererOutputSize functions (depending on SDL_GL_GetDrawableSize() or SDL_GetRendererOutputSize() functions (depending on
whether raw OpenGL or the SDL_Render API is used) can be queried to determine whether raw OpenGL or the SDL_Render API is used) can be queried to determine
the size in pixels of the drawable screen framebuffer. the size in pixels of the drawable screen framebuffer.
Some OpenGL ES functions such as glViewport expect sizes in pixels rather than Some OpenGL ES functions such as glViewport expect sizes in pixels rather than
sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an sizes in screen coordinates. When doing 2D rendering with OpenGL ES, an
orthographic projection matrix using the size in screen coordinates orthographic projection matrix using the size in screen coordinates
(SDL_GetWindowSize) can be used in order to display content at the same scale (SDL_GetWindowSize()) can be used in order to display content at the same scale
no matter whether a Retina device is used or not. no matter whether a Retina device is used or not.
============================================================================== ==============================================================================
@ -156,7 +157,7 @@ Notes -- Accelerometer as Joystick
SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory. SDL for iPhone supports polling the built in accelerometer as a joystick device. For an example on how to do this, see the accelerometer.c in the demos directory.
The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF. The main thing to note when using the accelerometer with SDL is that while the iPhone natively reports accelerometer as floating point values in units of g-force, SDL_JoystickGetAxis() reports joystick values as signed integers. Hence, in order to convert between the two, some clamping and scaling is necessary on the part of the iPhone SDL joystick driver. To convert SDL_JoystickGetAxis() reported values BACK to units of g-force, simply multiply the values by SDL_IPHONE_MAX_GFORCE / 0x7FFF.
============================================================================== ==============================================================================
Notes -- OpenGL ES Notes -- OpenGL ES
@ -164,7 +165,7 @@ Notes -- OpenGL ES
Your SDL application for iOS uses OpenGL ES for video by default. Your SDL application for iOS uses OpenGL ES for video by default.
OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute. OpenGL ES for iOS supports several display pixel formats, such as RGBA8 and RGB565, which provide a 32 bit and 16 bit color buffer respectively. By default, the implementation uses RGB565, but you may use RGBA8 by setting each color component to 8 bits in SDL_GL_SetAttribute().
If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0. If your application doesn't use OpenGL's depth buffer, you may find significant performance improvement by setting SDL_GL_DEPTH_SIZE to 0.
@ -172,11 +173,11 @@ Finally, if your application completely redraws the screen each frame, you may f
OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this: OpenGL ES on iOS doesn't use the traditional system-framebuffer setup provided in other operating systems. Special care must be taken because of this:
- The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow is called. - The drawable Renderbuffer must be bound to the GL_RENDERBUFFER binding point when SDL_GL_SwapWindow() is called.
- The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow is called. - The drawable Framebuffer Object must be bound while rendering to the screen and when SDL_GL_SwapWindow() is called.
- If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called. - If multisample antialiasing (MSAA) is used and glReadPixels is used on the screen, the drawable framebuffer must be resolved to the MSAA resolve framebuffer (via glBlitFramebuffer or glResolveMultisampleFramebufferAPPLE), and the MSAA resolve framebuffer must be bound to the GL_READ_FRAMEBUFFER binding point, before glReadPixels is called.
The above objects can be obtained via SDL_GetWindowWMInfo (in SDL_syswm.h). The above objects can be obtained via SDL_GetWindowWMInfo() (in SDL_syswm.h).
============================================================================== ==============================================================================
Notes -- Keyboard Notes -- Keyboard
@ -219,7 +220,7 @@ Notes -- iPhone SDL limitations
============================================================================== ==============================================================================
Windows: Windows:
Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow the flag SDL_WINDOW_BORDERLESS). Full-size, single window applications only. You cannot create multi-window SDL applications for iPhone OS. The application window will fill the display, though you have the option of turning on or off the menu-bar (pass SDL_CreateWindow() the flag SDL_WINDOW_BORDERLESS).
Textures: Textures:
The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats. The optimal texture formats on iOS are SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_BGR888, and SDL_PIXELFORMAT_RGB24 pixel formats.
@ -264,3 +265,20 @@ e.g.
#endif #endif
return 0; return 0;
} }
==============================================================================
Deploying to older versions of iOS
==============================================================================
SDL supports deploying to older versions of iOS than are supported by the latest version of Xcode, all the way back to iOS 6.1
In order to do that you need to download an older version of Xcode:
https://developer.apple.com/download/more/?name=Xcode
Open the package contents of the older Xcode and your newer version of Xcode and copy over the folders in Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
Then open the file Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist and add the versions of iOS you want to deploy to the key Root/DefaultProperties/DEPLOYMENT_TARGET_SUGGESTED_VALUES
Open your project and set your deployment target to the desired version of iOS
Finally, remove GameController from the list of frameworks linked by your application and edit the build settings for "Other Linker Flags" and add -weak_framework GameController

View File

@ -1,82 +1,90 @@
Linux Linux
================================================================================ ================================================================================
By default SDL will only link against glibc, the rest of the features will be By default SDL will only link against glibc, the rest of the features will be
enabled dynamically at runtime depending on the available features on the target enabled dynamically at runtime depending on the available features on the target
system. So, for example if you built SDL with Xinerama support and the target system. So, for example if you built SDL with Xinerama support and the target
system does not have the Xinerama libraries installed, it will be disabled system does not have the Xinerama libraries installed, it will be disabled
at runtime, and you won't get a missing library error, at least with the at runtime, and you won't get a missing library error, at least with the
default configuration parameters. default configuration parameters.
================================================================================ ================================================================================
Build Dependencies Build Dependencies
================================================================================ ================================================================================
Ubuntu 13.04, all available features enabled: Ubuntu 13.04, all available features enabled:
sudo apt-get install build-essential mercurial make cmake autoconf automake \ sudo apt-get install build-essential mercurial make cmake autoconf automake \
libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \ libtool libasound2-dev libpulse-dev libaudio-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \ libxrandr-dev libxcursor-dev libxi-dev libxinerama-dev libxxf86vm-dev \
libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \ libxss-dev libgl1-mesa-dev libesd0-dev libdbus-1-dev libudev-dev \
libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev libgles1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev libibus-1.0-dev \
fcitx-libs-dev libsamplerate0-dev libsndio-dev
Ubuntu 14.04 can also add "libwayland-dev libmirclient-dev libxkbcommon-dev"
to that command line for Wayland and Mir support. Ubuntu 16.04+ can also add "libwayland-dev libxkbcommon-dev wayland-protocols"
to that command line for Wayland support.
NOTES:
- This includes all the audio targets except arts, because Ubuntu pulled the Ubuntu 16.10 can also add "libmirclient-dev libxkbcommon-dev" to that command
artsc0-dev package, but in theory SDL still supports it. line for Mir support.
- DirectFB isn't included because the configure script (currently) fails to find
it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the NOTES:
configure script to include DirectFB support. Send patches. :) - This includes all the audio targets except arts, because Ubuntu pulled the
artsc0-dev package, but in theory SDL still supports it.
- libsamplerate0-dev lets SDL optionally link to libresamplerate at runtime
================================================================================ for higher-quality audio resampling. SDL will work without it if the library
Joystick does not work is missing, so it's safe to build in support even if the end user doesn't
================================================================================ have this library installed.
- DirectFB isn't included because the configure script (currently) fails to find
If you compiled or are using a version of SDL with udev support (and you should!) it at all. You can do "sudo apt-get install libdirectfb-dev" and fix the
there's a few issues that may cause SDL to fail to detect your joystick. To configure script to include DirectFB support. Send patches. :)
debug this, start by installing the evtest utility. On Ubuntu/Debian:
sudo apt-get install evtest ================================================================================
Joystick does not work
Then run: ================================================================================
sudo evtest If you compiled or are using a version of SDL with udev support (and you should!)
there's a few issues that may cause SDL to fail to detect your joystick. To
You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX" debug this, start by installing the evtest utility. On Ubuntu/Debian:
Now run:
sudo apt-get install evtest
cat /dev/input/event/XX
Then run:
If you get a permission error, you need to set a udev rule to change the mode of
your device (see below) sudo evtest
Also, try: You'll hopefully see your joystick listed along with a name like "/dev/input/eventXX"
Now run:
sudo udevadm info --query=all --name=input/eventXX
cat /dev/input/event/XX
If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it,
you need to set up an udev rule to force this variable. If you get a permission error, you need to set a udev rule to change the mode of
your device (see below)
A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks
like: Also, try:
SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1" sudo udevadm info --query=all --name=input/eventXX
SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
If you see a line stating ID_INPUT_JOYSTICK=1, great, if you don't see it,
You can set up similar rules for your device by changing the values listed in you need to set up an udev rule to force this variable.
idProduct and idVendor. To obtain these values, try:
A combined rule for the Saitek Pro Flight Rudder Pedals to fix both issues looks
sudo udevadm info -a --name=input/eventXX | grep idVendor like:
sudo udevadm info -a --name=input/eventXX | grep idProduct
SUBSYSTEM=="input", ATTRS{idProduct}=="0763", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
If multiple values come up for each of these, the one you want is the first one of each. SUBSYSTEM=="input", ATTRS{idProduct}=="0764", ATTRS{idVendor}=="06a3", MODE="0666", ENV{ID_INPUT_JOYSTICK}="1"
On other systems which ship with an older udev (such as CentOS), you may need You can set up similar rules for your device by changing the values listed in
to set up a rule such as: idProduct and idVendor. To obtain these values, try:
SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1" sudo udevadm info -a --name=input/eventXX | grep idVendor
sudo udevadm info -a --name=input/eventXX | grep idProduct
If multiple values come up for each of these, the one you want is the first one of each.
On other systems which ship with an older udev (such as CentOS), you may need
to set up a rule such as:
SUBSYSTEM=="input", ENV{ID_CLASS}=="joystick", ENV{ID_INPUT_JOYSTICK}="1"

View File

@ -8,12 +8,15 @@ From the developer's point of view, OS X is a sort of hybrid Mac and
Unix system, and you have the option of using either traditional Unix system, and you have the option of using either traditional
command line tools or Apple's IDE Xcode. command line tools or Apple's IDE Xcode.
Command Line Build
==================
To build SDL using the command line, use the standard configure and make To build SDL using the command line, use the standard configure and make
process: process:
./configure ./configure
make make
sudo make install sudo make install
You can also build SDL as a Universal library (a single binary for both You can also build SDL as a Universal library (a single binary for both
32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using 32-bit and 64-bit Intel architectures), on Mac OS X 10.7 and newer, by using
@ -21,9 +24,9 @@ the gcc-fat.sh script in build-scripts:
mkdir mybuild mkdir mybuild
cd mybuild cd mybuild
CC=$PWD/../build-scripts/gcc-fat.sh CXX=$PWD/../build-scripts/g++fat.sh ../configure CC=$PWD/../build-scripts/gcc-fat.sh CXX=$PWD/../build-scripts/g++-fat.sh ../configure
make make
sudo make install sudo make install
This script builds SDL with 10.5 ABI compatibility on i386 and 10.6 This script builds SDL with 10.5 ABI compatibility on i386 and 10.6
ABI compatibility on x86_64 architectures. For best compatibility you ABI compatibility on x86_64 architectures. For best compatibility you
@ -86,17 +89,17 @@ so called "bundle", which basically is a fancy folder with a name like
To get this build automatically, add something like the following rule to To get this build automatically, add something like the following rule to
your Makefile.am: your Makefile.am:
bundle_contents = APP_NAME.app/Contents bundle_contents = APP_NAME.app/Contents
APP_NAME_bundle: EXE_NAME APP_NAME_bundle: EXE_NAME
mkdir -p $(bundle_contents)/MacOS mkdir -p $(bundle_contents)/MacOS
mkdir -p $(bundle_contents)/Resources mkdir -p $(bundle_contents)/Resources
echo "APPL????" > $(bundle_contents)/PkgInfo echo "APPL????" > $(bundle_contents)/PkgInfo
$(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/ $(INSTALL_PROGRAM) $< $(bundle_contents)/MacOS/
You should replace EXE_NAME with the name of the executable. APP_NAME is what You should replace EXE_NAME with the name of the executable. APP_NAME is what
will be visible to the user in the Finder. Usually it will be the same will be visible to the user in the Finder. Usually it will be the same
as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME as EXE_NAME but capitalized. E.g. if EXE_NAME is "testgame" then APP_NAME
usually is "TestGame". You might also want to use @PACKAGE@ to use the package usually is "TestGame". You might also want to use `@PACKAGE@` to use the package
name as specified in your configure.in file. name as specified in your configure.in file.
If your project builds more than one application, you will have to do a bit If your project builds more than one application, you will have to do a bit
@ -105,13 +108,13 @@ more. For each of your target applications, you need a separate rule.
If you want the created bundles to be installed, you may want to add this If you want the created bundles to be installed, you may want to add this
rule to your Makefile.am: rule to your Makefile.am:
install-exec-hook: APP_NAME_bundle install-exec-hook: APP_NAME_bundle
rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app rm -rf $(DESTDIR)$(prefix)/Applications/APP_NAME.app
mkdir -p $(DESTDIR)$(prefix)/Applications/ mkdir -p $(DESTDIR)$(prefix)/Applications/
cp -r $< /$(DESTDIR)$(prefix)Applications/ cp -r $< /$(DESTDIR)$(prefix)Applications/
This rule takes the Bundle created by the rule from step 3 and installs them This rule takes the Bundle created by the rule from step 3 and installs them
into $(DESTDIR)$(prefix)/Applications/. into "$(DESTDIR)$(prefix)/Applications/".
Again, if you want to install multiple applications, you will have to augment Again, if you want to install multiple applications, you will have to augment
the make rule accordingly. the make rule accordingly.
@ -126,11 +129,16 @@ there are some more things you should do before shipping your product...
unless you also install SDL on that other computer. A good solution unless you also install SDL on that other computer. A good solution
for this dilemma is to static link against SDL. On OS X, you can for this dilemma is to static link against SDL. On OS X, you can
achieve that by linking against the libraries listed by achieve that by linking against the libraries listed by
sdl-config --static-libs
sdl-config --static-libs
instead of those listed by instead of those listed by
sdl-config --libs
sdl-config --libs
Depending on how exactly SDL is integrated into your build systems, the Depending on how exactly SDL is integrated into your build systems, the
way to achieve that varies, so I won't describe it here in detail way to achieve that varies, so I won't describe it here in detail
2) Add an 'Info.plist' to your application. That is a special XML file which 2) Add an 'Info.plist' to your application. That is a special XML file which
contains some meta-information about your application (like some copyright contains some meta-information about your application (like some copyright
information, the version of your app, the name of an optional icon file, information, the version of your app, the name of an optional icon file,
@ -156,8 +164,10 @@ The first thing to do is to unpack the Xcode.tar.gz archive in the
top level SDL directory (where the Xcode.tar.gz archive resides). top level SDL directory (where the Xcode.tar.gz archive resides).
Because Stuffit Expander will unpack the archive into a subdirectory, Because Stuffit Expander will unpack the archive into a subdirectory,
you should unpack the archive manually from the command line: you should unpack the archive manually from the command line:
cd [path_to_SDL_source]
tar zxf Xcode.tar.gz cd [path_to_SDL_source]
tar zxf Xcode.tar.gz
This will create a new folder called Xcode, which you can browse This will create a new folder called Xcode, which you can browse
normally from the Finder. normally from the Finder.
@ -227,4 +237,4 @@ following locations:
Functionality may be added in the future to help this. Functionality may be added in the future to help this.
Known bugs are listed in the file "BUGS" Known bugs are listed in the file "BUGS.txt".

View File

@ -1,103 +1,103 @@
Native Client Native Client
================================================================================ ================================================================================
Requirements: Requirements:
* Native Client SDK (https://developer.chrome.com/native-client), * Native Client SDK (https://developer.chrome.com/native-client),
(tested with Pepper version 33 or higher). (tested with Pepper version 33 or higher).
The SDL backend for Chrome's Native Client has been tested only with the PNaCl The SDL backend for Chrome's Native Client has been tested only with the PNaCl
toolchain, which generates binaries designed to run on ARM and x86_32/64 toolchain, which generates binaries designed to run on ARM and x86_32/64
platforms. This does not mean it won't work with the other toolchains! platforms. This does not mean it won't work with the other toolchains!
================================================================================ ================================================================================
Building SDL for NaCl Building SDL for NaCl
================================================================================ ================================================================================
Set up the right environment variables (see naclbuild.sh), then configure SDL with: Set up the right environment variables (see naclbuild.sh), then configure SDL with:
configure --host=pnacl --prefix some/install/destination configure --host=pnacl --prefix some/install/destination
Then "make". Then "make".
As an example of how to create a deployable app a Makefile project is provided As an example of how to create a deployable app a Makefile project is provided
in test/nacl/Makefile, which includes some monkey patching of the common.mk file in test/nacl/Makefile, which includes some monkey patching of the common.mk file
provided by NaCl, without which linking properly to SDL won't work (the search provided by NaCl, without which linking properly to SDL won't work (the search
path can't be modified externally, so the linker won't find SDL's binaries unless path can't be modified externally, so the linker won't find SDL's binaries unless
you dump them into the SDK path, which is inconvenient). you dump them into the SDK path, which is inconvenient).
Also provided in test/nacl is the required support file, such as index.html, Also provided in test/nacl is the required support file, such as index.html,
manifest.json, etc. manifest.json, etc.
SDL apps for NaCl run on a worker thread using the ppapi_simple infrastructure. SDL apps for NaCl run on a worker thread using the ppapi_simple infrastructure.
This allows for blocking calls on all the relevant systems (OpenGL ES, filesystem), This allows for blocking calls on all the relevant systems (OpenGL ES, filesystem),
hiding the asynchronous nature of the browser behind the scenes...which is not the hiding the asynchronous nature of the browser behind the scenes...which is not the
same as making it disappear! same as making it disappear!
================================================================================ ================================================================================
Running tests Running tests
================================================================================ ================================================================================
Due to the nature of NaCl programs, building and running SDL tests is not as Due to the nature of NaCl programs, building and running SDL tests is not as
straightforward as one would hope. The script naclbuild.sh in build-scripts straightforward as one would hope. The script naclbuild.sh in build-scripts
automates the process and should serve as a guide for users of SDL trying to build automates the process and should serve as a guide for users of SDL trying to build
their own applications. their own applications.
Basic usage: Basic usage:
./naclbuild.sh path/to/pepper/toolchain (i.e. ~/naclsdk/pepper_35) ./naclbuild.sh path/to/pepper/toolchain (i.e. ~/naclsdk/pepper_35)
This will build testgles2.c by default. This will build testgles2.c by default.
If you want to build a different test, for example testrendercopyex.c: If you want to build a different test, for example testrendercopyex.c:
SOURCES=~/sdl/SDL/test/testrendercopyex.c ./naclbuild.sh ~/naclsdk/pepper_35 SOURCES=~/sdl/SDL/test/testrendercopyex.c ./naclbuild.sh ~/naclsdk/pepper_35
Once the build finishes, you have to serve the contents with a web server (the Once the build finishes, you have to serve the contents with a web server (the
script will give you instructions on how to do that with Python). script will give you instructions on how to do that with Python).
================================================================================ ================================================================================
RWops and nacl_io RWops and nacl_io
================================================================================ ================================================================================
SDL_RWops work transparently with nacl_io. Two functions control the mount points: SDL_RWops work transparently with nacl_io. Two functions control the mount points:
int mount(const char* source, const char* target, int mount(const char* source, const char* target,
const char* filesystemtype, const char* filesystemtype,
unsigned long mountflags, const void *data); unsigned long mountflags, const void *data);
int umount(const char *target); int umount(const char *target);
For convenience, SDL will by default mount an httpfs tree at / before calling For convenience, SDL will by default mount an httpfs tree at / before calling
the app's main function. Such setting can be overridden by calling: the app's main function. Such setting can be overridden by calling:
umount("/"); umount("/");
And then mounting a different filesystem at / And then mounting a different filesystem at /
It's important to consider that the asynchronous nature of file operations on a It's important to consider that the asynchronous nature of file operations on a
browser is hidden from the application, effectively providing the developer with browser is hidden from the application, effectively providing the developer with
a set of blocking file operations just like you get in a regular desktop a set of blocking file operations just like you get in a regular desktop
environment, which eases the job of porting to Native Client, but also introduces environment, which eases the job of porting to Native Client, but also introduces
a set of challenges of its own, in particular when big file sizes and slow a set of challenges of its own, in particular when big file sizes and slow
connections are involved. connections are involved.
For more information on how nacl_io and mount points work, see: For more information on how nacl_io and mount points work, see:
https://developer.chrome.com/native-client/devguide/coding/nacl_io https://developer.chrome.com/native-client/devguide/coding/nacl_io
https://src.chromium.org/chrome/trunk/src/native_client_sdk/src/libraries/nacl_io/nacl_io.h https://src.chromium.org/chrome/trunk/src/native_client_sdk/src/libraries/nacl_io/nacl_io.h
To be able to save into the directory "/save/" (like backup of game) : To be able to save into the directory "/save/" (like backup of game) :
mount("", "/save", "html5fs", 0, "type=PERSISTENT"); mount("", "/save", "html5fs", 0, "type=PERSISTENT");
And add to manifest.json : And add to manifest.json :
"permissions": [ "permissions": [
"unlimitedStorage" "unlimitedStorage"
] ]
================================================================================ ================================================================================
TODO - Known Issues TODO - Known Issues
================================================================================ ================================================================================
* Testing of all systems with a real application (something other than SDL's tests) * Testing of all systems with a real application (something other than SDL's tests)
* Key events don't seem to work properly * Key events don't seem to work properly

View File

@ -1,7 +1,7 @@
Pandora Pandora
===================================================================== =====================================================================
( http://openpandora.org/ ) ( http://openpandora.org/ )
- A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES - A pandora specific video driver was written to allow SDL 2.0 with OpenGL ES
support to work on the pandora under the framebuffer. This driver do not have support to work on the pandora under the framebuffer. This driver do not have
input support for now, so if you use it you will have to add your own control code. input support for now, so if you use it you will have to add your own control code.

View File

@ -1,8 +1,8 @@
Platforms Platforms
========= =========
We maintain the list of supported platforms on our wiki now, and how to We maintain the list of supported platforms on our wiki now, and how to
build and install SDL for those platforms: build and install SDL for those platforms:
https://wiki.libsdl.org/Installation https://wiki.libsdl.org/Installation

View File

@ -1,11 +1,11 @@
Porting Porting
======= =======
* Porting To A New Platform * Porting To A New Platform
The first thing you have to do when porting to a new platform, is look at The first thing you have to do when porting to a new platform, is look at
include/SDL_platform.h and create an entry there for your operating system. include/SDL_platform.h and create an entry there for your operating system.
The standard format is __PLATFORM__, where PLATFORM is the name of the OS. The standard format is "__PLATFORM__", where PLATFORM is the name of the OS.
Ideally SDL_platform.h will be able to auto-detect the system it's building Ideally SDL_platform.h will be able to auto-detect the system it's building
on based on C preprocessor symbols. on based on C preprocessor symbols.
@ -15,7 +15,9 @@ There are two basic ways of building SDL at the moment:
If you have a GNUish system, then you might try this. Edit configure.in, If you have a GNUish system, then you might try this. Edit configure.in,
take a look at the large section labelled: take a look at the large section labelled:
"Set up the configuration based on the host platform!" "Set up the configuration based on the host platform!"
Add a section for your platform, and then re-run autogen.sh and build! Add a section for your platform, and then re-run autogen.sh and build!
2. Using an IDE: 2. Using an IDE:
@ -23,10 +25,11 @@ There are two basic ways of building SDL at the moment:
If you're using an IDE or other non-configure build system, you'll probably If you're using an IDE or other non-configure build system, you'll probably
want to create a custom SDL_config.h for your platform. Edit SDL_config.h, want to create a custom SDL_config.h for your platform. Edit SDL_config.h,
add a section for your platform, and create a custom SDL_config_{platform}.h, add a section for your platform, and create a custom SDL_config_{platform}.h,
based on SDL_config.h.minimal and SDL_config.h.in based on SDL_config_minimal.h and SDL_config.h.in
Add the top level include directory to the header search path, and then add Add the top level include directory to the header search path, and then add
the following sources to the project: the following sources to the project:
src/*.c src/*.c
src/atomic/*.c src/atomic/*.c
src/audio/*.c src/audio/*.c
@ -37,6 +40,7 @@ There are two basic ways of building SDL at the moment:
src/joystick/*.c src/joystick/*.c
src/power/*.c src/power/*.c
src/render/*.c src/render/*.c
src/render/software/*.c
src/stdlib/*.c src/stdlib/*.c
src/thread/*.c src/thread/*.c
src/timer/*.c src/timer/*.c

View File

@ -1,5 +1,5 @@
PSP PSP
====== ======
SDL port for the Sony PSP contributed by SDL port for the Sony PSP contributed by
Captian Lex Captian Lex

View File

@ -23,7 +23,7 @@ Raspbian (other Linux distros may work as well).
sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev sudo apt-get install libudev-dev libasound2-dev libdbus-1-dev
You also need the VideoCore binary stuff that ships in /opt/vc for EGL and You also need the VideoCore binary stuff that ships in /opt/vc for EGL and
OpenGL ES 2.x, it usually comes pre installed, but in any case: OpenGL ES 2.x, it usually comes pre-installed, but in any case:
sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev sudo apt-get install libraspberrypi0 libraspberrypi-bin libraspberrypi-dev
@ -37,9 +37,9 @@ will be placed in /opt/rpi-tools
sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools sudo git clone --depth 1 https://github.com/raspberrypi/tools /opt/rpi-tools
You'll also need a Rasbian binary image. You'll also need a Raspbian binary image.
Get it from: http://downloads.raspberrypi.org/raspbian_latest Get it from: http://downloads.raspberrypi.org/raspbian_latest
After unzipping, you'll get file with a name like: <date>-wheezy-raspbian.img After unzipping, you'll get file with a name like: "<date>-wheezy-raspbian.img"
Let's assume the sysroot will be built in /opt/rpi-sysroot. Let's assume the sysroot will be built in /opt/rpi-sysroot.
export SYSROOT=/opt/rpi-sysroot export SYSROOT=/opt/rpi-sysroot
@ -136,9 +136,9 @@ your app has read access to one of the following:
This is usually not a problem if you run from the physical terminal (as opposed This is usually not a problem if you run from the physical terminal (as opposed
to running from a pseudo terminal, such as via SSH). If running from a PTS, a to running from a pseudo terminal, such as via SSH). If running from a PTS, a
quick workaround is to run your app as root or add yourself to the tty group, quick workaround is to run your app as root or add yourself to the tty group,
then re login to the system. then re-login to the system.
sudo usermod -aG tty `whoami` sudo usermod -aG tty `whoami`
The keyboard layout used by SDL is the same as the one the kernel uses. The keyboard layout used by SDL is the same as the one the kernel uses.
To configure the layout on Raspbian: To configure the layout on Raspbian:

View File

@ -1,4 +1,4 @@
Touch Touch
=========================================================================== ===========================================================================
System Specific Notes System Specific Notes
=========================================================================== ===========================================================================
@ -42,14 +42,14 @@ Same as SDL_FINGERDOWN.
=========================================================================== ===========================================================================
Functions Functions
=========================================================================== ===========================================================================
SDL provides the ability to access the underlying Finger structures. SDL provides the ability to access the underlying SDL_Finger structures.
These structures should _never_ be modified. These structures should _never_ be modified.
The following functions are included from SDL_touch.h The following functions are included from SDL_touch.h
To get a SDL_TouchID call SDL_GetTouchDevice(index). To get a SDL_TouchID call SDL_GetTouchDevice(int index).
This returns a SDL_TouchID. This returns a SDL_TouchID.
IMPORTANT: If the touch has been removed, or there is no touch with the given ID, SDL_GetTouchID will return 0. Be sure to check for this! IMPORTANT: If the touch has been removed, or there is no touch with the given index, SDL_GetTouchDevice() will return 0. Be sure to check for this!
The number of touch devices can be queried with SDL_GetNumTouchDevices(). The number of touch devices can be queried with SDL_GetNumTouchDevices().
@ -64,13 +64,13 @@ The most common reason to access SDL_Finger is to query the fingers outside the
To get a SDL_Finger, call SDL_GetTouchFinger(touchID,index), where touchID is a SDL_TouchID, and index is the requested finger. To get a SDL_Finger, call SDL_GetTouchFinger(SDL_TouchID touchID, int index), where touchID is a SDL_TouchID, and index is the requested finger.
This returns a SDL_Finger*, or NULL if the finger does not exist, or has been removed. This returns a SDL_Finger *, or NULL if the finger does not exist, or has been removed.
A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled. A SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the SDL_FINGERUP event is polled.
As a result, be very careful to check for NULL return values. As a result, be very careful to check for NULL return values.
A SDL_Finger has the following fields: A SDL_Finger has the following fields:
* x,y,pressure: * x, y:
The current coordinates of the touch. The current coordinates of the touch.
* pressure: * pressure:
The pressure of the touch. The pressure of the touch.

View File

@ -1,5 +1,5 @@
WinCE WinCE
===== =====
Windows CE is no longer supported by SDL. Windows CE is no longer supported by SDL.

View File

@ -38,4 +38,8 @@ Known Bugs:
* SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears * SDL_GL_SetSwapInterval is currently a no op when using ANGLE. It appears
that there's a bug in the library which prevents the window contents from that there's a bug in the library which prevents the window contents from
refreshing if this is set to anything other than the default value. refreshing if this is set to anything other than the default value.
Vulkan Surface Support
==============
Support for creating Vulkan surfaces is configured on by default. To disable it change the value of `SDL_VIDEO_VULKAN` to 0 in `SDL_config_windows.h`. You must install the [Vulkan SDK](https://www.lunarg.com/vulkan-sdk/) in order to use Vulkan graphics in your application.

File diff suppressed because it is too large Load Diff

View File

@ -1,63 +1,63 @@
Simple DirectMedia Layer {#mainpage} Simple DirectMedia Layer {#mainpage}
======================== ========================
(SDL) (SDL)
Version 2.0 Version 2.0
--- ---
http://www.libsdl.org/ http://www.libsdl.org/
Simple DirectMedia Layer is a cross-platform development library designed Simple DirectMedia Layer is a cross-platform development library designed
to provide low level access to audio, keyboard, mouse, joystick, and graphics to provide low level access to audio, keyboard, mouse, joystick, and graphics
hardware via OpenGL and Direct3D. It is used by video playback software, hardware via OpenGL and Direct3D. It is used by video playback software,
emulators, and popular games including Valve's award winning catalog emulators, and popular games including Valve's award winning catalog
and many Humble Bundle games. and many Humble Bundle games.
SDL officially supports Windows, Mac OS X, Linux, iOS, and Android. SDL officially supports Windows, Mac OS X, Linux, iOS, and Android.
Support for other platforms may be found in the source code. Support for other platforms may be found in the source code.
SDL is written in C, works natively with C++, and there are bindings SDL is written in C, works natively with C++, and there are bindings
available for several other languages, including C# and Python. available for several other languages, including C# and Python.
This library is distributed under the zlib license, which can be found This library is distributed under the zlib license, which can be found
in the file "COPYING.txt". in the file "COPYING.txt".
The best way to learn how to use SDL is to check out the header files in The best way to learn how to use SDL is to check out the header files in
the "include" subdirectory and the programs in the "test" subdirectory. the "include" subdirectory and the programs in the "test" subdirectory.
The header files and test programs are well commented and always up to date. The header files and test programs are well commented and always up to date.
More documentation and FAQs are available online at [the wiki](http://wiki.libsdl.org/) More documentation and FAQs are available online at [the wiki](http://wiki.libsdl.org/)
- [Android](README-android.md) - [Android](README-android.md)
- [CMake](README-cmake.md) - [CMake](README-cmake.md)
- [DirectFB](README-directfb.md) - [DirectFB](README-directfb.md)
- [DynAPI](README-dynapi.md) - [DynAPI](README-dynapi.md)
- [Emscripten](README-emscripten.md) - [Emscripten](README-emscripten.md)
- [Gesture](README-gesture.md) - [Gesture](README-gesture.md)
- [Mercurial](README-hg.md) - [Mercurial](README-hg.md)
- [iOS](README-ios.md) - [iOS](README-ios.md)
- [Linux](README-linux.md) - [Linux](README-linux.md)
- [OS X](README-macosx.md) - [OS X](README-macosx.md)
- [Native Client](README-nacl.md) - [Native Client](README-nacl.md)
- [Pandora](README-pandora.md) - [Pandora](README-pandora.md)
- [Supported Platforms](README-platforms.md) - [Supported Platforms](README-platforms.md)
- [Porting information](README-porting.md) - [Porting information](README-porting.md)
- [PSP](README-psp.md) - [PSP](README-psp.md)
- [Raspberry Pi](README-raspberrypi.md) - [Raspberry Pi](README-raspberrypi.md)
- [Touch](README-touch.md) - [Touch](README-touch.md)
- [WinCE](README-wince.md) - [WinCE](README-wince.md)
- [Windows](README-windows.md) - [Windows](README-windows.md)
- [WinRT](README-winrt.md) - [WinRT](README-winrt.md)
If you need help with the library, or just want to discuss SDL related If you need help with the library, or just want to discuss SDL related
issues, you can join the [developers mailing list](http://www.libsdl.org/mailing-list.php) issues, you can join the [developers mailing list](http://www.libsdl.org/mailing-list.php)
If you want to report bugs or contribute patches, please submit them to If you want to report bugs or contribute patches, please submit them to
[bugzilla](http://bugzilla.libsdl.org/) [bugzilla](https://bugzilla.libsdl.org/)
Enjoy! Enjoy!
Sam Lantinga <mailto:slouken@libsdl.org> Sam Lantinga <mailto:slouken@libsdl.org>

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
prefix=/usr/local/cross-tools/i686-w64-mingw32 prefix=/usr/local/i686-w64-mingw32
exec_prefix=${prefix} exec_prefix=${prefix}
exec_prefix_set=no exec_prefix_set=no
libdir=${exec_prefix}/lib libdir=${exec_prefix}/lib
@ -39,7 +39,7 @@ while test $# -gt 0; do
echo $exec_prefix echo $exec_prefix
;; ;;
--version) --version)
echo 2.0.4 echo 2.0.7
;; ;;
--cflags) --cflags)
echo -I${prefix}/include/SDL2 -Dmain=SDL_main echo -I${prefix}/include/SDL2 -Dmain=SDL_main

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -26,8 +26,8 @@
*/ */
#ifndef _SDL_H #ifndef SDL_h_
#define _SDL_H #define SDL_h_
#include "SDL_main.h" #include "SDL_main.h"
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -40,10 +40,10 @@
#include "SDL_error.h" #include "SDL_error.h"
#include "SDL_events.h" #include "SDL_events.h"
#include "SDL_filesystem.h" #include "SDL_filesystem.h"
#include "SDL_joystick.h"
#include "SDL_gamecontroller.h" #include "SDL_gamecontroller.h"
#include "SDL_haptic.h" #include "SDL_haptic.h"
#include "SDL_hints.h" #include "SDL_hints.h"
#include "SDL_joystick.h"
#include "SDL_loadso.h" #include "SDL_loadso.h"
#include "SDL_log.h" #include "SDL_log.h"
#include "SDL_messagebox.h" #include "SDL_messagebox.h"
@ -51,6 +51,7 @@
#include "SDL_power.h" #include "SDL_power.h"
#include "SDL_render.h" #include "SDL_render.h"
#include "SDL_rwops.h" #include "SDL_rwops.h"
#include "SDL_shape.h"
#include "SDL_system.h" #include "SDL_system.h"
#include "SDL_thread.h" #include "SDL_thread.h"
#include "SDL_timer.h" #include "SDL_timer.h"
@ -72,14 +73,14 @@ extern "C" {
* specify the subsystems which you will be using in your application. * specify the subsystems which you will be using in your application.
*/ */
/* @{ */ /* @{ */
#define SDL_INIT_TIMER 0x00000001 #define SDL_INIT_TIMER 0x00000001u
#define SDL_INIT_AUDIO 0x00000010 #define SDL_INIT_AUDIO 0x00000010u
#define SDL_INIT_VIDEO 0x00000020 /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ #define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */
#define SDL_INIT_JOYSTICK 0x00000200 /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ #define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */
#define SDL_INIT_HAPTIC 0x00001000 #define SDL_INIT_HAPTIC 0x00001000u
#define SDL_INIT_GAMECONTROLLER 0x00002000 /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ #define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */
#define SDL_INIT_EVENTS 0x00004000 #define SDL_INIT_EVENTS 0x00004000u
#define SDL_INIT_NOPARACHUTE 0x00100000 /**< compatibility; this flag is ignored. */ #define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */
#define SDL_INIT_EVERYTHING ( \ #define SDL_INIT_EVERYTHING ( \
SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \
SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \ SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER \
@ -95,8 +96,8 @@ extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags);
* This function initializes specific SDL subsystems * This function initializes specific SDL subsystems
* *
* Subsystem initialization is ref-counted, you must call * Subsystem initialization is ref-counted, you must call
* SDL_QuitSubSystem for each SDL_InitSubSystem to correctly * SDL_QuitSubSystem() for each SDL_InitSubSystem() to correctly
* shutdown a subsystem manually (or call SDL_Quit to force shutdown). * shutdown a subsystem manually (or call SDL_Quit() to force shutdown).
* If a subsystem is already loaded then this call will * If a subsystem is already loaded then this call will
* increase the ref-count and return. * increase the ref-count and return.
*/ */
@ -127,6 +128,6 @@ extern DECLSPEC void SDLCALL SDL_Quit(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_H */ #endif /* SDL_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_assert_h #ifndef SDL_assert_h_
#define _SDL_assert_h #define SDL_assert_h_
#include "SDL_config.h" #include "SDL_config.h"
@ -51,9 +51,11 @@ assert can have unique static variables associated with it.
/* Don't include intrin.h here because it contains C++ code */ /* Don't include intrin.h here because it contains C++ code */
extern void __cdecl __debugbreak(void); extern void __cdecl __debugbreak(void);
#define SDL_TriggerBreakpoint() __debugbreak() #define SDL_TriggerBreakpoint() __debugbreak()
#elif (!defined(__NACL__) && defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) #elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) )
#define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" )
#elif defined(HAVE_SIGNAL_H) #elif defined(__386__) && defined(__WATCOMC__)
#define SDL_TriggerBreakpoint() { _asm { int 0x03 } }
#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__)
#include <signal.h> #include <signal.h>
#define SDL_TriggerBreakpoint() raise(SIGTRAP) #define SDL_TriggerBreakpoint() raise(SIGTRAP)
#else #else
@ -63,7 +65,7 @@ assert can have unique static variables associated with it.
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */
# define SDL_FUNCTION __func__ # define SDL_FUNCTION __func__
#elif ((__GNUC__ >= 2) || defined(_MSC_VER)) #elif ((__GNUC__ >= 2) || defined(_MSC_VER) || defined (__WATCOMC__))
# define SDL_FUNCTION __FUNCTION__ # define SDL_FUNCTION __FUNCTION__
#else #else
# define SDL_FUNCTION "???" # define SDL_FUNCTION "???"
@ -201,7 +203,7 @@ typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)(
* *
* This callback is NOT reset to SDL's internal handler upon SDL_Quit()! * This callback is NOT reset to SDL's internal handler upon SDL_Quit()!
* *
* \return SDL_AssertState value of how to handle the assertion failure. * Return SDL_AssertState value of how to handle the assertion failure.
* *
* \param handler Callback function, called when an assertion fails. * \param handler Callback function, called when an assertion fails.
* \param userdata A pointer passed to the callback as-is. * \param userdata A pointer passed to the callback as-is.
@ -250,7 +252,7 @@ extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puse
* <code> * <code>
* const SDL_AssertData *item = SDL_GetAssertionReport(); * const SDL_AssertData *item = SDL_GetAssertionReport();
* while (item) { * while (item) {
* printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n", * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n",
* item->condition, item->function, item->filename, * item->condition, item->function, item->filename,
* item->linenum, item->trigger_count, * item->linenum, item->trigger_count,
* item->always_ignore ? "yes" : "no"); * item->always_ignore ? "yes" : "no");
@ -284,6 +286,6 @@ extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_assert_h */ #endif /* SDL_assert_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -56,8 +56,8 @@
* All of the atomic operations that modify memory are full memory barriers. * All of the atomic operations that modify memory are full memory barriers.
*/ */
#ifndef _SDL_atomic_h_ #ifndef SDL_atomic_h_
#define _SDL_atomic_h_ #define SDL_atomic_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_platform.h" #include "SDL_platform.h"
@ -118,13 +118,16 @@ extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock);
* The compiler barrier prevents the compiler from reordering * The compiler barrier prevents the compiler from reordering
* reads and writes to globally visible variables across the call. * reads and writes to globally visible variables across the call.
*/ */
#if defined(_MSC_VER) && (_MSC_VER > 1200) #if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
void _ReadWriteBarrier(void); void _ReadWriteBarrier(void);
#pragma intrinsic(_ReadWriteBarrier) #pragma intrinsic(_ReadWriteBarrier)
#define SDL_CompilerBarrier() _ReadWriteBarrier() #define SDL_CompilerBarrier() _ReadWriteBarrier()
#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) #elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120))
/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ /* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */
#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") #define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory")
#elif defined(__WATCOMC__)
extern _inline void SDL_CompilerBarrier (void);
#pragma aux SDL_CompilerBarrier = "" parm [] modify exact [];
#else #else
#define SDL_CompilerBarrier() \ #define SDL_CompilerBarrier() \
{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } { SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); }
@ -149,6 +152,9 @@ void _ReadWriteBarrier(void);
* For more information on these semantics, take a look at the blog post: * For more information on these semantics, take a look at the blog post:
* http://preshing.com/20120913/acquire-and-release-semantics * http://preshing.com/20120913/acquire-and-release-semantics
*/ */
extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void);
extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void);
#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) #if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__))
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory")
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory")
@ -156,11 +162,11 @@ void _ReadWriteBarrier(void);
#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) #if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__)
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory")
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory")
#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_5TE__)
#ifdef __thumb__ #ifdef __thumb__
/* The mcr instruction isn't available in thumb mode, use real functions */ /* The mcr instruction isn't available in thumb mode, use real functions */
extern DECLSPEC void SDLCALL SDL_MemoryBarrierRelease(); #define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction()
extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquire(); #define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction()
#else #else
#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") #define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") #define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory")
@ -263,6 +269,6 @@ extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a);
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_atomic_h_ */ #endif /* SDL_atomic_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Access to the raw audio mixing buffer for the SDL library. * Access to the raw audio mixing buffer for the SDL library.
*/ */
#ifndef _SDL_audio_h #ifndef SDL_audio_h_
#define _SDL_audio_h #define SDL_audio_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -164,6 +164,15 @@ typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream,
/** /**
* The calculated values in this structure are calculated by SDL_OpenAudio(). * The calculated values in this structure are calculated by SDL_OpenAudio().
*
* For multi-channel audio, the default SDL channel mapping is:
* 2: FL FR (stereo)
* 3: FL FR LFE (2.1 surround)
* 4: FL FR BL BR (quad)
* 5: FL FR FC BL BR (quad + center)
* 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR)
* 7: FL FR FC LFE BC SL SR (6.1 surround)
* 8: FL FR FC LFE BL BR SL SR (7.1 surround)
*/ */
typedef struct SDL_AudioSpec typedef struct SDL_AudioSpec
{ {
@ -171,7 +180,7 @@ typedef struct SDL_AudioSpec
SDL_AudioFormat format; /**< Audio data format */ SDL_AudioFormat format; /**< Audio data format */
Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */
Uint8 silence; /**< Audio buffer silence value (calculated) */ Uint8 silence; /**< Audio buffer silence value (calculated) */
Uint16 samples; /**< Audio buffer size in samples (power of 2) */ Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */
Uint16 padding; /**< Necessary for some compile environments */ Uint16 padding; /**< Necessary for some compile environments */
Uint32 size; /**< Audio buffer size in bytes (calculated) */ Uint32 size; /**< Audio buffer size in bytes (calculated) */
SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */
@ -184,7 +193,23 @@ typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt,
SDL_AudioFormat format); SDL_AudioFormat format);
/** /**
* A structure to hold a set of audio conversion filters and buffers. * \brief Upper limit of filters in SDL_AudioCVT
*
* The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is
* currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers,
* one of which is the terminating NULL pointer.
*/
#define SDL_AUDIOCVT_MAX_FILTERS 9
/**
* \struct SDL_AudioCVT
* \brief A structure to hold a set of audio conversion filters and buffers.
*
* Note that various parts of the conversion pipeline can take advantage
* of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require
* you to pass it aligned data, but can possibly run much faster if you
* set both its (buf) field to a pointer that is aligned to 16 bytes, and its
* (len) field to something that's a multiple of 16, if possible.
*/ */
#ifdef __GNUC__ #ifdef __GNUC__
/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't /* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't
@ -208,7 +233,7 @@ typedef struct SDL_AudioCVT
int len_cvt; /**< Length of converted audio buffer */ int len_cvt; /**< Length of converted audio buffer */
int len_mult; /**< buffer must be len*len_mult big */ int len_mult; /**< buffer must be len*len_mult big */
double len_ratio; /**< Given len, final size is len*len_ratio */ double len_ratio; /**< Given len, final size is len*len_ratio */
SDL_AudioFilter filters[10]; /**< Filter list */ SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */
int filter_index; /**< Current audio conversion function */ int filter_index; /**< Current audio conversion function */
} SDL_AUDIOCVT_PACKED SDL_AudioCVT; } SDL_AUDIOCVT_PACKED SDL_AudioCVT;
@ -278,7 +303,8 @@ extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void);
* protect data structures that it accesses by calling SDL_LockAudio() * protect data structures that it accesses by calling SDL_LockAudio()
* and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL * and SDL_UnlockAudio() in your code. Alternately, you may pass a NULL
* pointer here, and call SDL_QueueAudio() with some frequency, to queue * pointer here, and call SDL_QueueAudio() with some frequency, to queue
* more audio samples to be played. * more audio samples to be played (or for capture devices, call
* SDL_DequeueAudio() with some frequency, to obtain audio samples).
* - \c desired->userdata is passed as the first parameter to your callback * - \c desired->userdata is passed as the first parameter to your callback
* function. If you passed a NULL callback, this value is ignored. * function. If you passed a NULL callback, this value is ignored.
* *
@ -433,10 +459,10 @@ extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf);
* This function takes a source format and rate and a destination format * This function takes a source format and rate and a destination format
* and rate, and initializes the \c cvt structure with information needed * and rate, and initializes the \c cvt structure with information needed
* by SDL_ConvertAudio() to convert a buffer of audio data from one format * by SDL_ConvertAudio() to convert a buffer of audio data from one format
* to the other. * to the other. An unsupported format causes an error and -1 will be returned.
* *
* \return -1 if the format conversion is not supported, 0 if there's * \return 0 if no conversion is needed, 1 if the audio filter is set up,
* no conversion needed, or 1 if the audio filter is set up. * or -1 on error.
*/ */
extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
SDL_AudioFormat src_format, SDL_AudioFormat src_format,
@ -455,9 +481,137 @@ extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt,
* The data conversion may expand the size of the audio data, so the buffer * The data conversion may expand the size of the audio data, so the buffer
* \c cvt->buf should be allocated after the \c cvt structure is initialized by * \c cvt->buf should be allocated after the \c cvt structure is initialized by
* SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long. * SDL_BuildAudioCVT(), and should be \c cvt->len*cvt->len_mult bytes long.
*
* \return 0 on success or -1 if \c cvt->buf is NULL.
*/ */
extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt);
/* SDL_AudioStream is a new audio conversion interface.
The benefits vs SDL_AudioCVT:
- it can handle resampling data in chunks without generating
artifacts, when it doesn't have the complete buffer available.
- it can handle incoming data in any variable size.
- You push data as you have it, and pull it when you need it
*/
/* this is opaque to the outside world. */
struct _SDL_AudioStream;
typedef struct _SDL_AudioStream SDL_AudioStream;
/**
* Create a new audio stream
*
* \param src_format The format of the source audio
* \param src_channels The number of channels of the source audio
* \param src_rate The sampling rate of the source audio
* \param dst_format The format of the desired audio output
* \param dst_channels The number of channels of the desired audio output
* \param dst_rate The sampling rate of the desired audio output
* \return 0 on success, or -1 on error.
*
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamFlush
* \sa SDL_AudioStreamClear
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format,
const Uint8 src_channels,
const int src_rate,
const SDL_AudioFormat dst_format,
const Uint8 dst_channels,
const int dst_rate);
/**
* Add data to be converted/resampled to the stream
*
* \param stream The stream the audio data is being added to
* \param buf A pointer to the audio data to add
* \param int The number of bytes to write to the stream
* \return 0 on success, or -1 on error.
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamFlush
* \sa SDL_AudioStreamClear
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len);
/**
* Get converted/resampled data from the stream
*
* \param stream The stream the audio is being requested from
* \param buf A buffer to fill with audio data
* \param len The maximum number of bytes to fill
* \return The number of bytes read from the stream, or -1 on error
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamFlush
* \sa SDL_AudioStreamClear
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len);
/**
* Get the number of converted/resampled bytes available. The stream may be
* buffering data behind the scenes until it has enough to resample
* correctly, so this number might be lower than what you expect, or even
* be zero. Add more data or flush the stream if you need the data now.
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamFlush
* \sa SDL_AudioStreamClear
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream);
/**
* Tell the stream that you're done sending data, and anything being buffered
* should be converted/resampled and made available immediately.
*
* It is legal to add more data to a stream after flushing, but there will
* be audio gaps in the output. Generally this is intended to signal the
* end of input, so the complete output becomes available.
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamClear
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream);
/**
* Clear any pending data in the stream without converting it
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamFlush
* \sa SDL_FreeAudioStream
*/
extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream);
/**
* Free an audio stream
*
* \sa SDL_NewAudioStream
* \sa SDL_AudioStreamPut
* \sa SDL_AudioStreamGet
* \sa SDL_AudioStreamAvailable
* \sa SDL_AudioStreamFlush
* \sa SDL_AudioStreamClear
*/
extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream);
#define SDL_MIX_MAXVOLUME 128 #define SDL_MIX_MAXVOLUME 128
/** /**
* This takes two audio buffers of the playing audio format and mixes * This takes two audio buffers of the playing audio format and mixes
@ -482,6 +636,10 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
/** /**
* Queue more audio on non-callback devices. * Queue more audio on non-callback devices.
* *
* (If you are looking to retrieve queued audio from a non-callback capture
* device, you want SDL_DequeueAudio() instead. This will return -1 to
* signify an error if you use it with capture devices.)
*
* SDL offers two ways to feed audio to the device: you can either supply a * SDL offers two ways to feed audio to the device: you can either supply a
* callback that SDL triggers with some frequency to obtain more audio * callback that SDL triggers with some frequency to obtain more audio
* (pull method), or you can supply no callback, and then SDL will expect * (pull method), or you can supply no callback, and then SDL will expect
@ -509,28 +667,83 @@ extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst,
* \param dev The device ID to which we will queue audio. * \param dev The device ID to which we will queue audio.
* \param data The data to queue to the device for later playback. * \param data The data to queue to the device for later playback.
* \param len The number of bytes (not samples!) to which (data) points. * \param len The number of bytes (not samples!) to which (data) points.
* \return zero on success, -1 on error. * \return 0 on success, or -1 on error.
* *
* \sa SDL_GetQueuedAudioSize * \sa SDL_GetQueuedAudioSize
* \sa SDL_ClearQueuedAudio * \sa SDL_ClearQueuedAudio
*/ */
extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len);
/**
* Dequeue more audio on non-callback devices.
*
* (If you are looking to queue audio for output on a non-callback playback
* device, you want SDL_QueueAudio() instead. This will always return 0
* if you use it with playback devices.)
*
* SDL offers two ways to retrieve audio from a capture device: you can
* either supply a callback that SDL triggers with some frequency as the
* device records more audio data, (push method), or you can supply no
* callback, and then SDL will expect you to retrieve data at regular
* intervals (pull method) with this function.
*
* There are no limits on the amount of data you can queue, short of
* exhaustion of address space. Data from the device will keep queuing as
* necessary without further intervention from you. This means you will
* eventually run out of memory if you aren't routinely dequeueing data.
*
* Capture devices will not queue data when paused; if you are expecting
* to not need captured audio for some length of time, use
* SDL_PauseAudioDevice() to stop the capture device from queueing more
* data. This can be useful during, say, level loading times. When
* unpaused, capture devices will start queueing data from that point,
* having flushed any capturable data available while paused.
*
* This function is thread-safe, but dequeueing from the same device from
* two threads at once does not promise which thread will dequeued data
* first.
*
* You may not dequeue audio from a device that is using an
* application-supplied callback; doing so returns an error. You have to use
* the audio callback, or dequeue audio with this function, but not both.
*
* You should not call SDL_LockAudio() on the device before queueing; SDL
* handles locking internally for this function.
*
* \param dev The device ID from which we will dequeue audio.
* \param data A pointer into where audio data should be copied.
* \param len The number of bytes (not samples!) to which (data) points.
* \return number of bytes dequeued, which could be less than requested.
*
* \sa SDL_GetQueuedAudioSize
* \sa SDL_ClearQueuedAudio
*/
extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len);
/** /**
* Get the number of bytes of still-queued audio. * Get the number of bytes of still-queued audio.
* *
* This is the number of bytes that have been queued for playback with * For playback device:
* SDL_QueueAudio(), but have not yet been sent to the hardware.
* *
* Once we've sent it to the hardware, this function can not decide the exact * This is the number of bytes that have been queued for playback with
* byte boundary of what has been played. It's possible that we just gave the * SDL_QueueAudio(), but have not yet been sent to the hardware. This
* hardware several kilobytes right before you called this function, but it * number may shrink at any time, so this only informs of pending data.
* hasn't played any of it yet, or maybe half of it, etc. *
* Once we've sent it to the hardware, this function can not decide the
* exact byte boundary of what has been played. It's possible that we just
* gave the hardware several kilobytes right before you called this
* function, but it hasn't played any of it yet, or maybe half of it, etc.
*
* For capture devices:
*
* This is the number of bytes that have been captured by the device and
* are waiting for you to dequeue. This number may grow at any time, so
* this only informs of the lower-bound of available data.
* *
* You may not queue audio on a device that is using an application-supplied * You may not queue audio on a device that is using an application-supplied
* callback; calling this function on such a device always returns 0. * callback; calling this function on such a device always returns 0.
* You have to use the audio callback or queue audio with SDL_QueueAudio(), * You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
* but not both. * the audio callback, but not both.
* *
* You should not call SDL_LockAudio() on the device before querying; SDL * You should not call SDL_LockAudio() on the device before querying; SDL
* handles locking internally for this function. * handles locking internally for this function.
@ -544,10 +757,17 @@ extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *da
extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
/** /**
* Drop any queued audio data waiting to be sent to the hardware. * Drop any queued audio data. For playback devices, this is any queued data
* still waiting to be submitted to the hardware. For capture devices, this
* is any data that was queued by the device that hasn't yet been dequeued by
* the application.
* *
* Immediately after this call, SDL_GetQueuedAudioSize() will return 0 and * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For
* the hardware will start playing silence if more audio isn't queued. * playback devices, the hardware will start playing silence if more audio
* isn't queued. Unpaused capture devices will start filling the queue again
* as soon as they have more data available (which, depending on the state
* of the hardware and the thread, could be before this function call
* returns!).
* *
* This will not prevent playback of queued audio that's already been sent * This will not prevent playback of queued audio that's already been sent
* to the hardware, as we can not undo that, so expect there to be some * to the hardware, as we can not undo that, so expect there to be some
@ -557,8 +777,8 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev);
* *
* You may not queue audio on a device that is using an application-supplied * You may not queue audio on a device that is using an application-supplied
* callback; calling this function on such a device is always a no-op. * callback; calling this function on such a device is always a no-op.
* You have to use the audio callback or queue audio with SDL_QueueAudio(), * You have to queue audio with SDL_QueueAudio()/SDL_DequeueAudio(), or use
* but not both. * the audio callback, but not both.
* *
* You should not call SDL_LockAudio() on the device before clearing the * You should not call SDL_LockAudio() on the device before clearing the
* queue; SDL handles locking internally for this function. * queue; SDL handles locking internally for this function.
@ -600,6 +820,6 @@ extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_audio_h */ #endif /* SDL_audio_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Functions for fiddling with bits and bitmasks. * Functions for fiddling with bits and bitmasks.
*/ */
#ifndef _SDL_bits_h #ifndef SDL_bits_h_
#define _SDL_bits_h #define SDL_bits_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -47,10 +47,20 @@ extern "C" {
* *
* \return Index of the most significant bit, or -1 if the value is 0. * \return Index of the most significant bit, or -1 if the value is 0.
*/ */
#if defined(__WATCOMC__) && defined(__386__)
extern _inline int _SDL_clz_watcom (Uint32);
#pragma aux _SDL_clz_watcom = \
"bsr eax, eax" \
"xor eax, 31" \
parm [eax] nomemory \
value [eax] \
modify exact [eax] nomemory;
#endif
SDL_FORCE_INLINE int SDL_FORCE_INLINE int
SDL_MostSignificantBitIndex32(Uint32 x) SDL_MostSignificantBitIndex32(Uint32 x)
{ {
#if defined(__GNUC__) && __GNUC__ >= 4 #if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
/* Count Leading Zeroes builtin in GCC. /* Count Leading Zeroes builtin in GCC.
* http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html
*/ */
@ -58,6 +68,11 @@ SDL_MostSignificantBitIndex32(Uint32 x)
return -1; return -1;
} }
return 31 - __builtin_clz(x); return 31 - __builtin_clz(x);
#elif defined(__WATCOMC__) && defined(__386__)
if (x == 0) {
return -1;
}
return 31 - _SDL_clz_watcom(x);
#else #else
/* Based off of Bit Twiddling Hacks by Sean Eron Anderson /* Based off of Bit Twiddling Hacks by Sean Eron Anderson
* <seander@cs.stanford.edu>, released in the public domain. * <seander@cs.stanford.edu>, released in the public domain.
@ -92,6 +107,6 @@ SDL_MostSignificantBitIndex32(Uint32 x)
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_bits_h */ #endif /* SDL_bits_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Header file declaring the SDL_BlendMode enumeration * Header file declaring the SDL_BlendMode enumeration
*/ */
#ifndef _SDL_blendmode_h #ifndef SDL_blendmode_h_
#define _SDL_blendmode_h #define SDL_blendmode_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -47,17 +47,74 @@ typedef enum
SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending
dstRGB = (srcRGB * srcA) + dstRGB dstRGB = (srcRGB * srcA) + dstRGB
dstA = dstA */ dstA = dstA */
SDL_BLENDMODE_MOD = 0x00000004 /**< color modulate SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate
dstRGB = srcRGB * dstRGB dstRGB = srcRGB * dstRGB
dstA = dstA */ dstA = dstA */
SDL_BLENDMODE_INVALID = 0x7FFFFFFF
/* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */
} SDL_BlendMode; } SDL_BlendMode;
/**
* \brief The blend operation used when combining source and destination pixel components
*/
typedef enum
{
SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */
SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */
SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */
SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D11 */
SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D11 */
} SDL_BlendOperation;
/**
* \brief The normalized factor used to multiply pixel components
*/
typedef enum
{
SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */
SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */
SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */
SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */
SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */
SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */
SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */
SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */
SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */
SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */
} SDL_BlendFactor;
/**
* \brief Create a custom blend mode, which may or may not be supported by a given renderer
*
* \param srcColorFactor
* \param dstColorFactor
* \param colorOperation
* \param srcAlphaFactor
* \param dstAlphaFactor
* \param alphaOperation
*
* The result of the blend mode operation will be:
* dstRGB = dstRGB * dstColorFactor colorOperation srcRGB * srcColorFactor
* and
* dstA = dstA * dstAlphaFactor alphaOperation srcA * srcAlphaFactor
*/
extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor,
SDL_BlendFactor dstColorFactor,
SDL_BlendOperation colorOperation,
SDL_BlendFactor srcAlphaFactor,
SDL_BlendFactor dstAlphaFactor,
SDL_BlendOperation alphaOperation);
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_blendmode_h */ #endif /* SDL_blendmode_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL clipboard handling * Include file for SDL clipboard handling
*/ */
#ifndef _SDL_clipboard_h #ifndef SDL_clipboard_h_
#define _SDL_clipboard_h #define SDL_clipboard_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -66,6 +66,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_clipboard_h */ #endif /* SDL_clipboard_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,9 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_config_windows_h #ifndef SDL_config_windows_h_
#define _SDL_config_windows_h #define SDL_config_windows_h_
#define SDL_config_h_
#include "SDL_platform.h" #include "SDL_platform.h"
@ -85,12 +86,14 @@ typedef unsigned int uintptr_t;
/* This is disabled by default to avoid C runtime dependencies and manifest requirements */ /* This is disabled by default to avoid C runtime dependencies and manifest requirements */
#ifdef HAVE_LIBC #ifdef HAVE_LIBC
/* Useful headers */ /* Useful headers */
#define HAVE_STDIO_H 1
#define STDC_HEADERS 1 #define STDC_HEADERS 1
#define HAVE_STRING_H 1
#define HAVE_CTYPE_H 1 #define HAVE_CTYPE_H 1
#define HAVE_FLOAT_H 1
#define HAVE_LIMITS_H 1
#define HAVE_MATH_H 1 #define HAVE_MATH_H 1
#define HAVE_SIGNAL_H 1 #define HAVE_SIGNAL_H 1
#define HAVE_STDIO_H 1
#define HAVE_STRING_H 1
/* C library functions */ /* C library functions */
#define HAVE_MALLOC 1 #define HAVE_MALLOC 1
@ -139,12 +142,19 @@ typedef unsigned int uintptr_t;
#define HAVE_SQRTF 1 #define HAVE_SQRTF 1
#define HAVE_TAN 1 #define HAVE_TAN 1
#define HAVE_TANF 1 #define HAVE_TANF 1
#define HAVE__COPYSIGN 1
#if defined(_MSC_VER)
/* These functions were added with the VC++ 2013 C runtime library */
#if _MSC_VER >= 1800 #if _MSC_VER >= 1800
#define HAVE_STRTOLL 1 #define HAVE_STRTOLL 1
#define HAVE_VSSCANF 1 #define HAVE_VSSCANF 1
#define HAVE_COPYSIGN 1
#define HAVE_SCALBN 1 #define HAVE_SCALBN 1
#endif #endif
/* This function is available with at least the VC++ 2008 C runtime library */
#if _MSC_VER >= 1400
#define HAVE__FSEEKI64 1
#endif
#endif
#if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES) #if !defined(_MSC_VER) || defined(_USE_MATH_DEFINES)
#define HAVE_M_PI 1 #define HAVE_M_PI 1
#endif #endif
@ -154,8 +164,9 @@ typedef unsigned int uintptr_t;
#endif #endif
/* Enable various audio drivers */ /* Enable various audio drivers */
#define SDL_AUDIO_DRIVER_WASAPI 1
#define SDL_AUDIO_DRIVER_DSOUND 1 #define SDL_AUDIO_DRIVER_DSOUND 1
#define SDL_AUDIO_DRIVER_XAUDIO2 1 #define SDL_AUDIO_DRIVER_XAUDIO2 0
#define SDL_AUDIO_DRIVER_WINMM 1 #define SDL_AUDIO_DRIVER_WINMM 1
#define SDL_AUDIO_DRIVER_DISK 1 #define SDL_AUDIO_DRIVER_DISK 1
#define SDL_AUDIO_DRIVER_DUMMY 1 #define SDL_AUDIO_DRIVER_DUMMY 1
@ -206,6 +217,8 @@ typedef unsigned int uintptr_t;
#define SDL_VIDEO_OPENGL_EGL 1 #define SDL_VIDEO_OPENGL_EGL 1
#endif #endif
/* Enable Vulkan support */
#define SDL_VIDEO_VULKAN 1
/* Enable system power support */ /* Enable system power support */
#define SDL_POWER_WINDOWS 1 #define SDL_POWER_WINDOWS 1
@ -218,4 +231,4 @@ typedef unsigned int uintptr_t;
#define SDL_ASSEMBLY_ROUTINES 1 #define SDL_ASSEMBLY_ROUTINES 1
#endif #endif
#endif /* _SDL_config_windows_h */ #endif /* SDL_config_windows_h_ */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,14 +25,20 @@
* CPU feature detection for SDL. * CPU feature detection for SDL.
*/ */
#ifndef _SDL_cpuinfo_h #ifndef SDL_cpuinfo_h_
#define _SDL_cpuinfo_h #define SDL_cpuinfo_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
/* Need to do this here because intrin.h has C++ code in it */ /* Need to do this here because intrin.h has C++ code in it */
/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ /* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */
#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64))
#ifdef __clang__
/* Many of the intrinsics SDL uses are not implemented by clang with Visual Studio */
#undef __MMX__
#undef __SSE__
#undef __SSE2__
#else
#include <intrin.h> #include <intrin.h>
#ifndef _WIN64 #ifndef _WIN64
#define __MMX__ #define __MMX__
@ -40,6 +46,7 @@
#endif #endif
#define __SSE__ #define __SSE__
#define __SSE2__ #define __SSE2__
#endif /* __clang__ */
#elif defined(__MINGW64_VERSION_MAJOR) #elif defined(__MINGW64_VERSION_MAJOR)
#include <intrin.h> #include <intrin.h>
#else #else
@ -61,6 +68,9 @@
#ifdef __SSE2__ #ifdef __SSE2__
#include <emmintrin.h> #include <emmintrin.h>
#endif #endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
#endif #endif
#include "begin_code.h" #include "begin_code.h"
@ -144,6 +154,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void);
*/ */
extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void);
/**
* This function returns true if the CPU has NEON (ARM SIMD) features.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void);
/** /**
* This function returns the amount of RAM configured in the system, in MB. * This function returns the amount of RAM configured in the system, in MB.
*/ */
@ -156,6 +171,6 @@ extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_cpuinfo_h */ #endif /* SDL_cpuinfo_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -132,7 +132,7 @@
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
* This precedes the return type of the function in the function prototype. * This precedes the return type of the function in the function prototype.
*/ */
#if defined(_WIN32) && !defined(__SCITECH_SNAP__) #if defined(_WIN32) && !defined(__SCITECH_SNAP__) && !defined(SDL_VIDEO_STATIC_ANGLE)
# define KHRONOS_APICALL __declspec(dllimport) # define KHRONOS_APICALL __declspec(dllimport)
#elif defined (__SYMBIAN32__) #elif defined (__SYMBIAN32__)
# define KHRONOS_APICALL IMPORT_C # define KHRONOS_APICALL IMPORT_C

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Functions for reading and writing endian-specific values * Functions for reading and writing endian-specific values
*/ */
#ifndef _SDL_endian_h #ifndef SDL_endian_h_
#define _SDL_endian_h #define SDL_endian_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -96,6 +96,12 @@ SDL_Swap16(Uint16 x)
__asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc");
return x; return x;
} }
#elif defined(__WATCOMC__) && defined(__386__)
extern _inline Uint16 SDL_Swap16(Uint16);
#pragma aux SDL_Swap16 = \
"xchg al, ah" \
parm [ax] \
modify [ax];
#else #else
SDL_FORCE_INLINE Uint16 SDL_FORCE_INLINE Uint16
SDL_Swap16(Uint16 x) SDL_Swap16(Uint16 x)
@ -136,6 +142,21 @@ SDL_Swap32(Uint32 x)
__asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc");
return x; return x;
} }
#elif defined(__WATCOMC__) && defined(__386__)
extern _inline Uint32 SDL_Swap32(Uint32);
#ifndef __SW_3 /* 486+ */
#pragma aux SDL_Swap32 = \
"bswap eax" \
parm [eax] \
modify [eax];
#else /* 386-only */
#pragma aux SDL_Swap32 = \
"xchg al, ah" \
"ror eax, 16" \
"xchg al, ah" \
parm [eax] \
modify [eax];
#endif
#else #else
SDL_FORCE_INLINE Uint32 SDL_FORCE_INLINE Uint32
SDL_Swap32(Uint32 x) SDL_Swap32(Uint32 x)
@ -234,6 +255,6 @@ SDL_SwapFloat(float x)
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_endian_h */ #endif /* SDL_endian_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Simple error message routines for SDL. * Simple error message routines for SDL.
*/ */
#ifndef _SDL_error_h #ifndef SDL_error_h_
#define _SDL_error_h #define SDL_error_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -71,6 +71,6 @@ extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_error_h */ #endif /* SDL_error_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL event handling. * Include file for SDL event handling.
*/ */
#ifndef _SDL_events_h #ifndef SDL_events_h_
#define _SDL_events_h #define SDL_events_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -136,6 +136,9 @@ typedef enum
/* Drag and drop events */ /* Drag and drop events */
SDL_DROPFILE = 0x1000, /**< The system requests a file open */ SDL_DROPFILE = 0x1000, /**< The system requests a file open */
SDL_DROPTEXT, /**< text/plain drag-and-drop event */
SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */
SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */
/* Audio hotplug events */ /* Audio hotplug events */
SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */
@ -162,7 +165,7 @@ typedef enum
typedef struct SDL_CommonEvent typedef struct SDL_CommonEvent
{ {
Uint32 type; Uint32 type;
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
} SDL_CommonEvent; } SDL_CommonEvent;
/** /**
@ -171,7 +174,7 @@ typedef struct SDL_CommonEvent
typedef struct SDL_WindowEvent typedef struct SDL_WindowEvent
{ {
Uint32 type; /**< ::SDL_WINDOWEVENT */ Uint32 type; /**< ::SDL_WINDOWEVENT */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The associated window */ Uint32 windowID; /**< The associated window */
Uint8 event; /**< ::SDL_WindowEventID */ Uint8 event; /**< ::SDL_WindowEventID */
Uint8 padding1; Uint8 padding1;
@ -187,7 +190,7 @@ typedef struct SDL_WindowEvent
typedef struct SDL_KeyboardEvent typedef struct SDL_KeyboardEvent
{ {
Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */ Uint32 type; /**< ::SDL_KEYDOWN or ::SDL_KEYUP */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with keyboard focus, if any */ Uint32 windowID; /**< The window with keyboard focus, if any */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
Uint8 repeat; /**< Non-zero if this is a key repeat */ Uint8 repeat; /**< Non-zero if this is a key repeat */
@ -203,7 +206,7 @@ typedef struct SDL_KeyboardEvent
typedef struct SDL_TextEditingEvent typedef struct SDL_TextEditingEvent
{ {
Uint32 type; /**< ::SDL_TEXTEDITING */ Uint32 type; /**< ::SDL_TEXTEDITING */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with keyboard focus, if any */ Uint32 windowID; /**< The window with keyboard focus, if any */
char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */
Sint32 start; /**< The start cursor of selected editing text */ Sint32 start; /**< The start cursor of selected editing text */
@ -218,7 +221,7 @@ typedef struct SDL_TextEditingEvent
typedef struct SDL_TextInputEvent typedef struct SDL_TextInputEvent
{ {
Uint32 type; /**< ::SDL_TEXTINPUT */ Uint32 type; /**< ::SDL_TEXTINPUT */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with keyboard focus, if any */ Uint32 windowID; /**< The window with keyboard focus, if any */
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */ char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text */
} SDL_TextInputEvent; } SDL_TextInputEvent;
@ -229,7 +232,7 @@ typedef struct SDL_TextInputEvent
typedef struct SDL_MouseMotionEvent typedef struct SDL_MouseMotionEvent
{ {
Uint32 type; /**< ::SDL_MOUSEMOTION */ Uint32 type; /**< ::SDL_MOUSEMOTION */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 windowID; /**< The window with mouse focus, if any */
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Uint32 state; /**< The current button state */ Uint32 state; /**< The current button state */
@ -245,7 +248,7 @@ typedef struct SDL_MouseMotionEvent
typedef struct SDL_MouseButtonEvent typedef struct SDL_MouseButtonEvent
{ {
Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */ Uint32 type; /**< ::SDL_MOUSEBUTTONDOWN or ::SDL_MOUSEBUTTONUP */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 windowID; /**< The window with mouse focus, if any */
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Uint8 button; /**< The mouse button index */ Uint8 button; /**< The mouse button index */
@ -262,7 +265,7 @@ typedef struct SDL_MouseButtonEvent
typedef struct SDL_MouseWheelEvent typedef struct SDL_MouseWheelEvent
{ {
Uint32 type; /**< ::SDL_MOUSEWHEEL */ Uint32 type; /**< ::SDL_MOUSEWHEEL */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The window with mouse focus, if any */ Uint32 windowID; /**< The window with mouse focus, if any */
Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */
Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */
@ -276,7 +279,7 @@ typedef struct SDL_MouseWheelEvent
typedef struct SDL_JoyAxisEvent typedef struct SDL_JoyAxisEvent
{ {
Uint32 type; /**< ::SDL_JOYAXISMOTION */ Uint32 type; /**< ::SDL_JOYAXISMOTION */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 axis; /**< The joystick axis index */ Uint8 axis; /**< The joystick axis index */
Uint8 padding1; Uint8 padding1;
@ -292,7 +295,7 @@ typedef struct SDL_JoyAxisEvent
typedef struct SDL_JoyBallEvent typedef struct SDL_JoyBallEvent
{ {
Uint32 type; /**< ::SDL_JOYBALLMOTION */ Uint32 type; /**< ::SDL_JOYBALLMOTION */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 ball; /**< The joystick trackball index */ Uint8 ball; /**< The joystick trackball index */
Uint8 padding1; Uint8 padding1;
@ -308,7 +311,7 @@ typedef struct SDL_JoyBallEvent
typedef struct SDL_JoyHatEvent typedef struct SDL_JoyHatEvent
{ {
Uint32 type; /**< ::SDL_JOYHATMOTION */ Uint32 type; /**< ::SDL_JOYHATMOTION */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 hat; /**< The joystick hat index */ Uint8 hat; /**< The joystick hat index */
Uint8 value; /**< The hat position value. Uint8 value; /**< The hat position value.
@ -328,7 +331,7 @@ typedef struct SDL_JoyHatEvent
typedef struct SDL_JoyButtonEvent typedef struct SDL_JoyButtonEvent
{ {
Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */ Uint32 type; /**< ::SDL_JOYBUTTONDOWN or ::SDL_JOYBUTTONUP */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 button; /**< The joystick button index */ Uint8 button; /**< The joystick button index */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
@ -342,7 +345,7 @@ typedef struct SDL_JoyButtonEvent
typedef struct SDL_JoyDeviceEvent typedef struct SDL_JoyDeviceEvent
{ {
Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */ Uint32 type; /**< ::SDL_JOYDEVICEADDED or ::SDL_JOYDEVICEREMOVED */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */
} SDL_JoyDeviceEvent; } SDL_JoyDeviceEvent;
@ -353,7 +356,7 @@ typedef struct SDL_JoyDeviceEvent
typedef struct SDL_ControllerAxisEvent typedef struct SDL_ControllerAxisEvent
{ {
Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */ Uint32 type; /**< ::SDL_CONTROLLERAXISMOTION */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */
Uint8 padding1; Uint8 padding1;
@ -370,7 +373,7 @@ typedef struct SDL_ControllerAxisEvent
typedef struct SDL_ControllerButtonEvent typedef struct SDL_ControllerButtonEvent
{ {
Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */ Uint32 type; /**< ::SDL_CONTROLLERBUTTONDOWN or ::SDL_CONTROLLERBUTTONUP */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_JoystickID which; /**< The joystick instance id */ SDL_JoystickID which; /**< The joystick instance id */
Uint8 button; /**< The controller button (SDL_GameControllerButton) */ Uint8 button; /**< The controller button (SDL_GameControllerButton) */
Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */ Uint8 state; /**< ::SDL_PRESSED or ::SDL_RELEASED */
@ -385,7 +388,7 @@ typedef struct SDL_ControllerButtonEvent
typedef struct SDL_ControllerDeviceEvent typedef struct SDL_ControllerDeviceEvent
{ {
Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */ Uint32 type; /**< ::SDL_CONTROLLERDEVICEADDED, ::SDL_CONTROLLERDEVICEREMOVED, or ::SDL_CONTROLLERDEVICEREMAPPED */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */
} SDL_ControllerDeviceEvent; } SDL_ControllerDeviceEvent;
@ -395,7 +398,7 @@ typedef struct SDL_ControllerDeviceEvent
typedef struct SDL_AudioDeviceEvent typedef struct SDL_AudioDeviceEvent
{ {
Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */ Uint32 type; /**< ::SDL_AUDIODEVICEADDED, or ::SDL_AUDIODEVICEREMOVED */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */
Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */
Uint8 padding1; Uint8 padding1;
@ -410,7 +413,7 @@ typedef struct SDL_AudioDeviceEvent
typedef struct SDL_TouchFingerEvent typedef struct SDL_TouchFingerEvent
{ {
Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */ Uint32 type; /**< ::SDL_FINGERMOTION or ::SDL_FINGERDOWN or ::SDL_FINGERUP */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_TouchID touchId; /**< The touch device id */ SDL_TouchID touchId; /**< The touch device id */
SDL_FingerID fingerId; SDL_FingerID fingerId;
float x; /**< Normalized in the range 0...1 */ float x; /**< Normalized in the range 0...1 */
@ -427,8 +430,8 @@ typedef struct SDL_TouchFingerEvent
typedef struct SDL_MultiGestureEvent typedef struct SDL_MultiGestureEvent
{ {
Uint32 type; /**< ::SDL_MULTIGESTURE */ Uint32 type; /**< ::SDL_MULTIGESTURE */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_TouchID touchId; /**< The touch device index */ SDL_TouchID touchId; /**< The touch device id */
float dTheta; float dTheta;
float dDist; float dDist;
float x; float x;
@ -444,7 +447,7 @@ typedef struct SDL_MultiGestureEvent
typedef struct SDL_DollarGestureEvent typedef struct SDL_DollarGestureEvent
{ {
Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */ Uint32 type; /**< ::SDL_DOLLARGESTURE or ::SDL_DOLLARRECORD */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_TouchID touchId; /**< The touch device id */ SDL_TouchID touchId; /**< The touch device id */
SDL_GestureID gestureId; SDL_GestureID gestureId;
Uint32 numFingers; Uint32 numFingers;
@ -461,9 +464,10 @@ typedef struct SDL_DollarGestureEvent
*/ */
typedef struct SDL_DropEvent typedef struct SDL_DropEvent
{ {
Uint32 type; /**< ::SDL_DROPFILE */ Uint32 type; /**< ::SDL_DROPBEGIN or ::SDL_DROPFILE or ::SDL_DROPTEXT or ::SDL_DROPCOMPLETE */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
char *file; /**< The file name, which should be freed with SDL_free() */ char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */
Uint32 windowID; /**< The window that was dropped on, if any */
} SDL_DropEvent; } SDL_DropEvent;
@ -473,7 +477,7 @@ typedef struct SDL_DropEvent
typedef struct SDL_QuitEvent typedef struct SDL_QuitEvent
{ {
Uint32 type; /**< ::SDL_QUIT */ Uint32 type; /**< ::SDL_QUIT */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
} SDL_QuitEvent; } SDL_QuitEvent;
/** /**
@ -482,7 +486,7 @@ typedef struct SDL_QuitEvent
typedef struct SDL_OSEvent typedef struct SDL_OSEvent
{ {
Uint32 type; /**< ::SDL_QUIT */ Uint32 type; /**< ::SDL_QUIT */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
} SDL_OSEvent; } SDL_OSEvent;
/** /**
@ -491,7 +495,7 @@ typedef struct SDL_OSEvent
typedef struct SDL_UserEvent typedef struct SDL_UserEvent
{ {
Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */ Uint32 type; /**< ::SDL_USEREVENT through ::SDL_LASTEVENT-1 */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
Uint32 windowID; /**< The associated window if any */ Uint32 windowID; /**< The associated window if any */
Sint32 code; /**< User defined event code */ Sint32 code; /**< User defined event code */
void *data1; /**< User defined data pointer */ void *data1; /**< User defined data pointer */
@ -511,7 +515,7 @@ typedef struct SDL_SysWMmsg SDL_SysWMmsg;
typedef struct SDL_SysWMEvent typedef struct SDL_SysWMEvent
{ {
Uint32 type; /**< ::SDL_SYSWMEVENT */ Uint32 type; /**< ::SDL_SYSWMEVENT */
Uint32 timestamp; Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */
SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */
} SDL_SysWMEvent; } SDL_SysWMEvent;
@ -720,7 +724,7 @@ extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter,
/** /**
* This function allows you to set the state of processing certain events. * This function allows you to set the state of processing certain events.
* - If \c state is set to ::SDL_IGNORE, that event will be automatically * - If \c state is set to ::SDL_IGNORE, that event will be automatically
* dropped from the event queue and will not event be filtered. * dropped from the event queue and will not be filtered.
* - If \c state is set to ::SDL_ENABLE, that event will be processed * - If \c state is set to ::SDL_ENABLE, that event will be processed
* normally. * normally.
* - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the * - If \c state is set to ::SDL_QUERY, SDL_EventState() will return the
@ -745,6 +749,6 @@ extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_events_h */ #endif /* SDL_events_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* \brief Include file for filesystem SDL API functions * \brief Include file for filesystem SDL API functions
*/ */
#ifndef _SDL_filesystem_h #ifndef SDL_filesystem_h_
#define _SDL_filesystem_h #define SDL_filesystem_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -131,6 +131,6 @@ extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_filesystem_h */ #endif /* SDL_filesystem_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL game controller event handling * Include file for SDL game controller event handling
*/ */
#ifndef _SDL_gamecontroller_h #ifndef SDL_gamecontroller_h_
#define _SDL_gamecontroller_h #define SDL_gamecontroller_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -51,7 +51,9 @@ extern "C" {
* SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
*/ */
/* The gamecontroller structure used to identify an SDL game controller */ /**
* The gamecontroller structure used to identify an SDL game controller
*/
struct _SDL_GameController; struct _SDL_GameController;
typedef struct _SDL_GameController SDL_GameController; typedef struct _SDL_GameController SDL_GameController;
@ -87,13 +89,13 @@ typedef struct SDL_GameControllerButtonBind
* To count the number of game controllers in the system for the following: * To count the number of game controllers in the system for the following:
* int nJoysticks = SDL_NumJoysticks(); * int nJoysticks = SDL_NumJoysticks();
* int nGameControllers = 0; * int nGameControllers = 0;
* for ( int i = 0; i < nJoysticks; i++ ) { * for (int i = 0; i < nJoysticks; i++) {
* if ( SDL_IsGameController(i) ) { * if (SDL_IsGameController(i)) {
* nGameControllers++; * nGameControllers++;
* } * }
* } * }
* *
* Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is:
* guid,name,mappings * guid,name,mappings
* *
* Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones.
@ -105,7 +107,7 @@ typedef struct SDL_GameControllerButtonBind
* Buttons can be used as a controller axis and vice versa. * Buttons can be used as a controller axis and vice versa.
* *
* This string shows an example of a valid mapping for a controller * This string shows an example of a valid mapping for a controller
* "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7",
* *
*/ */
@ -117,7 +119,7 @@ typedef struct SDL_GameControllerButtonBind
* *
* \return number of mappings added, -1 on error * \return number of mappings added, -1 on error
*/ */
extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw, int freerw ); extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw);
/** /**
* Load a set of mappings from a file, filtered by the current SDL_GetPlatform() * Load a set of mappings from a file, filtered by the current SDL_GetPlatform()
@ -131,28 +133,41 @@ extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW( SDL_RWops * rw,
* *
* \return 1 if mapping is added, 0 if updated, -1 on error * \return 1 if mapping is added, 0 if updated, -1 on error
*/ */
extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping( const char* mappingString ); extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString);
/**
* Get the number of mappings installed
*
* \return the number of mappings
*/
extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void);
/**
* Get the mapping at a particular index.
*
* \return the mapping string. Must be freed with SDL_free(). Returns NULL if the index is out of range.
*/
extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index);
/** /**
* Get a mapping string for a GUID * Get a mapping string for a GUID
* *
* \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available * \return the mapping string. Must be freed with SDL_free(). Returns NULL if no mapping is available
*/ */
extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID( SDL_JoystickGUID guid ); extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid);
/** /**
* Get a mapping string for an open GameController * Get a mapping string for an open GameController
* *
* \return the mapping string. Must be freed with SDL_free. Returns NULL if no mapping is available * \return the mapping string. Must be freed with SDL_free(). Returns NULL if no mapping is available
*/ */
extern DECLSPEC char * SDLCALL SDL_GameControllerMapping( SDL_GameController * gamecontroller ); extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController * gamecontroller);
/** /**
* Is the joystick on this index supported by the game controller interface? * Is the joystick on this index supported by the game controller interface?
*/ */
extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index);
/** /**
* Get the implementation dependent name of a game controller. * Get the implementation dependent name of a game controller.
* This can be called before any controllers are opened. * This can be called before any controllers are opened.
@ -181,6 +196,24 @@ extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL
*/ */
extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller);
/**
* Get the USB vendor ID of an opened controller, if available.
* If the vendor ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController * gamecontroller);
/**
* Get the USB product ID of an opened controller, if available.
* If the product ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController * gamecontroller);
/**
* Get the product version of an opened controller, if available.
* If the product version isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController * gamecontroller);
/** /**
* Returns SDL_TRUE if the controller has been opened and currently connected, * Returns SDL_TRUE if the controller has been opened and currently connected,
* or SDL_FALSE if it has not. * or SDL_FALSE if it has not.
@ -214,6 +247,12 @@ extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void);
/** /**
* The list of axes available from a controller * The list of axes available from a controller
*
* Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to SDL_JOYSTICK_AXIS_MAX,
* and are centered within ~8000 of zero, though advanced UI will allow users to set
* or autodetect the dead zone, which varies between controllers.
*
* Trigger axis values range from 0 to SDL_JOYSTICK_AXIS_MAX.
*/ */
typedef enum typedef enum
{ {
@ -318,6 +357,6 @@ extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecon
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_gamecontroller_h */ #endif /* SDL_gamecontroller_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL gesture event handling. * Include file for SDL gesture event handling.
*/ */
#ifndef _SDL_gesture_h #ifndef SDL_gesture_h_
#define _SDL_gesture_h #define SDL_gesture_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -82,6 +82,6 @@ extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWo
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_gesture_h */ #endif /* SDL_gesture_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -22,12 +22,12 @@
/** /**
* \file SDL_haptic.h * \file SDL_haptic.h
* *
* \brief The SDL Haptic subsystem allows you to control haptic (force feedback) * \brief The SDL haptic subsystem allows you to control haptic (force feedback)
* devices. * devices.
* *
* The basic usage is as follows: * The basic usage is as follows:
* - Initialize the Subsystem (::SDL_INIT_HAPTIC). * - Initialize the subsystem (::SDL_INIT_HAPTIC).
* - Open a Haptic Device. * - Open a haptic device.
* - SDL_HapticOpen() to open from index. * - SDL_HapticOpen() to open from index.
* - SDL_HapticOpenFromJoystick() to open from an existing joystick. * - SDL_HapticOpenFromJoystick() to open from an existing joystick.
* - Create an effect (::SDL_HapticEffect). * - Create an effect (::SDL_HapticEffect).
@ -104,8 +104,8 @@
* \endcode * \endcode
*/ */
#ifndef _SDL_haptic_h #ifndef SDL_haptic_h_
#define _SDL_haptic_h #define SDL_haptic_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -149,7 +149,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticCondition * \sa SDL_HapticCondition
*/ */
#define SDL_HAPTIC_CONSTANT (1<<0) #define SDL_HAPTIC_CONSTANT (1u<<0)
/** /**
* \brief Sine wave effect supported. * \brief Sine wave effect supported.
@ -158,7 +158,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticPeriodic * \sa SDL_HapticPeriodic
*/ */
#define SDL_HAPTIC_SINE (1<<1) #define SDL_HAPTIC_SINE (1u<<1)
/** /**
* \brief Left/Right effect supported. * \brief Left/Right effect supported.
@ -169,7 +169,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry, * \warning this value was SDL_HAPTIC_SQUARE right before 2.0.0 shipped. Sorry,
* we ran out of bits, and this is important for XInput devices. * we ran out of bits, and this is important for XInput devices.
*/ */
#define SDL_HAPTIC_LEFTRIGHT (1<<2) #define SDL_HAPTIC_LEFTRIGHT (1u<<2)
/* !!! FIXME: put this back when we have more bits in 2.1 */ /* !!! FIXME: put this back when we have more bits in 2.1 */
/* #define SDL_HAPTIC_SQUARE (1<<2) */ /* #define SDL_HAPTIC_SQUARE (1<<2) */
@ -181,7 +181,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticPeriodic * \sa SDL_HapticPeriodic
*/ */
#define SDL_HAPTIC_TRIANGLE (1<<3) #define SDL_HAPTIC_TRIANGLE (1u<<3)
/** /**
* \brief Sawtoothup wave effect supported. * \brief Sawtoothup wave effect supported.
@ -190,7 +190,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticPeriodic * \sa SDL_HapticPeriodic
*/ */
#define SDL_HAPTIC_SAWTOOTHUP (1<<4) #define SDL_HAPTIC_SAWTOOTHUP (1u<<4)
/** /**
* \brief Sawtoothdown wave effect supported. * \brief Sawtoothdown wave effect supported.
@ -199,7 +199,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticPeriodic * \sa SDL_HapticPeriodic
*/ */
#define SDL_HAPTIC_SAWTOOTHDOWN (1<<5) #define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5)
/** /**
* \brief Ramp effect supported. * \brief Ramp effect supported.
@ -208,7 +208,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticRamp * \sa SDL_HapticRamp
*/ */
#define SDL_HAPTIC_RAMP (1<<6) #define SDL_HAPTIC_RAMP (1u<<6)
/** /**
* \brief Spring effect supported - uses axes position. * \brief Spring effect supported - uses axes position.
@ -218,7 +218,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticCondition * \sa SDL_HapticCondition
*/ */
#define SDL_HAPTIC_SPRING (1<<7) #define SDL_HAPTIC_SPRING (1u<<7)
/** /**
* \brief Damper effect supported - uses axes velocity. * \brief Damper effect supported - uses axes velocity.
@ -228,7 +228,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticCondition * \sa SDL_HapticCondition
*/ */
#define SDL_HAPTIC_DAMPER (1<<8) #define SDL_HAPTIC_DAMPER (1u<<8)
/** /**
* \brief Inertia effect supported - uses axes acceleration. * \brief Inertia effect supported - uses axes acceleration.
@ -238,7 +238,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticCondition * \sa SDL_HapticCondition
*/ */
#define SDL_HAPTIC_INERTIA (1<<9) #define SDL_HAPTIC_INERTIA (1u<<9)
/** /**
* \brief Friction effect supported - uses axes movement. * \brief Friction effect supported - uses axes movement.
@ -248,14 +248,14 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticCondition * \sa SDL_HapticCondition
*/ */
#define SDL_HAPTIC_FRICTION (1<<10) #define SDL_HAPTIC_FRICTION (1u<<10)
/** /**
* \brief Custom effect is supported. * \brief Custom effect is supported.
* *
* User defined custom haptic effect. * User defined custom haptic effect.
*/ */
#define SDL_HAPTIC_CUSTOM (1<<11) #define SDL_HAPTIC_CUSTOM (1u<<11)
/* @} *//* Haptic effects */ /* @} *//* Haptic effects */
@ -268,7 +268,7 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticSetGain * \sa SDL_HapticSetGain
*/ */
#define SDL_HAPTIC_GAIN (1<<12) #define SDL_HAPTIC_GAIN (1u<<12)
/** /**
* \brief Device can set autocenter. * \brief Device can set autocenter.
@ -277,24 +277,26 @@ typedef struct _SDL_Haptic SDL_Haptic;
* *
* \sa SDL_HapticSetAutocenter * \sa SDL_HapticSetAutocenter
*/ */
#define SDL_HAPTIC_AUTOCENTER (1<<13) #define SDL_HAPTIC_AUTOCENTER (1u<<13)
/** /**
* \brief Device can be queried for effect status. * \brief Device can be queried for effect status.
* *
* Device can be queried for effect status. * Device supports querying effect status.
* *
* \sa SDL_HapticGetEffectStatus * \sa SDL_HapticGetEffectStatus
*/ */
#define SDL_HAPTIC_STATUS (1<<14) #define SDL_HAPTIC_STATUS (1u<<14)
/** /**
* \brief Device can be paused. * \brief Device can be paused.
* *
* Devices supports being paused.
*
* \sa SDL_HapticPause * \sa SDL_HapticPause
* \sa SDL_HapticUnpause * \sa SDL_HapticUnpause
*/ */
#define SDL_HAPTIC_PAUSE (1<<15) #define SDL_HAPTIC_PAUSE (1u<<15)
/** /**
@ -444,7 +446,7 @@ typedef struct SDL_HapticDirection
/** /**
* \brief A structure containing a template for a Constant effect. * \brief A structure containing a template for a Constant effect.
* *
* The struct is exclusive to the ::SDL_HAPTIC_CONSTANT effect. * This struct is exclusively for the ::SDL_HAPTIC_CONSTANT effect.
* *
* A constant effect applies a constant force in the specified direction * A constant effect applies a constant force in the specified direction
* to the joystick. * to the joystick.
@ -676,6 +678,8 @@ typedef struct SDL_HapticLeftRight
/** /**
* \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect. * \brief A structure containing a template for the ::SDL_HAPTIC_CUSTOM effect.
* *
* This struct is exclusively for the ::SDL_HAPTIC_CUSTOM effect.
*
* A custom force feedback effect is much like a periodic effect, where the * A custom force feedback effect is much like a periodic effect, where the
* application can define its exact shape. You will have to allocate the * application can define its exact shape. You will have to allocate the
* data yourself. Data should consist of channels * samples Uint16 samples. * data yourself. Data should consist of channels * samples Uint16 samples.
@ -804,7 +808,7 @@ typedef union SDL_HapticEffect
extern DECLSPEC int SDLCALL SDL_NumHaptics(void); extern DECLSPEC int SDLCALL SDL_NumHaptics(void);
/** /**
* \brief Get the implementation dependent name of a Haptic device. * \brief Get the implementation dependent name of a haptic device.
* *
* This can be called before any joysticks are opened. * This can be called before any joysticks are opened.
* If no name can be found, this function returns NULL. * If no name can be found, this function returns NULL.
@ -817,9 +821,9 @@ extern DECLSPEC int SDLCALL SDL_NumHaptics(void);
extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index);
/** /**
* \brief Opens a Haptic device for usage. * \brief Opens a haptic device for use.
* *
* The index passed as an argument refers to the N'th Haptic device on this * The index passed as an argument refers to the N'th haptic device on this
* system. * system.
* *
* When opening a haptic device, its gain will be set to maximum and * When opening a haptic device, its gain will be set to maximum and
@ -885,15 +889,15 @@ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void);
* \brief Checks to see if a joystick has haptic features. * \brief Checks to see if a joystick has haptic features.
* *
* \param joystick Joystick to test for haptic capabilities. * \param joystick Joystick to test for haptic capabilities.
* \return 1 if the joystick is haptic, 0 if it isn't * \return SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't
* or -1 if an error ocurred. * or -1 if an error occurred.
* *
* \sa SDL_HapticOpenFromJoystick * \sa SDL_HapticOpenFromJoystick
*/ */
extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick);
/** /**
* \brief Opens a Haptic device for usage from a Joystick device. * \brief Opens a haptic device for use from a joystick device.
* *
* You must still close the haptic device separately. It will not be closed * You must still close the haptic device separately. It will not be closed
* with the joystick. * with the joystick.
@ -913,7 +917,7 @@ extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick *
joystick); joystick);
/** /**
* \brief Closes a Haptic device previously opened with SDL_HapticOpen(). * \brief Closes a haptic device previously opened with SDL_HapticOpen().
* *
* \param haptic Haptic device to close. * \param haptic Haptic device to close.
*/ */
@ -957,7 +961,7 @@ extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic);
* Example: * Example:
* \code * \code
* if (SDL_HapticQuery(haptic) & SDL_HAPTIC_CONSTANT) { * if (SDL_HapticQuery(haptic) & SDL_HAPTIC_CONSTANT) {
* printf("We have constant haptic effect!"); * printf("We have constant haptic effect!\n");
* } * }
* \endcode * \endcode
* *
@ -996,7 +1000,7 @@ extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic,
* *
* \param haptic Haptic device to create the effect on. * \param haptic Haptic device to create the effect on.
* \param effect Properties of the effect to create. * \param effect Properties of the effect to create.
* \return The id of the effect on success or -1 on error. * \return The identifier of the effect on success or -1 on error.
* *
* \sa SDL_HapticUpdateEffect * \sa SDL_HapticUpdateEffect
* \sa SDL_HapticRunEffect * \sa SDL_HapticRunEffect
@ -1008,13 +1012,13 @@ extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic,
/** /**
* \brief Updates the properties of an effect. * \brief Updates the properties of an effect.
* *
* Can be used dynamically, although behaviour when dynamically changing * Can be used dynamically, although behavior when dynamically changing
* direction may be strange. Specifically the effect may reupload itself * direction may be strange. Specifically the effect may reupload itself
* and start playing from the start. You cannot change the type either when * and start playing from the start. You cannot change the type either when
* running SDL_HapticUpdateEffect(). * running SDL_HapticUpdateEffect().
* *
* \param haptic Haptic device that has the effect. * \param haptic Haptic device that has the effect.
* \param effect Effect to update. * \param effect Identifier of the effect to update.
* \param data New effect properties to use. * \param data New effect properties to use.
* \return 0 on success or -1 on error. * \return 0 on success or -1 on error.
* *
@ -1218,6 +1222,6 @@ extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_haptic_h */ #endif /* SDL_haptic_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -36,8 +36,8 @@
* to how they would like the library to work. * to how they would like the library to work.
*/ */
#ifndef _SDL_hints_h #ifndef SDL_hints_h_
#define _SDL_hints_h #define SDL_hints_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -118,6 +118,17 @@ extern "C" {
*/ */
#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG"
/**
* \brief A variable controlling the scaling policy for SDL_RenderSetLogicalSize.
*
* This variable can be set to the following values:
* "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on screen
* "1" or "overscan" - Will zoom the rendering so it fills the entire screen, allowing edges to be drawn offscreen
*
* By default letterbox is used
*/
#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE"
/** /**
* \brief A variable controlling the scaling quality * \brief A variable controlling the scaling quality
* *
@ -210,6 +221,12 @@ extern "C" {
*/ */
#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" #define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN"
/**
* \brief A variable to specify custom icon resource id from RC file on Windows platform
*/
#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON"
#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"
/** /**
* \brief A variable controlling whether the windows message loop is processed by SDL * \brief A variable controlling whether the windows message loop is processed by SDL
* *
@ -233,16 +250,48 @@ extern "C" {
#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" #define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD"
/** /**
* \brief A variable controlling whether relative mouse mode is implemented using mouse warping * \brief A variable setting the speed scale for mouse motion, in floating point, when the mouse is not in relative mode
* */
* This variable can be set to the following values: #define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE"
* "0" - Relative mouse mode uses raw input
* "1" - Relative mouse mode uses mouse warping /**
* * \brief A variable setting the scale for mouse motion, in floating point, when the mouse is in relative mode
* By default SDL will use raw input for relative mouse mode */
*/ #define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE"
/**
* \brief A variable controlling whether relative mouse mode is implemented using mouse warping
*
* This variable can be set to the following values:
* "0" - Relative mouse mode uses raw input
* "1" - Relative mouse mode uses mouse warping
*
* By default SDL will use raw input for relative mouse mode
*/
#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" #define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP"
/**
* \brief Allow mouse click events when clicking to focus an SDL window
*
* This variable can be set to the following values:
* "0" - Ignore mouse clicks that activate a window
* "1" - Generate events for mouse clicks that activate a window
*
* By default SDL will ignore mouse clicks that activate a window
*/
#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH"
/**
* \brief A variable controlling whether touch events should generate synthetic mouse events
*
* This variable can be set to the following values:
* "0" - Touch events will not generate mouse events
* "1" - Touch events will generate mouse events
*
* By default SDL will generate mouse events for touch events
*/
#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS"
/** /**
* \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true. * \brief Minimize your SDL_Window if it loses key focus when in fullscreen mode. Defaults to true.
* *
@ -257,8 +306,8 @@ extern "C" {
* this is problematic. This functionality can be disabled by setting this * this is problematic. This functionality can be disabled by setting this
* hint. * hint.
* *
* As of SDL 2.0.4, SDL_EnableScreenSaver and SDL_DisableScreenSaver accomplish * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver()
* the same thing on iOS. They should be preferred over this hint. * accomplish the same thing on iOS. They should be preferred over this hint.
* *
* This variable can be set to the following values: * This variable can be set to the following values:
* "0" - Enable idle timer * "0" - Enable idle timer
@ -276,7 +325,35 @@ extern "C" {
* "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown"
*/ */
#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" #define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS"
/**
* \brief A variable controlling whether controllers used with the Apple TV
* generate UI events.
*
* When UI events are generated by controller input, the app will be
* backgrounded when the Apple TV remote's menu button is pressed, and when the
* pause or B buttons on gamepads are pressed.
*
* More information about properly making use of controllers for the Apple TV
* can be found here:
* https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/
*
* This variable can be set to the following values:
* "0" - Controller input does not generate UI events (the default).
* "1" - Controller input generates UI events.
*/
#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS"
/**
* \brief A variable controlling whether the Apple TV remote's joystick axes
* will automatically match the rotation of the remote.
*
* This variable can be set to the following values:
* "0" - Remote orientation does not affect joystick axes (the default).
* "1" - Joystick axes are based on the orientation of the remote.
*/
#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION"
/** /**
* \brief A variable controlling whether the Android / iOS built-in * \brief A variable controlling whether the Android / iOS built-in
* accelerometer should be listed as a joystick device, rather than listing * accelerometer should be listed as a joystick device, rather than listing
@ -288,7 +365,6 @@ extern "C" {
*/ */
#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" #define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK"
/** /**
* \brief A variable that lets you disable the detection and use of Xinput gamepad devices * \brief A variable that lets you disable the detection and use of Xinput gamepad devices
* *
@ -298,7 +374,6 @@ extern "C" {
*/ */
#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" #define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED"
/** /**
* \brief A variable that causes SDL to use the old axis and button mapping for XInput devices. * \brief A variable that causes SDL to use the old axis and button mapping for XInput devices.
* *
@ -308,9 +383,8 @@ extern "C" {
*/ */
#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" #define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING"
/** /**
* \brief A variable that lets you manually hint extra gamecontroller db entries * \brief A variable that lets you manually hint extra gamecontroller db entries.
* *
* The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h * The variable should be newline delimited rows of gamecontroller config data, see SDL_gamecontroller.h
* *
@ -319,6 +393,31 @@ extern "C" {
*/ */
#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" #define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG"
/**
* \brief A variable containing a list of devices to skip when scanning for game controllers.
*
* The format of the string is a comma separated list of USB VID/PID pairs
* in hexadecimal form, e.g.
*
* 0xAAAA/0xBBBB,0xCCCC/0xDDDD
*
* The variable can also take the form of @file, in which case the named
* file will be loaded and interpreted as the value of the variable.
*/
#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES"
/**
* \brief If set, all devices will be skipped when scanning for game controllers except for the ones listed in this variable.
*
* The format of the string is a comma separated list of USB VID/PID pairs
* in hexadecimal form, e.g.
*
* 0xAAAA/0xBBBB,0xCCCC/0xDDDD
*
* The variable can also take the form of @file, in which case the named
* file will be loaded and interpreted as the value of the variable.
*/
#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT"
/** /**
* \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background. * \brief A variable that lets you enable joystick (and gamecontroller) events even when your app is in the background.
@ -333,7 +432,6 @@ extern "C" {
*/ */
#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" #define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS"
/** /**
* \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it. * \brief If set to "0" then never set the top most bit on a SDL Window, even if the video mode expects it.
* This is a debugging aid for developers and not expected to be used by end users. The default is "1" * This is a debugging aid for developers and not expected to be used by end users. The default is "1"
@ -344,7 +442,6 @@ extern "C" {
*/ */
#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" #define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST"
/** /**
* \brief A variable that controls the timer resolution, in milliseconds. * \brief A variable that controls the timer resolution, in milliseconds.
* *
@ -362,6 +459,33 @@ extern "C" {
#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" #define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION"
/**
* \brief A variable describing the content orientation on QtWayland-based platforms.
*
* On QtWayland platforms, windows are rotated client-side to allow for custom
* transitions. In order to correctly position overlays (e.g. volume bar) and
* gestures (e.g. events view, close/minimize gestures), the system needs to
* know in which orientation the application is currently drawing its contents.
*
* This does not cause the window to be rotated or resized, the application
* needs to take care of drawing the content in the right orientation (the
* framebuffer is always in portrait mode).
*
* This variable can be one of the following values:
* "primary" (default), "portrait", "landscape", "inverted-portrait", "inverted-landscape"
*/
#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION"
/**
* \brief Flags to set on QtWayland windows to integrate with the native window manager.
*
* On QtWayland platforms, this hint controls the flags to set on the windows.
* For example, on Sailfish OS "OverridesSystemGestures" disables swipe gestures.
*
* This variable is a space-separated list of the following values (empty = no flags):
* "OverridesSystemGestures", "StaysOnTop", "BypassWindowManager"
*/
#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS"
/** /**
* \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size * \brief A string specifying SDL's threads stack size in bytes or "0" for the backend's default size
@ -369,7 +493,7 @@ extern "C" {
* Use this hint in case you need to set SDL's threads stack size to other than the default. * Use this hint in case you need to set SDL's threads stack size to other than the default.
* This is specially useful if you build SDL against a non glibc libc library (such as musl) which * This is specially useful if you build SDL against a non glibc libc library (such as musl) which
* provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses). * provides a relatively small default thread stack size (a few kilobytes versus the default 8MB glibc uses).
* Support for this hint is currently available only in the pthread backend. * Support for this hint is currently available only in the pthread, Windows, and PSP backend.
*/ */
#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" #define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE"
@ -431,7 +555,7 @@ extern "C" {
* privacy policy. * privacy policy.
* *
* To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL * To setup a URL to an app's privacy policy, set SDL_HINT_WINRT_PRIVACY_POLICY_URL
* before calling any SDL_Init functions. The contents of the hint should * before calling any SDL_Init() functions. The contents of the hint should
* be a valid URL. For example, "http://www.example.com". * be a valid URL. For example, "http://www.example.com".
* *
* The default value is "", which will prevent SDL from adding a privacy policy * The default value is "", which will prevent SDL from adding a privacy policy
@ -461,7 +585,7 @@ extern "C" {
* The contents of this hint should be encoded as a UTF8 string. * The contents of this hint should be encoded as a UTF8 string.
* *
* The default value is "Privacy Policy". This hint should only be set during app * The default value is "Privacy Policy". This hint should only be set during app
* initialization, preferably before any calls to SDL_Init. * initialization, preferably before any calls to SDL_Init().
* *
* For additional information on linking to a privacy policy, see the documentation for * For additional information on linking to a privacy policy, see the documentation for
* SDL_HINT_WINRT_PRIVACY_POLICY_URL. * SDL_HINT_WINRT_PRIVACY_POLICY_URL.
@ -630,6 +754,119 @@ extern "C" {
*/ */
#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" #define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4"
/**
* \brief Prevent SDL from using version 4 of the bitmap header when saving BMPs.
*
* The bitmap header version 4 is required for proper alpha channel support and
* SDL will use it when required. Should this not be desired, this hint can
* force the use of the 40 byte header version which is supported everywhere.
*
* The variable can be set to the following values:
* "0" - Surfaces with a colorkey or an alpha channel are saved to a
* 32-bit BMP file with an alpha mask. SDL will use the bitmap
* header version 4 and set the alpha mask accordingly.
* "1" - Surfaces with a colorkey or an alpha channel are saved to a
* 32-bit BMP file without an alpha mask. The alpha channel data
* will be in the file, but applications are going to ignore it.
*
* The default value is "0".
*/
#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT"
/**
* \brief Tell SDL not to name threads on Windows with the 0x406D1388 Exception.
* The 0x406D1388 Exception is a trick used to inform Visual Studio of a
* thread's name, but it tends to cause problems with other debuggers,
* and the .NET runtime. Note that SDL 2.0.6 and later will still use
* the (safer) SetThreadDescription API, introduced in the Windows 10
* Creators Update, if available.
*
* The variable can be set to the following values:
* "0" - SDL will raise the 0x406D1388 Exception to name threads.
* This is the default behavior of SDL <= 2.0.4.
* "1" - SDL will not raise this exception, and threads will be unnamed. (default)
* This is necessary with .NET languages or debuggers that aren't Visual Studio.
*/
#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING"
/**
* \brief Tell SDL which Dispmanx layer to use on a Raspberry PI
*
* Also known as Z-order. The variable can take a negative or positive value.
* The default is 10000.
*/
#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER"
/**
* \brief A variable controlling what driver to use for OpenGL ES contexts.
*
* On some platforms, currently Windows and X11, OpenGL drivers may support
* creating contexts with an OpenGL ES profile. By default SDL uses these
* profiles, when available, otherwise it attempts to load an OpenGL ES
* library, e.g. that provided by the ANGLE project. This variable controls
* whether SDL follows this default behaviour or will always load an
* OpenGL ES library.
*
* Circumstances where this is useful include
* - Testing an app with a particular OpenGL ES implementation, e.g ANGLE,
* or emulator, e.g. those from ARM, Imagination or Qualcomm.
* - Resolving OpenGL ES function addresses at link time by linking with
* the OpenGL ES library instead of querying them at run time with
* SDL_GL_GetProcAddress().
*
* Caution: for an application to work with the default behaviour across
* different OpenGL drivers it must query the OpenGL ES function
* addresses at run time using SDL_GL_GetProcAddress().
*
* This variable is ignored on most platforms because OpenGL ES is native
* or not supported.
*
* This variable can be set to the following values:
* "0" - Use ES profile of OpenGL, if available. (Default when not set.)
* "1" - Load OpenGL ES library using the default library names.
*
*/
#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER"
/**
* \brief A variable controlling speed/quality tradeoff of audio resampling.
*
* If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ )
* to handle audio resampling. There are different resampling modes available
* that produce different levels of quality, using more CPU.
*
* If this hint isn't specified to a valid setting, or libsamplerate isn't
* available, SDL will use the default, internal resampling algorithm.
*
* Note that this is currently only applicable to resampling audio that is
* being written to a device for playback or audio being read from a device
* for capture. SDL_AudioCVT always uses the default resampler (although this
* might change for SDL 2.1).
*
* This hint is currently only checked at audio subsystem initialization.
*
* This variable can be set to the following values:
*
* "0" or "default" - Use SDL's internal resampling (Default when not set - low quality, fast)
* "1" or "fast" - Use fast, slightly higher quality resampling, if available
* "2" or "medium" - Use medium quality resampling, if available
* "3" or "best" - Use high quality resampling, if available
*/
#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE"
/**
* \brief A variable controlling the audio category on iOS and Mac OS X
*
* This variable can be set to the following values:
*
* "ambient" - Use the AVAudioSessionCategoryAmbient audio category, will be muted by the phone mute switch (default)
* "playback" - Use the AVAudioSessionCategoryPlayback category
*
* For more information, see Apple's documentation:
* https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html
*/
#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY"
/** /**
* \brief An enumeration of hint priorities * \brief An enumeration of hint priorities
*/ */
@ -669,6 +906,18 @@ extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name,
*/ */
extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
/**
* \brief Get a hint
*
* \return The boolean value of a hint variable.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value);
/**
* \brief type definition of the hint callback function.
*/
typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
/** /**
* \brief Add a function to watch a particular hint * \brief Add a function to watch a particular hint
* *
@ -676,7 +925,6 @@ extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name);
* \param callback The function to call when the hint value changes * \param callback The function to call when the hint value changes
* \param userdata A pointer to pass to the callback function * \param userdata A pointer to pass to the callback function
*/ */
typedef void (*SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue);
extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name,
SDL_HintCallback callback, SDL_HintCallback callback,
void *userdata); void *userdata);
@ -706,6 +954,6 @@ extern DECLSPEC void SDLCALL SDL_ClearHints(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_hints_h */ #endif /* SDL_hints_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -24,7 +24,7 @@
* *
* Include file for SDL joystick event handling * Include file for SDL joystick event handling
* *
* The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks, with the exact joystick * The term "device_index" identifies currently plugged in joystick devices between 0 and SDL_NumJoysticks(), with the exact joystick
* behind a device_index changing as joysticks are plugged and unplugged. * behind a device_index changing as joysticks are plugged and unplugged.
* *
* The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted * The term "instance_id" is the current instantiation of a joystick device in the system, if the joystick is removed and then re-inserted
@ -36,8 +36,8 @@
* *
*/ */
#ifndef _SDL_joystick_h #ifndef SDL_joystick_h_
#define _SDL_joystick_h #define SDL_joystick_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -60,7 +60,9 @@ extern "C" {
* SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
*/ */
/* The joystick structure used to identify an SDL joystick */ /**
* The joystick structure used to identify an SDL joystick
*/
struct _SDL_Joystick; struct _SDL_Joystick;
typedef struct _SDL_Joystick SDL_Joystick; typedef struct _SDL_Joystick SDL_Joystick;
@ -69,8 +71,29 @@ typedef struct {
Uint8 data[16]; Uint8 data[16];
} SDL_JoystickGUID; } SDL_JoystickGUID;
/**
* This is a unique ID for a joystick for the time it is connected to the system,
* and is never reused for the lifetime of the application. If the joystick is
* disconnected and reconnected, it will get a new ID.
*
* The ID value starts at 0 and increments from there. The value -1 is an invalid ID.
*/
typedef Sint32 SDL_JoystickID; typedef Sint32 SDL_JoystickID;
typedef enum
{
SDL_JOYSTICK_TYPE_UNKNOWN,
SDL_JOYSTICK_TYPE_GAMECONTROLLER,
SDL_JOYSTICK_TYPE_WHEEL,
SDL_JOYSTICK_TYPE_ARCADE_STICK,
SDL_JOYSTICK_TYPE_FLIGHT_STICK,
SDL_JOYSTICK_TYPE_DANCE_PAD,
SDL_JOYSTICK_TYPE_GUITAR,
SDL_JOYSTICK_TYPE_DRUM_KIT,
SDL_JOYSTICK_TYPE_ARCADE_PAD,
SDL_JOYSTICK_TYPE_THROTTLE
} SDL_JoystickType;
typedef enum typedef enum
{ {
SDL_JOYSTICK_POWER_UNKNOWN = -1, SDL_JOYSTICK_POWER_UNKNOWN = -1,
@ -83,6 +106,20 @@ typedef enum
} SDL_JoystickPowerLevel; } SDL_JoystickPowerLevel;
/* Function prototypes */ /* Function prototypes */
/**
* Locking for multi-threaded access to the joystick API
*
* If you are using the joystick API or handling events from multiple threads
* you should use these locking functions to protect access to the joysticks.
*
* In particular, you are guaranteed that the joystick list won't change, so
* the API functions that take a joystick index will be valid, and joystick
* and game controller events will not be delivered.
*/
extern DECLSPEC void SDLCALL SDL_LockJoysticks(void);
extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void);
/** /**
* Count the number of joysticks attached to the system right now * Count the number of joysticks attached to the system right now
*/ */
@ -95,6 +132,46 @@ extern DECLSPEC int SDLCALL SDL_NumJoysticks(void);
*/ */
extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index);
/**
* Return the GUID for the joystick at this index
* This can be called before any joysticks are opened.
*/
extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index);
/**
* Get the USB vendor ID of a joystick, if available.
* This can be called before any joysticks are opened.
* If the vendor ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index);
/**
* Get the USB product ID of a joystick, if available.
* This can be called before any joysticks are opened.
* If the product ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index);
/**
* Get the product version of a joystick, if available.
* This can be called before any joysticks are opened.
* If the product version isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index);
/**
* Get the type of a joystick, if available.
* This can be called before any joysticks are opened.
*/
extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index);
/**
* Get the instance ID of a joystick.
* This can be called before any joysticks are opened.
* If the index is out of range, this function will return -1.
*/
extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index);
/** /**
* Open a joystick for use. * Open a joystick for use.
* The index passed as an argument refers to the N'th joystick on the system. * The index passed as an argument refers to the N'th joystick on the system.
@ -117,16 +194,34 @@ extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID
*/ */
extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick * joystick); extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick * joystick);
/**
* Return the GUID for the joystick at this index
*/
extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index);
/** /**
* Return the GUID for this opened joystick * Return the GUID for this opened joystick
*/ */
extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joystick); extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joystick);
/**
* Get the USB vendor ID of an opened joystick, if available.
* If the vendor ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick * joystick);
/**
* Get the USB product ID of an opened joystick, if available.
* If the product ID isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick * joystick);
/**
* Get the product version of an opened joystick, if available.
* If the product version isn't available this function returns 0.
*/
extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick * joystick);
/**
* Get the type of an opened joystick.
*/
extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick * joystick);
/** /**
* Return a string representation for this guid. pszGUID must point to at least 33 bytes * Return a string representation for this guid. pszGUID must point to at least 33 bytes
* (32 for the string plus a NULL terminator). * (32 for the string plus a NULL terminator).
@ -134,7 +229,7 @@ extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick * joys
extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID);
/** /**
* convert a string into a joystick formatted guid * Convert a string into a joystick guid
*/ */
extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID);
@ -190,6 +285,8 @@ extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void);
*/ */
extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state);
#define SDL_JOYSTICK_AXIS_MAX 32767
#define SDL_JOYSTICK_AXIS_MIN -32768
/** /**
* Get the current state of an axis control on a joystick. * Get the current state of an axis control on a joystick.
* *
@ -200,6 +297,18 @@ extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state);
extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick, extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick * joystick,
int axis); int axis);
/**
* Get the initial state of an axis control on a joystick.
*
* The state is a value ranging from -32768 to 32767.
*
* The axis indices start at index 0.
*
* \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not.
*/
extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick * joystick,
int axis, Sint16 *state);
/** /**
* \name Hat positions * \name Hat positions
*/ */
@ -268,6 +377,6 @@ extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_joystick_h */ #endif /* SDL_joystick_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL keyboard event handling * Include file for SDL keyboard event handling
*/ */
#ifndef _SDL_keyboard_h #ifndef SDL_keyboard_h_
#define _SDL_keyboard_h #define SDL_keyboard_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -136,7 +136,7 @@ extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name);
* copy it. If the key doesn't have a name, this function returns an * copy it. If the key doesn't have a name, this function returns an
* empty string (""). * empty string ("").
* *
* \sa SDL_Key * \sa SDL_Keycode
*/ */
extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key);
@ -212,6 +212,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_keyboard_h */ #endif /* SDL_keyboard_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Defines constants which identify keyboard keys and modifiers. * Defines constants which identify keyboard keys and modifiers.
*/ */
#ifndef _SDL_keycode_h #ifndef SDL_keycode_h_
#define _SDL_keycode_h #define SDL_keycode_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_scancode.h" #include "SDL_scancode.h"
@ -38,6 +38,9 @@
* layout of the keyboard. These values include Unicode values representing * layout of the keyboard. These values include Unicode values representing
* the unmodified character that would be generated by pressing the key, or * the unmodified character that would be generated by pressing the key, or
* an SDLK_* constant for those keys that do not generate characters. * an SDLK_* constant for those keys that do not generate characters.
*
* A special exception is the number keys at the top of the keyboard which
* always map to SDLK_0...SDLK_9, regardless of layout.
*/ */
typedef Sint32 SDL_Keycode; typedef Sint32 SDL_Keycode;
@ -308,7 +311,12 @@ enum
SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN),
SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP),
SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT),
SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP) SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP),
SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1),
SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2),
SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND),
SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD)
}; };
/** /**
@ -336,6 +344,6 @@ typedef enum
#define KMOD_ALT (KMOD_LALT|KMOD_RALT) #define KMOD_ALT (KMOD_LALT|KMOD_RALT)
#define KMOD_GUI (KMOD_LGUI|KMOD_RGUI) #define KMOD_GUI (KMOD_LGUI|KMOD_RGUI)
#endif /* _SDL_keycode_h */ #endif /* SDL_keycode_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -38,8 +38,8 @@
* the results you expect. :) * the results you expect. :)
*/ */
#ifndef _SDL_loadso_h #ifndef SDL_loadso_h_
#define _SDL_loadso_h #define SDL_loadso_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -76,6 +76,6 @@ extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_loadso_h */ #endif /* SDL_loadso_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -34,8 +34,8 @@
* Others: standard error output (stderr) * Others: standard error output (stderr)
*/ */
#ifndef _SDL_log_h #ifndef SDL_log_h_
#define _SDL_log_h #define SDL_log_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -186,7 +186,7 @@ extern DECLSPEC void SDLCALL SDL_LogMessageV(int category,
/** /**
* \brief The prototype for the log output function * \brief The prototype for the log output function
*/ */
typedef void (*SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message);
/** /**
* \brief Get the current log output function. * \brief Get the current log output function.
@ -206,6 +206,6 @@ extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction call
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_log_h */ #endif /* SDL_log_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_main_h #ifndef SDL_main_h_
#define _SDL_main_h #define SDL_main_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -63,7 +63,7 @@
/* On Android SDL provides a Java class in SDLActivity.java that is the /* On Android SDL provides a Java class in SDLActivity.java that is the
main activity entry point. main activity entry point.
See README-android.txt for more details on extending that class. See README-android.md for more details on extending that class.
*/ */
#define SDL_MAIN_NEEDED #define SDL_MAIN_NEEDED
@ -107,7 +107,7 @@
/** /**
* The prototype for the application's main() function * The prototype for the application's main() function
*/ */
extern C_LINKAGE int SDL_main(int argc, char *argv[]); extern C_LINKAGE DECLSPEC int SDL_main(int argc, char *argv[]);
#include "begin_code.h" #include "begin_code.h"
@ -156,6 +156,6 @@ extern DECLSPEC int SDLCALL SDL_WinRTRunApp(int (*mainFunction)(int, char **), v
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_main_h */ #endif /* SDL_main_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_messagebox_h #ifndef SDL_messagebox_h_
#define _SDL_messagebox_h #define SDL_messagebox_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_video.h" /* For SDL_Window */ #include "SDL_video.h" /* For SDL_Window */
@ -139,6 +139,6 @@ extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *t
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_messagebox_h */ #endif /* SDL_messagebox_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL mouse event handling. * Include file for SDL mouse event handling.
*/ */
#ifndef _SDL_mouse_h #ifndef SDL_mouse_h_
#define _SDL_mouse_h #define SDL_mouse_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -38,10 +38,10 @@
extern "C" { extern "C" {
#endif #endif
typedef struct SDL_Cursor SDL_Cursor; /* Implementation dependent */ typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */
/** /**
* \brief Cursor types for SDL_CreateSystemCursor. * \brief Cursor types for SDL_CreateSystemCursor().
*/ */
typedef enum typedef enum
{ {
@ -254,9 +254,11 @@ extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void);
extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void);
/** /**
* \brief Frees a cursor created with SDL_CreateCursor(). * \brief Frees a cursor created with SDL_CreateCursor() or similar functions.
* *
* \sa SDL_CreateCursor() * \sa SDL_CreateCursor()
* \sa SDL_CreateColorCursor()
* \sa SDL_CreateSystemCursor()
*/ */
extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor);
@ -295,6 +297,6 @@ extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_mouse_h */ #endif /* SDL_mouse_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_mutex_h #ifndef SDL_mutex_h_
#define _SDL_mutex_h #define SDL_mutex_h_
/** /**
* \file SDL_mutex.h * \file SDL_mutex.h
@ -246,6 +246,6 @@ extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond,
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_mutex_h */ #endif /* SDL_mutex_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDLname_h_ #ifndef SDLname_h_
#define _SDLname_h_ #define SDLname_h_
#if defined(__STDC__) || defined(__cplusplus) #if defined(__STDC__) || defined(__cplusplus)
#define NeedFunctionPrototypes 1 #define NeedFunctionPrototypes 1
@ -28,6 +28,6 @@
#define SDL_NAME(X) SDL_##X #define SDL_NAME(X) SDL_##X
#endif /* _SDLname_h_ */ #endif /* SDLname_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -32,8 +32,8 @@
* version included in SDL_opengl.h. * version included in SDL_opengl.h.
*/ */
#ifndef _SDL_opengl_h #ifndef SDL_opengl_h_
#define _SDL_opengl_h #define SDL_opengl_h_
#include "SDL_config.h" #include "SDL_config.h"
@ -97,6 +97,13 @@
#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ #elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */
# define GLAPI extern # define GLAPI extern
# define GLAPIENTRY __stdcall # define GLAPIENTRY __stdcall
#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */
# define GLAPI extern
# define GLAPIENTRY _System
# define APIENTRY _System
# if defined(__GNUC__) && !defined(_System)
# define _System
# endif
#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) #elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590))
# define GLAPI __attribute__((visibility("default"))) # define GLAPI __attribute__((visibility("default")))
# define GLAPIENTRY # define GLAPIENTRY
@ -2171,6 +2178,6 @@ typedef void (APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum t
#endif /* !__IPHONEOS__ */ #endif /* !__IPHONEOS__ */
#endif /* _SDL_opengl_h */ #endif /* SDL_opengl_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -24,6 +24,7 @@
* *
* This is a simple file to encapsulate the OpenGL ES 1.X API headers. * This is a simple file to encapsulate the OpenGL ES 1.X API headers.
*/ */
#include "SDL_config.h"
#ifdef __IPHONEOS__ #ifdef __IPHONEOS__
#include <OpenGLES/ES1/gl.h> #include <OpenGLES/ES1/gl.h>

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -24,6 +24,8 @@
* *
* This is a simple file to encapsulate the OpenGL ES 2.0 API headers. * This is a simple file to encapsulate the OpenGL ES 2.0 API headers.
*/ */
#include "SDL_config.h"
#ifndef _MSC_VER #ifndef _MSC_VER
#ifdef __IPHONEOS__ #ifdef __IPHONEOS__

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,10 +25,11 @@
* Header for the enumerated pixel format definitions. * Header for the enumerated pixel format definitions.
*/ */
#ifndef _SDL_pixels_h #ifndef SDL_pixels_h_
#define _SDL_pixels_h #define SDL_pixels_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_endian.h"
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -260,6 +261,19 @@ enum
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB,
SDL_PACKEDLAYOUT_2101010, 32, 4), SDL_PACKEDLAYOUT_2101010, 32, 4),
/* Aliases for RGBA byte arrays of color data, for the current platform */
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888,
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888,
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888,
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888,
#else
SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888,
SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888,
SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888,
SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888,
#endif
SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */
SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'),
SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */
@ -449,6 +463,6 @@ extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_pixels_h */ #endif /* SDL_pixels_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Try to get a standard set of platform defines. * Try to get a standard set of platform defines.
*/ */
#ifndef _SDL_platform_h #ifndef SDL_platform_h_
#define _SDL_platform_h #define SDL_platform_h_
#if defined(_AIX) #if defined(_AIX)
#undef __AIX__ #undef __AIX__
@ -70,18 +70,22 @@
/* lets us know what version of Mac OS X we're compiling on */ /* lets us know what version of Mac OS X we're compiling on */
#include "AvailabilityMacros.h" #include "AvailabilityMacros.h"
#include "TargetConditionals.h" #include "TargetConditionals.h"
#if TARGET_OS_TV
#undef __TVOS__
#define __TVOS__ 1
#endif
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
/* if compiling for iPhone */ /* if compiling for iOS */
#undef __IPHONEOS__ #undef __IPHONEOS__
#define __IPHONEOS__ 1 #define __IPHONEOS__ 1
#undef __MACOSX__ #undef __MACOSX__
#else #else
/* if not compiling for iPhone */ /* if not compiling for iOS */
#undef __MACOSX__ #undef __MACOSX__
#define __MACOSX__ 1 #define __MACOSX__ 1
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 #if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
# error SDL for Mac OS X only supports deploying on 10.5 and above. # error SDL for Mac OS X only supports deploying on 10.6 and above.
#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1050 */ #endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1060 */
#endif /* TARGET_OS_IPHONE */ #endif /* TARGET_OS_IPHONE */
#endif /* defined(__APPLE__) */ #endif /* defined(__APPLE__) */
@ -93,7 +97,7 @@
#undef __OPENBSD__ #undef __OPENBSD__
#define __OPENBSD__ 1 #define __OPENBSD__ 1
#endif #endif
#if defined(__OS2__) #if defined(__OS2__) || defined(__EMX__)
#undef __OS2__ #undef __OS2__
#define __OS2__ 1 #define __OS2__ 1
#endif #endif
@ -116,21 +120,29 @@
#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) #if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__)
/* Try to find out if we're compiling for WinRT or non-WinRT */ /* Try to find out if we're compiling for WinRT or non-WinRT */
/* If _USING_V110_SDK71_ is defined it means we are using the v110_xp or v120_xp toolset. */ #if defined(_MSC_VER) && defined(__has_include)
#if (defined(_MSC_VER) && (_MSC_VER >= 1700) && !_USING_V110_SDK71_) /* _MSC_VER==1700 for MSVC 2012 */ #define HAVE_WINAPIFAMILY_H __has_include(<winapifamily.h>)
/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */
#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */
#define HAVE_WINAPIFAMILY_H 1
#else
#define HAVE_WINAPIFAMILY_H 0
#endif
#if HAVE_WINAPIFAMILY_H
#include <winapifamily.h> #include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP))
#undef __WINDOWS__ #else
#define __WINDOWS__ 1 #define WINAPI_FAMILY_WINRT 0
/* See if we're compiling for WinRT: */ #endif /* HAVE_WINAPIFAMILY_H */
#elif WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
#if WINAPI_FAMILY_WINRT
#undef __WINRT__ #undef __WINRT__
#define __WINRT__ 1 #define __WINRT__ 1
#endif
#else #else
#undef __WINDOWS__ #undef __WINDOWS__
#define __WINDOWS__ 1 #define __WINDOWS__ 1
#endif /* _MSC_VER < 1700 */ #endif
#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ #endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */
#if defined(__WINDOWS__) #if defined(__WINDOWS__)
@ -176,6 +188,6 @@ extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_platform_h */ #endif /* SDL_platform_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_power_h #ifndef SDL_power_h_
#define _SDL_power_h #define SDL_power_h_
/** /**
* \file SDL_power.h * \file SDL_power.h
@ -70,6 +70,6 @@ extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *secs, int *pct);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_power_h */ #endif /* SDL_power_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL quit event handling. * Include file for SDL quit event handling.
*/ */
#ifndef _SDL_quit_h #ifndef SDL_quit_h_
#define _SDL_quit_h #define SDL_quit_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -55,4 +55,4 @@
#define SDL_QuitRequested() \ #define SDL_QuitRequested() \
(SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0))
#endif /* _SDL_quit_h */ #endif /* SDL_quit_h_ */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Header file for SDL_rect definition and management functions. * Header file for SDL_rect definition and management functions.
*/ */
#ifndef _SDL_rect_h #ifndef SDL_rect_h_
#define _SDL_rect_h #define SDL_rect_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -143,6 +143,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect *
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_rect_h */ #endif /* SDL_rect_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -45,8 +45,8 @@
* See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995 * See this bug for details: http://bugzilla.libsdl.org/show_bug.cgi?id=1995
*/ */
#ifndef _SDL_render_h #ifndef SDL_render_h_
#define _SDL_render_h #define SDL_render_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_rect.h" #include "SDL_rect.h"
@ -233,6 +233,8 @@ extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer,
* active, the format was unsupported, or the width or height were out * active, the format was unsupported, or the width or height were out
* of range. * of range.
* *
* \note The contents of the texture are not defined at creation.
*
* \sa SDL_QueryTexture() * \sa SDL_QueryTexture()
* \sa SDL_UpdateTexture() * \sa SDL_UpdateTexture()
* \sa SDL_DestroyTexture() * \sa SDL_DestroyTexture()
@ -370,9 +372,12 @@ extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture,
* \param texture The texture to update * \param texture The texture to update
* \param rect A pointer to the rectangle of pixels to update, or NULL to * \param rect A pointer to the rectangle of pixels to update, or NULL to
* update the entire texture. * update the entire texture.
* \param pixels The raw pixel data. * \param pixels The raw pixel data in the format of the texture.
* \param pitch The number of bytes in a row of pixel data, including padding between lines. * \param pitch The number of bytes in a row of pixel data, including padding between lines.
* *
* The pixel data must be in the format of the texture. The pixel format can be
* queried with SDL_QueryTexture.
*
* \return 0 on success, or -1 if the texture is not valid. * \return 0 on success, or -1 if the texture is not valid.
* *
* \note This is a fairly slow function. * \note This is a fairly slow function.
@ -499,6 +504,30 @@ extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, in
*/ */
extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h);
/**
* \brief Set whether to force integer scales for resolution-independent rendering
*
* \param renderer The renderer for which integer scaling should be set.
* \param enable Enable or disable integer scaling
*
* This function restricts the logical viewport to integer values - that is, when
* a resolution is between two multiples of a logical size, the viewport size is
* rounded down to the lower multiple.
*
* \sa SDL_RenderSetLogicalSize()
*/
extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer,
SDL_bool enable);
/**
* \brief Get whether integer scales are forced for resolution-independent rendering
*
* \param renderer The renderer from which integer scaling should be queried.
*
* \sa SDL_RenderSetIntegerScale()
*/
extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer);
/** /**
* \brief Set the drawing area for rendering on the current target. * \brief Set the drawing area for rendering on the current target.
* *
@ -658,7 +687,8 @@ extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer,
/** /**
* \brief Clear the current rendering target with the drawing color * \brief Clear the current rendering target with the drawing color
* *
* This function clears the entire rendering target, ignoring the viewport. * This function clears the entire rendering target, ignoring the viewport and
* the clip rectangle.
* *
* \return 0 on success, or -1 on error * \return 0 on success, or -1 on error
*/ */
@ -791,7 +821,7 @@ extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer,
* texture. * texture.
* \param dstrect A pointer to the destination rectangle, or NULL for the * \param dstrect A pointer to the destination rectangle, or NULL for the
* entire rendering target. * entire rendering target.
* \param angle An angle in degrees that indicates the rotation that will be applied to dstrect * \param angle An angle in degrees that indicates the rotation that will be applied to dstrect, rotating it in a clockwise direction
* \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2). * \param center A pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done around dstrect.w/2, dstrect.h/2).
* \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture * \param flip An SDL_RendererFlip value stating which flipping actions should be performed on the texture
* *
@ -875,6 +905,6 @@ extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_render_h */ #endif /* SDL_render_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,2 +1,2 @@
#define SDL_REVISION "hg-10001:e12c38730512" #define SDL_REVISION "hg-11645:2088cd828335"
#define SDL_REVISION_NUMBER 10001 #define SDL_REVISION_NUMBER 11645

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -26,8 +26,8 @@
* data streams. It can easily be extended to files, memory, etc. * data streams. It can easily be extended to files, memory, etc.
*/ */
#ifndef _SDL_rwops_h #ifndef SDL_rwops_h_
#define _SDL_rwops_h #define SDL_rwops_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -39,12 +39,12 @@ extern "C" {
#endif #endif
/* RWops Types */ /* RWops Types */
#define SDL_RWOPS_UNKNOWN 0 /* Unknown stream type */ #define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */
#define SDL_RWOPS_WINFILE 1 /* Win32 file */ #define SDL_RWOPS_WINFILE 1U /**< Win32 file */
#define SDL_RWOPS_STDFILE 2 /* Stdio file */ #define SDL_RWOPS_STDFILE 2U /**< Stdio file */
#define SDL_RWOPS_JNIFILE 3 /* Android asset */ #define SDL_RWOPS_JNIFILE 3U /**< Android asset */
#define SDL_RWOPS_MEMORY 4 /* Memory stream */ #define SDL_RWOPS_MEMORY 4U /**< Memory stream */
#define SDL_RWOPS_MEMORY_RO 5 /* Read-Only memory stream */ #define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */
/** /**
* This is the read/write operation structure -- very basic. * This is the read/write operation structure -- very basic.
@ -190,6 +190,29 @@ extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area);
/* @} *//* Read/write macros */ /* @} *//* Read/write macros */
/**
* Load all the data from an SDL data stream.
*
* The data is allocated with a zero byte at the end (null terminated)
*
* If \c datasize is not NULL, it is filled with the size of the data read.
*
* If \c freesrc is non-zero, the stream will be closed after being read.
*
* The data should be freed with SDL_free().
*
* \return the data, or NULL if there was an error.
*/
extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops * src, size_t *datasize,
int freesrc);
/**
* Load an entire file.
*
* Convenience macro.
*/
#define SDL_LoadFile(file, datasize) SDL_LoadFile_RW(SDL_RWFromFile(file, "rb"), datasize, 1)
/** /**
* \name Read endian functions * \name Read endian functions
* *
@ -226,6 +249,6 @@ extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_rwops_h */ #endif /* SDL_rwops_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Defines keyboard scancodes. * Defines keyboard scancodes.
*/ */
#ifndef _SDL_scancode_h #ifndef SDL_scancode_h_
#define _SDL_scancode_h #define SDL_scancode_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -38,7 +38,7 @@
* SDL_Event structure. * SDL_Event structure.
* *
* The values in this enumeration are based on the USB usage page standard: * The values in this enumeration are based on the USB usage page standard:
* http://www.usb.org/developers/devclass_docs/Hut1_12v2.pdf * http://www.usb.org/developers/hidpage/Hut1_12v2.pdf
*/ */
typedef enum typedef enum
{ {
@ -390,12 +390,24 @@ typedef enum
/* @} *//* Walther keys */ /* @} *//* Walther keys */
/**
* \name Usage page 0x0C (additional media keys)
*
* These values are mapped from usage page 0x0C (USB consumer page).
*/
/* @{ */
SDL_SCANCODE_AUDIOREWIND = 285,
SDL_SCANCODE_AUDIOFASTFORWARD = 286,
/* @} *//* Usage page 0x0C (additional media keys) */
/* Add any other keys here. */ /* Add any other keys here. */
SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes
for array bounds */ for array bounds */
} SDL_Scancode; } SDL_Scancode;
#endif /* _SDL_scancode_h */ #endif /* SDL_scancode_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_shape_h #ifndef SDL_shape_h_
#define _SDL_shape_h #define SDL_shape_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_pixels.h" #include "SDL_pixels.h"
@ -71,6 +71,7 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,un
* \param window The window to query for being shaped. * \param window The window to query for being shaped.
* *
* \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NULL. * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if the window is unshaped or NULL.
*
* \sa SDL_CreateShapedWindow * \sa SDL_CreateShapedWindow
*/ */
extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window);
@ -91,7 +92,7 @@ typedef enum {
/** \brief A union containing parameters for shaped windows. */ /** \brief A union containing parameters for shaped windows. */
typedef union { typedef union {
/** \brief a cutoff alpha value for binarization of the window shape's alpha channel. */ /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */
Uint8 binarizationCutoff; Uint8 binarizationCutoff;
SDL_Color colorKey; SDL_Color colorKey;
} SDL_WindowShapeParams; } SDL_WindowShapeParams;
@ -111,8 +112,8 @@ typedef struct SDL_WindowShapeMode {
* \param shape A surface encoding the desired shape for the window. * \param shape A surface encoding the desired shape for the window.
* \param shape_mode The parameters to set for the shaped window. * \param shape_mode The parameters to set for the shaped window.
* *
* \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on invalid an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape argument, or SDL_NONSHAPEABLE_WINDOW
* if the SDL_Window* given does not reference a valid shaped window. * if the SDL_Window given does not reference a valid shaped window.
* *
* \sa SDL_WindowShapeMode * \sa SDL_WindowShapeMode
* \sa SDL_GetShapedWindowMode. * \sa SDL_GetShapedWindowMode.
@ -127,7 +128,7 @@ extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *s
* *
* \return 0 if the window has a shape and, provided shape_mode was not NULL, shape_mode has been filled with the mode * \return 0 if the window has a shape and, provided shape_mode was not NULL, shape_mode has been filled with the mode
* data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if * data, SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped window, or SDL_WINDOW_LACKS_SHAPE if
* the SDL_Window* given is a shapeable window currently lacking a shape. * the SDL_Window given is a shapeable window currently lacking a shape.
* *
* \sa SDL_WindowShapeMode * \sa SDL_WindowShapeMode
* \sa SDL_SetWindowShape * \sa SDL_SetWindowShape
@ -140,4 +141,4 @@ extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_Windo
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_shape_h */ #endif /* SDL_shape_h_ */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* This is a general header that includes C language support. * This is a general header that includes C language support.
*/ */
#ifndef _SDL_stdinc_h #ifndef SDL_stdinc_h_
#define _SDL_stdinc_h #define SDL_stdinc_h_
#include "SDL_config.h" #include "SDL_config.h"
@ -62,6 +62,9 @@
#ifdef HAVE_STRINGS_H #ifdef HAVE_STRINGS_H
# include <strings.h> # include <strings.h>
#endif #endif
#ifdef HAVE_WCHAR_H
# include <wchar.h>
#endif
#if defined(HAVE_INTTYPES_H) #if defined(HAVE_INTTYPES_H)
# include <inttypes.h> # include <inttypes.h>
#elif defined(HAVE_STDINT_H) #elif defined(HAVE_STDINT_H)
@ -83,9 +86,6 @@
#ifdef HAVE_FLOAT_H #ifdef HAVE_FLOAT_H
# include <float.h> # include <float.h>
#endif #endif
#if defined(HAVE_ICONV) && defined(HAVE_ICONV_H)
# include <iconv.h>
#endif
/** /**
* The number of elements in an array. * The number of elements in an array.
@ -93,6 +93,13 @@
#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) #define SDL_arraysize(array) (sizeof(array)/sizeof(array[0]))
#define SDL_TABLESIZE(table) SDL_arraysize(table) #define SDL_TABLESIZE(table) SDL_arraysize(table)
/**
* Macro useful for building other macros with strings in them
*
* e.g. #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n")
*/
#define SDL_STRINGIFY_ARG(arg) #arg
/** /**
* \name Cast operators * \name Cast operators
* *
@ -123,44 +130,67 @@
*/ */
/* @{ */ /* @{ */
#ifdef __CC_ARM
/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */
#define SDL_FALSE 0
#define SDL_TRUE 1
typedef int SDL_bool;
#else
typedef enum typedef enum
{ {
SDL_FALSE = 0, SDL_FALSE = 0,
SDL_TRUE = 1 SDL_TRUE = 1
} SDL_bool; } SDL_bool;
#endif
/** /**
* \brief A signed 8-bit integer type. * \brief A signed 8-bit integer type.
*/ */
#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */
#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */
typedef int8_t Sint8; typedef int8_t Sint8;
/** /**
* \brief An unsigned 8-bit integer type. * \brief An unsigned 8-bit integer type.
*/ */
#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */
#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */
typedef uint8_t Uint8; typedef uint8_t Uint8;
/** /**
* \brief A signed 16-bit integer type. * \brief A signed 16-bit integer type.
*/ */
#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */
#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */
typedef int16_t Sint16; typedef int16_t Sint16;
/** /**
* \brief An unsigned 16-bit integer type. * \brief An unsigned 16-bit integer type.
*/ */
#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */
#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */
typedef uint16_t Uint16; typedef uint16_t Uint16;
/** /**
* \brief A signed 32-bit integer type. * \brief A signed 32-bit integer type.
*/ */
#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */
#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */
typedef int32_t Sint32; typedef int32_t Sint32;
/** /**
* \brief An unsigned 32-bit integer type. * \brief An unsigned 32-bit integer type.
*/ */
#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */
#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */
typedef uint32_t Uint32; typedef uint32_t Uint32;
/** /**
* \brief A signed 64-bit integer type. * \brief A signed 64-bit integer type.
*/ */
#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */
#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */
typedef int64_t Sint64; typedef int64_t Sint64;
/** /**
* \brief An unsigned 64-bit integer type. * \brief An unsigned 64-bit integer type.
*/ */
#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */
#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */
typedef uint64_t Uint64; typedef uint64_t Uint64;
/* @} *//* Basic data types */ /* @} *//* Basic data types */
@ -258,7 +288,7 @@ typedef uint64_t Uint64;
#endif /* SDL_DISABLE_ANALYZE_MACROS */ #endif /* SDL_DISABLE_ANALYZE_MACROS */
#define SDL_COMPILE_TIME_ASSERT(name, x) \ #define SDL_COMPILE_TIME_ASSERT(name, x) \
typedef int SDL_dummy_ ## name[(x) * 2 - 1] typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1]
/** \cond */ /** \cond */
#ifndef DOXYGEN_SHOULD_IGNORE_THIS #ifndef DOXYGEN_SHOULD_IGNORE_THIS
SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1);
@ -333,6 +363,37 @@ extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size);
extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size);
extern DECLSPEC void SDLCALL SDL_free(void *mem); extern DECLSPEC void SDLCALL SDL_free(void *mem);
typedef void *(SDLCALL *SDL_malloc_func)(size_t size);
typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size);
typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size);
typedef void (SDLCALL *SDL_free_func)(void *mem);
/**
* \brief Get the current set of SDL memory functions
*/
extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func,
SDL_calloc_func *calloc_func,
SDL_realloc_func *realloc_func,
SDL_free_func *free_func);
/**
* \brief Replace SDL's memory allocation functions with a custom set
*
* \note If you are replacing SDL's memory functions, you should call
* SDL_GetNumAllocations() and be very careful if it returns non-zero.
* That means that your free function will be called with memory
* allocated by the previous memory allocation functions.
*/
extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func,
SDL_calloc_func calloc_func,
SDL_realloc_func realloc_func,
SDL_free_func free_func);
/**
* \brief Get the number of outstanding (unfreed) allocations
*/
extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void);
extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); extern DECLSPEC char *SDLCALL SDL_getenv(const char *name);
extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite);
@ -375,10 +436,10 @@ SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords)
return; return;
switch (dwords % 4) switch (dwords % 4)
{ {
case 0: do { *_p++ = _val; case 0: do { *_p++ = _val; /* fallthrough */
case 3: *_p++ = _val; case 3: *_p++ = _val; /* fallthrough */
case 2: *_p++ = _val; case 2: *_p++ = _val; /* fallthrough */
case 1: *_p++ = _val; case 1: *_p++ = _val; /* fallthrough */
} while ( --_n ); } while ( --_n );
} }
#endif #endif
@ -393,6 +454,7 @@ extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t le
extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr);
extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen);
extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2);
extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
@ -405,6 +467,7 @@ extern DECLSPEC char *SDLCALL SDL_strlwr(char *str);
extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c);
extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c);
extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle);
extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str);
extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix);
extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix);
@ -433,7 +496,7 @@ extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size
#ifndef HAVE_M_PI #ifndef HAVE_M_PI
#ifndef M_PI #ifndef M_PI
#define M_PI 3.14159265358979323846264338327950288 /* pi */ #define M_PI 3.14159265358979323846264338327950288 /**< pi */
#endif #endif
#endif #endif
@ -522,6 +585,6 @@ SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_B
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_stdinc_h */ #endif /* SDL_stdinc_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Header file for ::SDL_Surface definition and management functions. * Header file for ::SDL_Surface definition and management functions.
*/ */
#ifndef _SDL_surface_h #ifndef SDL_surface_h_
#define _SDL_surface_h #define SDL_surface_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_pixels.h" #include "SDL_pixels.h"
@ -94,8 +94,8 @@ typedef struct SDL_Surface
/** /**
* \brief The type of function used for surface blitting functions. * \brief The type of function used for surface blitting functions.
*/ */
typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect,
struct SDL_Surface * dst, SDL_Rect * dstrect); struct SDL_Surface * dst, SDL_Rect * dstrect);
/** /**
* Allocate and free an RGB surface. * Allocate and free an RGB surface.
@ -118,6 +118,11 @@ typedef int (*SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect,
extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface
(Uint32 flags, int width, int height, int depth, (Uint32 flags, int width, int height, int depth,
Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask);
/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */
extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat
(Uint32 flags, int width, int height, int depth, Uint32 format);
extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels,
int width, int width,
int height, int height,
@ -127,6 +132,8 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels,
Uint32 Gmask, Uint32 Gmask,
Uint32 Bmask, Uint32 Bmask,
Uint32 Amask); Uint32 Amask);
extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom
(void *pixels, int width, int height, int depth, int pitch, Uint32 format);
extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface);
/** /**
@ -184,6 +191,12 @@ extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src,
/** /**
* Save a surface to a seekable SDL data stream (memory or file). * Save a surface to a seekable SDL data stream (memory or file).
* *
* Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the
* BMP directly. Other RGB formats with 8-bit or higher get converted to a
* 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit
* surface before they are saved. YUV and paletted 1-bit and 4-bit formats are
* not supported.
*
* If \c freedst is non-zero, the stream will be closed after being written. * If \c freedst is non-zero, the stream will be closed after being written.
* *
* \return 0 if successful or -1 if there was an error. * \return 0 if successful or -1 if there was an error.
@ -346,6 +359,11 @@ extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface,
extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface,
SDL_Rect * rect); SDL_Rect * rect);
/*
* Creates a new surface identical to the existing surface
*/
extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface);
/** /**
* Creates a new surface of the specified format, and then copies and maps * Creates a new surface of the specified format, and then copies and maps
* the given surface to it so the blit of the converted surface will be as * the given surface to it so the blit of the converted surface will be as
@ -498,6 +516,6 @@ extern DECLSPEC int SDLCALL SDL_LowerBlitScaled
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_surface_h */ #endif /* SDL_surface_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for platform specific SDL API functions * Include file for platform specific SDL API functions
*/ */
#ifndef _SDL_system_h #ifndef SDL_system_h_
#define _SDL_system_h #define SDL_system_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_keyboard.h" #include "SDL_keyboard.h"
@ -96,7 +96,7 @@ extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled);
This returns JNIEnv*, but the prototype is void* so we don't need jni.h This returns JNIEnv*, but the prototype is void* so we don't need jni.h
*/ */
extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(); extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void);
/** /**
\brief Get the SDL Activity object for the application \brief Get the SDL Activity object for the application
@ -106,7 +106,7 @@ extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv();
It is the caller's responsibility to properly release it It is the caller's responsibility to properly release it
(using env->Push/PopLocalFrame or manually with env->DeleteLocalRef) (using env->Push/PopLocalFrame or manually with env->DeleteLocalRef)
*/ */
extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(); extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void);
/** /**
See the official Android developer guide for more information: See the official Android developer guide for more information:
@ -121,7 +121,7 @@ extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity();
This path is unique to your application and cannot be written to This path is unique to your application and cannot be written to
by other applications. by other applications.
*/ */
extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(); extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void);
/** /**
\brief Get the current state of external storage, a bitmask of these values: \brief Get the current state of external storage, a bitmask of these values:
@ -130,7 +130,7 @@ extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath();
If external storage is currently unavailable, this will return 0. If external storage is currently unavailable, this will return 0.
*/ */
extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(); extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void);
/** /**
\brief Get the path used for external storage for this application. \brief Get the path used for external storage for this application.
@ -138,7 +138,7 @@ extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState();
This path is unique to your application, but is public and can be This path is unique to your application, but is public and can be
written to by other applications. written to by other applications.
*/ */
extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(); extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void);
#endif /* __ANDROID__ */ #endif /* __ANDROID__ */
@ -211,6 +211,6 @@ extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathT
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_system_h */ #endif /* SDL_system_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL custom system window manager hooks. * Include file for SDL custom system window manager hooks.
*/ */
#ifndef _SDL_syswm_h #ifndef SDL_syswm_h_
#define _SDL_syswm_h #define SDL_syswm_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -106,6 +106,10 @@ typedef struct ANativeWindow ANativeWindow;
typedef void *EGLSurface; typedef void *EGLSurface;
#endif #endif
#if defined(SDL_VIDEO_DRIVER_VIVANTE)
#include "SDL_egl.h"
#endif
/** /**
* These are the various supported windowing subsystems * These are the various supported windowing subsystems
*/ */
@ -120,7 +124,9 @@ typedef enum
SDL_SYSWM_WAYLAND, SDL_SYSWM_WAYLAND,
SDL_SYSWM_MIR, SDL_SYSWM_MIR,
SDL_SYSWM_WINRT, SDL_SYSWM_WINRT,
SDL_SYSWM_ANDROID SDL_SYSWM_ANDROID,
SDL_SYSWM_VIVANTE,
SDL_SYSWM_OS2
} SDL_SYSWM_TYPE; } SDL_SYSWM_TYPE;
/** /**
@ -166,6 +172,13 @@ struct SDL_SysWMmsg
int dummy; int dummy;
/* No UIKit window events yet */ /* No UIKit window events yet */
} uikit; } uikit;
#endif
#if defined(SDL_VIDEO_DRIVER_VIVANTE)
struct
{
int dummy;
/* No Vivante window events yet */
} vivante;
#endif #endif
/* Can't have an empty union */ /* Can't have an empty union */
int dummy; int dummy;
@ -189,6 +202,7 @@ struct SDL_SysWMinfo
{ {
HWND window; /**< The window handle */ HWND window; /**< The window handle */
HDC hdc; /**< The window device context */ HDC hdc; /**< The window device context */
HINSTANCE hinstance; /**< The instance handle */
} win; } win;
#endif #endif
#if defined(SDL_VIDEO_DRIVER_WINRT) #if defined(SDL_VIDEO_DRIVER_WINRT)
@ -216,9 +230,9 @@ struct SDL_SysWMinfo
struct struct
{ {
#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
NSWindow __unsafe_unretained *window; /* The Cocoa window */ NSWindow __unsafe_unretained *window; /**< The Cocoa window */
#else #else
NSWindow *window; /* The Cocoa window */ NSWindow *window; /**< The Cocoa window */
#endif #endif
} cocoa; } cocoa;
#endif #endif
@ -226,13 +240,13 @@ struct SDL_SysWMinfo
struct struct
{ {
#if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc) #if defined(__OBJC__) && defined(__has_feature) && __has_feature(objc_arc)
UIWindow __unsafe_unretained *window; /* The UIKit window */ UIWindow __unsafe_unretained *window; /**< The UIKit window */
#else #else
UIWindow *window; /* The UIKit window */ UIWindow *window; /**< The UIKit window */
#endif #endif
GLuint framebuffer; /* The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */
GLuint colorbuffer; /* The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */
GLuint resolveFramebuffer; /* The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */
} uikit; } uikit;
#endif #endif
#if defined(SDL_VIDEO_DRIVER_WAYLAND) #if defined(SDL_VIDEO_DRIVER_WAYLAND)
@ -259,8 +273,17 @@ struct SDL_SysWMinfo
} android; } android;
#endif #endif
/* Can't have an empty union */ #if defined(SDL_VIDEO_DRIVER_VIVANTE)
int dummy; struct
{
EGLNativeDisplayType display;
EGLNativeWindowType window;
} vivante;
#endif
/* Make sure this union is always 64 bytes (8 64-bit pointers). */
/* Be careful not to overflow this if you add a new target! */
Uint8 dummy[64];
} info; } info;
}; };
@ -296,6 +319,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window,
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_syswm_h */ #endif /* SDL_syswm_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -27,21 +27,22 @@
* This code is a part of the SDL2_test library, not the main SDL library. * This code is a part of the SDL2_test library, not the main SDL library.
*/ */
#ifndef _SDL_test_h #ifndef SDL_test_h_
#define _SDL_test_h #define SDL_test_h_
#include "SDL.h" #include "SDL.h"
#include "SDL_test_common.h"
#include "SDL_test_font.h"
#include "SDL_test_random.h"
#include "SDL_test_fuzzer.h"
#include "SDL_test_crc32.h"
#include "SDL_test_md5.h"
#include "SDL_test_log.h"
#include "SDL_test_assert.h" #include "SDL_test_assert.h"
#include "SDL_test_common.h"
#include "SDL_test_compare.h"
#include "SDL_test_crc32.h"
#include "SDL_test_font.h"
#include "SDL_test_fuzzer.h"
#include "SDL_test_harness.h" #include "SDL_test_harness.h"
#include "SDL_test_images.h" #include "SDL_test_images.h"
#include "SDL_test_compare.h" #include "SDL_test_log.h"
#include "SDL_test_md5.h"
#include "SDL_test_memory.h"
#include "SDL_test_random.h"
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -63,6 +64,6 @@ extern "C" {
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_h */ #endif /* SDL_test_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
* *
*/ */
#ifndef _SDL_test_assert_h #ifndef SDL_test_assert_h_
#define _SDL_test_assert_h #define SDL_test_assert_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -80,12 +80,12 @@ void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription,
/** /**
* \brief Resets the assert summary counters to zero. * \brief Resets the assert summary counters to zero.
*/ */
void SDLTest_ResetAssertSummary(); void SDLTest_ResetAssertSummary(void);
/** /**
* \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR.
*/ */
void SDLTest_LogAssertSummary(); void SDLTest_LogAssertSummary(void);
/** /**
@ -93,13 +93,13 @@ void SDLTest_LogAssertSummary();
* *
* \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT
*/ */
int SDLTest_AssertSummaryToTestResult(); int SDLTest_AssertSummaryToTestResult(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_assert_h */ #endif /* SDL_test_assert_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -29,8 +29,8 @@
/* Ported from original test\common.h file. */ /* Ported from original test\common.h file. */
#ifndef _SDL_test_common_h #ifndef SDL_test_common_h_
#define _SDL_test_common_h #define SDL_test_common_h_
#include "SDL.h" #include "SDL.h"
@ -183,6 +183,6 @@ void SDLTest_CommonQuit(SDLTest_CommonState * state);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_common_h */ #endif /* SDL_test_common_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
*/ */
#ifndef _SDL_test_compare_h #ifndef SDL_test_compare_h_
#define _SDL_test_compare_h #define SDL_test_compare_h_
#include "SDL.h" #include "SDL.h"
@ -64,6 +64,6 @@ int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface,
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_compare_h */ #endif /* SDL_test_compare_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
*/ */
#ifndef _SDL_test_crc32_h #ifndef SDL_test_crc32_h_
#define _SDL_test_crc32_h #define SDL_test_crc32_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -93,7 +93,7 @@ extern "C" {
* \returns 0 for OK, -1 on error * \returns 0 for OK, -1 on error
* *
*/ */
int SDLTest_crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); int SDLTest_Crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32);
/* Same routine broken down into three steps */ /* Same routine broken down into three steps */
int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32);
@ -119,6 +119,6 @@ int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_crc32_h */ #endif /* SDL_test_crc32_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -27,8 +27,8 @@
* This code is a part of the SDL2_test library, not the main SDL library. * This code is a part of the SDL2_test library, not the main SDL library.
*/ */
#ifndef _SDL_test_font_h #ifndef SDL_test_font_h_
#define _SDL_test_font_h #define SDL_test_font_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -50,7 +50,7 @@ extern "C" {
* *
* \returns Returns 0 on success, -1 on failure. * \returns Returns 0 on success, -1 on failure.
*/ */
int SDLTest_DrawCharacter( SDL_Renderer *renderer, int x, int y, char c ); int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, char c);
/** /**
* \brief Draw a string in the currently set font. * \brief Draw a string in the currently set font.
@ -62,15 +62,20 @@ int SDLTest_DrawCharacter( SDL_Renderer *renderer, int x, int y, char c );
* *
* \returns Returns 0 on success, -1 on failure. * \returns Returns 0 on success, -1 on failure.
*/ */
int SDLTest_DrawString( SDL_Renderer * renderer, int x, int y, const char *s ); int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s);
/**
* \brief Cleanup textures used by font drawing functions.
*/
void SDLTest_CleanupTextDrawing(void);
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_font_h */ #endif /* SDL_test_font_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
*/ */
#ifndef _SDL_test_fuzzer_h #ifndef SDL_test_fuzzer_h_
#define _SDL_test_fuzzer_h #define SDL_test_fuzzer_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -68,14 +68,14 @@ void SDLTest_FuzzerInit(Uint64 execKey);
* *
* \returns Generated integer * \returns Generated integer
*/ */
Uint8 SDLTest_RandomUint8(); Uint8 SDLTest_RandomUint8(void);
/** /**
* Returns a random Sint8 * Returns a random Sint8
* *
* \returns Generated signed integer * \returns Generated signed integer
*/ */
Sint8 SDLTest_RandomSint8(); Sint8 SDLTest_RandomSint8(void);
/** /**
@ -83,14 +83,14 @@ Sint8 SDLTest_RandomSint8();
* *
* \returns Generated integer * \returns Generated integer
*/ */
Uint16 SDLTest_RandomUint16(); Uint16 SDLTest_RandomUint16(void);
/** /**
* Returns a random Sint16 * Returns a random Sint16
* *
* \returns Generated signed integer * \returns Generated signed integer
*/ */
Sint16 SDLTest_RandomSint16(); Sint16 SDLTest_RandomSint16(void);
/** /**
@ -98,7 +98,7 @@ Sint16 SDLTest_RandomSint16();
* *
* \returns Generated integer * \returns Generated integer
*/ */
Sint32 SDLTest_RandomSint32(); Sint32 SDLTest_RandomSint32(void);
/** /**
@ -106,14 +106,14 @@ Sint32 SDLTest_RandomSint32();
* *
* \returns Generated integer * \returns Generated integer
*/ */
Uint32 SDLTest_RandomUint32(); Uint32 SDLTest_RandomUint32(void);
/** /**
* Returns random Uint64. * Returns random Uint64.
* *
* \returns Generated integer * \returns Generated integer
*/ */
Uint64 SDLTest_RandomUint64(); Uint64 SDLTest_RandomUint64(void);
/** /**
@ -121,29 +121,29 @@ Uint64 SDLTest_RandomUint64();
* *
* \returns Generated signed integer * \returns Generated signed integer
*/ */
Sint64 SDLTest_RandomSint64(); Sint64 SDLTest_RandomSint64(void);
/** /**
* \returns random float in range [0.0 - 1.0[ * \returns random float in range [0.0 - 1.0[
*/ */
float SDLTest_RandomUnitFloat(); float SDLTest_RandomUnitFloat(void);
/** /**
* \returns random double in range [0.0 - 1.0[ * \returns random double in range [0.0 - 1.0[
*/ */
double SDLTest_RandomUnitDouble(); double SDLTest_RandomUnitDouble(void);
/** /**
* \returns random float. * \returns random float.
* *
*/ */
float SDLTest_RandomFloat(); float SDLTest_RandomFloat(void);
/** /**
* \returns random double. * \returns random double.
* *
*/ */
double SDLTest_RandomDouble(); double SDLTest_RandomDouble(void);
/** /**
* Returns a random boundary value for Uint8 within the given boundaries. * Returns a random boundary value for Uint8 within the given boundaries.
@ -338,7 +338,7 @@ Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max);
* *
* \returns Newly allocated random string; or NULL if length was invalid or string could not be allocated. * \returns Newly allocated random string; or NULL if length was invalid or string could not be allocated.
*/ */
char * SDLTest_RandomAsciiString(); char * SDLTest_RandomAsciiString(void);
/** /**
@ -371,7 +371,7 @@ char * SDLTest_RandomAsciiStringOfSize(int size);
/** /**
* Returns the invocation count for the fuzzer since last ...FuzzerInit. * Returns the invocation count for the fuzzer since last ...FuzzerInit.
*/ */
int SDLTest_GetFuzzerInvocationCount(); int SDLTest_GetFuzzerInvocationCount(void);
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */
#ifdef __cplusplus #ifdef __cplusplus
@ -379,6 +379,6 @@ int SDLTest_GetFuzzerInvocationCount();
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_fuzzer_h */ #endif /* SDL_test_fuzzer_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
Based on original GSOC code by Markus Kauppila <markus.kauppila@gmail.com> Based on original GSOC code by Markus Kauppila <markus.kauppila@gmail.com>
*/ */
#ifndef _SDL_test_harness_h #ifndef SDL_test_h_arness_h
#define _SDL_test_harness_h #define SDL_test_h_arness_h
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -98,6 +98,17 @@ typedef struct SDLTest_TestSuiteReference {
} SDLTest_TestSuiteReference; } SDLTest_TestSuiteReference;
/**
* \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z).
*
* Note: The returned string needs to be deallocated by the caller.
*
* \param length The length of the seed string to generate
*
* \returns The generated seed string
*/
char *SDLTest_GenerateRunSeed(const int length);
/** /**
* \brief Execute a test suite using the given run seed and execution key. * \brief Execute a test suite using the given run seed and execution key.
* *
@ -118,6 +129,6 @@ int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *user
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_harness_h */ #endif /* SDL_test_h_arness_h */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
*/ */
#ifndef _SDL_test_images_h #ifndef SDL_test_images_h_
#define _SDL_test_images_h #define SDL_test_images_h_
#include "SDL.h" #include "SDL.h"
@ -55,17 +55,17 @@ typedef struct SDLTest_SurfaceImage_s {
} SDLTest_SurfaceImage_t; } SDLTest_SurfaceImage_t;
/* Test images */ /* Test images */
SDL_Surface *SDLTest_ImageBlit(); SDL_Surface *SDLTest_ImageBlit(void);
SDL_Surface *SDLTest_ImageBlitColor(); SDL_Surface *SDLTest_ImageBlitColor(void);
SDL_Surface *SDLTest_ImageBlitAlpha(); SDL_Surface *SDLTest_ImageBlitAlpha(void);
SDL_Surface *SDLTest_ImageBlitBlendAdd(); SDL_Surface *SDLTest_ImageBlitBlendAdd(void);
SDL_Surface *SDLTest_ImageBlitBlend(); SDL_Surface *SDLTest_ImageBlitBlend(void);
SDL_Surface *SDLTest_ImageBlitBlendMod(); SDL_Surface *SDLTest_ImageBlitBlendMod(void);
SDL_Surface *SDLTest_ImageBlitBlendNone(); SDL_Surface *SDLTest_ImageBlitBlendNone(void);
SDL_Surface *SDLTest_ImageBlitBlendAll(); SDL_Surface *SDLTest_ImageBlitBlendAll(void);
SDL_Surface *SDLTest_ImageFace(); SDL_Surface *SDLTest_ImageFace(void);
SDL_Surface *SDLTest_ImagePrimitives(); SDL_Surface *SDLTest_ImagePrimitives(void);
SDL_Surface *SDLTest_ImagePrimitivesBlend(); SDL_Surface *SDLTest_ImagePrimitivesBlend(void);
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */
#ifdef __cplusplus #ifdef __cplusplus
@ -73,6 +73,6 @@ SDL_Surface *SDLTest_ImagePrimitivesBlend();
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_images_h */ #endif /* SDL_test_images_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -33,8 +33,8 @@
* *
*/ */
#ifndef _SDL_test_log_h #ifndef SDL_test_log_h_
#define _SDL_test_log_h #define SDL_test_log_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -62,6 +62,6 @@ void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_log_h */ #endif /* SDL_test_log_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -53,8 +53,8 @@
*********************************************************************** ***********************************************************************
*/ */
#ifndef _SDL_test_md5_h #ifndef SDL_test_md5_h_
#define _SDL_test_md5_h #define SDL_test_md5_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -124,6 +124,6 @@ extern "C" {
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_md5_h */ #endif /* SDL_test_md5_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -0,0 +1,63 @@
/*
Simple DirectMedia Layer
Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/**
* \file SDL_test_memory.h
*
* Include file for SDL test framework.
*
* This code is a part of the SDL2_test library, not the main SDL library.
*/
#ifndef SDL_test_memory_h_
#define SDL_test_memory_h_
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
/**
* \brief Start tracking SDL memory allocations
*
* \note This should be called before any other SDL functions for complete tracking coverage
*/
int SDLTest_TrackAllocations();
/**
* \brief Print a log of any outstanding allocations
*
* \note This can be called after SDL_Quit()
*/
void SDLTest_LogAllocations();
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"
#endif /* SDL_test_memory_h_ */
/* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -37,8 +37,8 @@
*/ */
#ifndef _SDL_test_random_h #ifndef SDL_test_random_h_
#define _SDL_test_random_h #define SDL_test_random_h_
#include "begin_code.h" #include "begin_code.h"
/* Set up for C function definitions, even when using C++ */ /* Set up for C function definitions, even when using C++ */
@ -110,6 +110,6 @@ extern "C" {
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_test_random_h */ #endif /* SDL_test_random_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_thread_h #ifndef SDL_thread_h_
#define _SDL_thread_h #define SDL_thread_h_
/** /**
* \file SDL_thread.h * \file SDL_thread.h
@ -74,15 +74,15 @@ typedef int (SDLCALL * SDL_ThreadFunction) (void *data);
* *
* We compile SDL into a DLL. This means, that it's the DLL which * We compile SDL into a DLL. This means, that it's the DLL which
* creates a new thread for the calling process with the SDL_CreateThread() * creates a new thread for the calling process with the SDL_CreateThread()
* API. There is a problem with this, that only the RTL of the SDL.DLL will * API. There is a problem with this, that only the RTL of the SDL2.DLL will
* be initialized for those threads, and not the RTL of the calling * be initialized for those threads, and not the RTL of the calling
* application! * application!
* *
* To solve this, we make a little hack here. * To solve this, we make a little hack here.
* *
* We'll always use the caller's _beginthread() and _endthread() APIs to * We'll always use the caller's _beginthread() and _endthread() APIs to
* start a new thread. This way, if it's the SDL.DLL which uses this API, * start a new thread. This way, if it's the SDL2.DLL which uses this API,
* then the RTL of SDL.DLL will be used to create the new thread, and if it's * then the RTL of SDL2.DLL will be used to create the new thread, and if it's
* the application, then the RTL of the application will be used. * the application, then the RTL of the application will be used.
* *
* So, in short: * So, in short:
@ -90,14 +90,11 @@ typedef int (SDLCALL * SDL_ThreadFunction) (void *data);
* library! * library!
*/ */
#define SDL_PASSED_BEGINTHREAD_ENDTHREAD #define SDL_PASSED_BEGINTHREAD_ENDTHREAD
#include <process.h> /* This has _beginthread() and _endthread() defined! */ #include <process.h> /* _beginthreadex() and _endthreadex() */
typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread) (void *, unsigned, typedef uintptr_t(__cdecl * pfnSDL_CurrentBeginThread)
unsigned (__stdcall * (void *, unsigned, unsigned (__stdcall *func)(void *),
func) (void void * /*arg*/, unsigned, unsigned * /* threadID */);
*),
void *arg, unsigned,
unsigned *threadID);
typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code);
/** /**
@ -118,6 +115,30 @@ SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data,
#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex) #define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthreadex, (pfnSDL_CurrentEndThread)_endthreadex)
#endif #endif
#elif defined(__OS2__)
/*
* just like the windows case above: We compile SDL2
* into a dll with Watcom's runtime statically linked.
*/
#define SDL_PASSED_BEGINTHREAD_ENDTHREAD
#ifndef __EMX__
#include <process.h>
#else
#include <stdlib.h>
#endif
typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/);
typedef void (*pfnSDL_CurrentEndThread)(void);
extern DECLSPEC SDL_Thread *SDLCALL
SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data,
pfnSDL_CurrentBeginThread pfnBeginThread,
pfnSDL_CurrentEndThread pfnEndThread);
#if defined(SDL_CreateThread) && SDL_DYNAMIC_API
#undef SDL_CreateThread
#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
#else
#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)_beginthread, (pfnSDL_CurrentEndThread)_endthread)
#endif
#else #else
/** /**
@ -273,7 +294,7 @@ extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id);
* \sa SDL_TLSCreate() * \sa SDL_TLSCreate()
* \sa SDL_TLSGet() * \sa SDL_TLSGet()
*/ */
extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (*destructor)(void*)); extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (SDLCALL *destructor)(void*));
/* Ends C function definitions when using C++ */ /* Ends C function definitions when using C++ */
@ -282,6 +303,6 @@ extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, void (*d
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_thread_h */ #endif /* SDL_thread_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -19,8 +19,8 @@
3. This notice may not be removed or altered from any source distribution. 3. This notice may not be removed or altered from any source distribution.
*/ */
#ifndef _SDL_timer_h #ifndef SDL_timer_h_
#define _SDL_timer_h #define SDL_timer_h_
/** /**
* \file SDL_timer.h * \file SDL_timer.h
@ -110,6 +110,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_timer_h */ #endif /* SDL_timer_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Include file for SDL touch event handling. * Include file for SDL touch event handling.
*/ */
#ifndef _SDL_touch_h #ifndef SDL_touch_h_
#define _SDL_touch_h #define SDL_touch_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_error.h" #include "SDL_error.h"
@ -81,6 +81,6 @@ extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_touch_h */ #endif /* SDL_touch_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* This header defines the current SDL version. * This header defines the current SDL version.
*/ */
#ifndef _SDL_version_h #ifndef SDL_version_h_
#define _SDL_version_h #define SDL_version_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
@ -59,7 +59,7 @@ typedef struct SDL_version
*/ */
#define SDL_MAJOR_VERSION 2 #define SDL_MAJOR_VERSION 2
#define SDL_MINOR_VERSION 0 #define SDL_MINOR_VERSION 0
#define SDL_PATCHLEVEL 4 #define SDL_PATCHLEVEL 7
/** /**
* \brief Macro to determine SDL version program was compiled against. * \brief Macro to determine SDL version program was compiled against.
@ -157,6 +157,6 @@ extern DECLSPEC int SDLCALL SDL_GetRevisionNumber(void);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_version_h */ #endif /* SDL_version_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -25,8 +25,8 @@
* Header file for SDL video functions. * Header file for SDL video functions.
*/ */
#ifndef _SDL_video_h #ifndef SDL_video_h_
#define _SDL_video_h #define SDL_video_h_
#include "SDL_stdinc.h" #include "SDL_stdinc.h"
#include "SDL_pixels.h" #include "SDL_pixels.h"
@ -83,6 +83,7 @@ typedef struct
* \sa SDL_SetWindowPosition() * \sa SDL_SetWindowPosition()
* \sa SDL_SetWindowSize() * \sa SDL_SetWindowSize()
* \sa SDL_SetWindowBordered() * \sa SDL_SetWindowBordered()
* \sa SDL_SetWindowResizable()
* \sa SDL_SetWindowTitle() * \sa SDL_SetWindowTitle()
* \sa SDL_ShowWindow() * \sa SDL_ShowWindow()
*/ */
@ -95,6 +96,7 @@ typedef struct SDL_Window SDL_Window;
*/ */
typedef enum typedef enum
{ {
/* !!! FIXME: change this to name = (1<<x). */
SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */
SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */
SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */
@ -109,13 +111,19 @@ typedef enum
SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ),
SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */
SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported */ SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported */
SDL_WINDOW_MOUSE_CAPTURE = 0x00004000 /**< window has mouse captured (unrelated to INPUT_GRABBED) */ SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to INPUT_GRABBED) */
SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */
SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */
SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */
SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */
SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */
SDL_WINDOW_VULKAN = 0x10000000 /**< window usable for Vulkan surface */
} SDL_WindowFlags; } SDL_WindowFlags;
/** /**
* \brief Used to indicate that you don't care what the window position is. * \brief Used to indicate that you don't care what the window position is.
*/ */
#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000 #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) #define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
#define SDL_WINDOWPOS_ISUNDEFINED(X) \ #define SDL_WINDOWPOS_ISUNDEFINED(X) \
@ -124,7 +132,7 @@ typedef enum
/** /**
* \brief Used to indicate that the window position should be centered. * \brief Used to indicate that the window position should be centered.
*/ */
#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000 #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X))
#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) #define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0)
#define SDL_WINDOWPOS_ISCENTERED(X) \ #define SDL_WINDOWPOS_ISCENTERED(X) \
@ -154,8 +162,9 @@ typedef enum
SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */
SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */
SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */
SDL_WINDOWEVENT_CLOSE /**< The window manager requests that the SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */
window be closed */ SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */
SDL_WINDOWEVENT_HIT_TEST /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */
} SDL_WindowEventID; } SDL_WindowEventID;
/** /**
@ -192,14 +201,16 @@ typedef enum
SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_MASK,
SDL_GL_SHARE_WITH_CURRENT_CONTEXT, SDL_GL_SHARE_WITH_CURRENT_CONTEXT,
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, SDL_GL_FRAMEBUFFER_SRGB_CAPABLE,
SDL_GL_CONTEXT_RELEASE_BEHAVIOR SDL_GL_CONTEXT_RELEASE_BEHAVIOR,
SDL_GL_CONTEXT_RESET_NOTIFICATION,
SDL_GL_CONTEXT_NO_ERROR
} SDL_GLattr; } SDL_GLattr;
typedef enum typedef enum
{ {
SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, SDL_GL_CONTEXT_PROFILE_CORE = 0x0001,
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002,
SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /* GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
} SDL_GLprofile; } SDL_GLprofile;
typedef enum typedef enum
@ -216,6 +227,11 @@ typedef enum
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001
} SDL_GLcontextReleaseFlag; } SDL_GLcontextReleaseFlag;
typedef enum
{
SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000,
SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001
} SDL_GLContextResetNotification;
/* Function prototypes */ /* Function prototypes */
@ -310,6 +326,25 @@ extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * re
*/ */
extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi);
/**
* \brief Get the usable desktop area represented by a display, with the
* primary display located at 0,0
*
* This is the same area as SDL_GetDisplayBounds() reports, but with portions
* reserved by the system removed. For example, on Mac OS X, this subtracts
* the area occupied by the menu bar and dock.
*
* Setting a window to be fullscreen generally bypasses these unusable areas,
* so these are good guidelines for the maximum space available to a
* non-fullscreen window.
*
* \return 0 on success, or -1 if the index is out of range.
*
* \sa SDL_GetDisplayBounds()
* \sa SDL_GetNumVideoDisplays()
*/
extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect);
/** /**
* \brief Returns the number of available display modes. * \brief Returns the number of available display modes.
* *
@ -421,17 +456,32 @@ extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window);
* ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS, * ::SDL_WINDOW_HIDDEN, ::SDL_WINDOW_BORDERLESS,
* ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED, * ::SDL_WINDOW_RESIZABLE, ::SDL_WINDOW_MAXIMIZED,
* ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_INPUT_GRABBED, * ::SDL_WINDOW_MINIMIZED, ::SDL_WINDOW_INPUT_GRABBED,
* ::SDL_WINDOW_ALLOW_HIGHDPI. * ::SDL_WINDOW_ALLOW_HIGHDPI, ::SDL_WINDOW_VULKAN.
* *
* \return The id of the window created, or zero if window creation failed. * \return The created window, or NULL if window creation failed.
* *
* If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size * If the window is created with the SDL_WINDOW_ALLOW_HIGHDPI flag, its size
* in pixels may differ from its size in screen coordinates on platforms with * in pixels may differ from its size in screen coordinates on platforms with
* high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query * high-DPI support (e.g. iOS and Mac OS X). Use SDL_GetWindowSize() to query
* the client area's size in screen coordinates, and SDL_GL_GetDrawableSize() * the client area's size in screen coordinates, and SDL_GL_GetDrawableSize(),
* or SDL_GetRendererOutputSize() to query the drawable size in pixels. * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to query the
* drawable size in pixels.
*
* If the window is created with any of the SDL_WINDOW_OPENGL or
* SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function
* (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the
* corrensponding UnloadLibrary function is called by SDL_DestroyWindow().
*
* If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver,
* SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail.
*
* \note On non-Apple devices, SDL requires you to either not link to the
* Vulkan loader or link to a dynamic library version. This limitation
* may be removed in a future version of SDL.
* *
* \sa SDL_DestroyWindow() * \sa SDL_DestroyWindow()
* \sa SDL_GL_LoadLibrary()
* \sa SDL_Vulkan_LoadLibrary()
*/ */
extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
int x, int y, int w, int x, int y, int w,
@ -442,7 +492,7 @@ extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title,
* *
* \param data A pointer to driver-dependent window creation data * \param data A pointer to driver-dependent window creation data
* *
* \return The id of the window created, or zero if window creation failed. * \return The created window, or NULL if window creation failed.
* *
* \sa SDL_DestroyWindow() * \sa SDL_DestroyWindow()
*/ */
@ -554,8 +604,8 @@ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window,
* \param w The width of the window, in screen coordinates. Must be >0. * \param w The width of the window, in screen coordinates. Must be >0.
* \param h The height of the window, in screen coordinates. Must be >0. * \param h The height of the window, in screen coordinates. Must be >0.
* *
* \note You can't change the size of a fullscreen window, it automatically * \note Fullscreen windows automatically match the size of the display mode,
* matches the size of the display mode. * and you should use SDL_SetWindowDisplayMode() to change their size.
* *
* The window size in screen coordinates may differ from the size in pixels, if * The window size in screen coordinates may differ from the size in pixels, if
* the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with * the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a platform with
@ -563,6 +613,7 @@ extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window,
* SDL_GetRendererOutputSize() to get the real client area size in pixels. * SDL_GetRendererOutputSize() to get the real client area size in pixels.
* *
* \sa SDL_GetWindowSize() * \sa SDL_GetWindowSize()
* \sa SDL_SetWindowDisplayMode()
*/ */
extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
int h); int h);
@ -586,6 +637,25 @@ extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w,
extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w,
int *h); int *h);
/**
* \brief Get the size of a window's borders (decorations) around the client area.
*
* \param window The window to query.
* \param top Pointer to variable for storing the size of the top border. NULL is permitted.
* \param left Pointer to variable for storing the size of the left border. NULL is permitted.
* \param bottom Pointer to variable for storing the size of the bottom border. NULL is permitted.
* \param right Pointer to variable for storing the size of the right border. NULL is permitted.
*
* \return 0 on success, or -1 if getting this information is not supported.
*
* \note if this function fails (returns -1), the size values will be
* initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as
* if the window in question was borderless.
*/
extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window,
int *top, int *left,
int *bottom, int *right);
/** /**
* \brief Set the minimum size of a window's client area. * \brief Set the minimum size of a window's client area.
* *
@ -661,6 +731,23 @@ extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window,
extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window,
SDL_bool bordered); SDL_bool bordered);
/**
* \brief Set the user-resizable state of a window.
*
* This will add or remove the window's SDL_WINDOW_RESIZABLE flag and
* allow/disallow user resizing of the window. This is a no-op if the
* window's resizable state already matches the requested state.
*
* \param window The window of which to change the resizable state.
* \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow.
*
* \note You can't change the resizable state of a fullscreen window.
*
* \sa SDL_GetWindowFlags()
*/
extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window,
SDL_bool resizable);
/** /**
* \brief Show a window. * \brief Show a window.
* *
@ -744,7 +831,7 @@ extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window);
* \return 0 on success, or -1 on error. * \return 0 on success, or -1 on error.
* *
* \sa SDL_GetWindowSurface() * \sa SDL_GetWindowSurface()
* \sa SDL_UpdateWindowSurfaceRect() * \sa SDL_UpdateWindowSurface()
*/ */
extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window,
const SDL_Rect * rects, const SDL_Rect * rects,
@ -801,6 +888,58 @@ extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float b
*/ */
extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window);
/**
* \brief Set the opacity for a window
*
* \param window The window which will be made transparent or opaque
* \param opacity Opacity (0.0f - transparent, 1.0f - opaque) This will be
* clamped internally between 0.0f and 1.0f.
*
* \return 0 on success, or -1 if setting the opacity isn't supported.
*
* \sa SDL_GetWindowOpacity()
*/
extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity);
/**
* \brief Get the opacity of a window.
*
* If transparency isn't supported on this platform, opacity will be reported
* as 1.0f without error.
*
* \param window The window in question.
* \param out_opacity Opacity (0.0f - transparent, 1.0f - opaque)
*
* \return 0 on success, or -1 on error (invalid window, etc).
*
* \sa SDL_SetWindowOpacity()
*/
extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity);
/**
* \brief Sets the window as a modal for another window (TODO: reconsider this function and/or its name)
*
* \param modal_window The window that should be modal
* \param parent_window The parent window
*
* \return 0 on success, or -1 otherwise.
*/
extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window);
/**
* \brief Explicitly sets input focus to the window.
*
* You almost certainly want SDL_RaiseWindow() instead of this function. Use
* this with caution, as you might give focus to a window that's completely
* obscured by other windows.
*
* \param window The window that should get the input focus
*
* \return 0 on success, or -1 otherwise.
* \sa SDL_RaiseWindow()
*/
extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window);
/** /**
* \brief Set the gamma ramp for a window. * \brief Set the gamma ramp for a window.
* *
@ -920,7 +1059,7 @@ extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window);
/** /**
* \brief Returns whether the screensaver is currently enabled (default on). * \brief Returns whether the screensaver is currently enabled (default off).
* *
* \sa SDL_EnableScreenSaver() * \sa SDL_EnableScreenSaver()
* \sa SDL_DisableScreenSaver() * \sa SDL_DisableScreenSaver()
@ -995,11 +1134,16 @@ extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
/** /**
* \brief Set an OpenGL window attribute before window creation. * \brief Set an OpenGL window attribute before window creation.
*
* \return 0 on success, or -1 if the attribute could not be set.
*/ */
extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value);
/** /**
* \brief Get the actual value for an attribute from the current context. * \brief Get the actual value for an attribute from the current context.
*
* \return 0 on success, or -1 if the attribute could not be retrieved.
* The integer at \c value will be modified in either case.
*/ */
extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);
@ -1098,6 +1242,6 @@ extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context);
#endif #endif
#include "close_code.h" #include "close_code.h"
#endif /* _SDL_video_h */ #endif /* SDL_video_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View File

@ -0,0 +1,257 @@
/*
Simple DirectMedia Layer
Copyright (C) 2017, Mark Callow
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/**
* \file SDL_vulkan.h
*
* Header file for functions to creating Vulkan surfaces on SDL windows.
*/
#ifndef SDL_vulkan_h_
#define SDL_vulkan_h_
#include "SDL_video.h"
#include "begin_code.h"
/* Set up for C function definitions, even when using C++ */
#ifdef __cplusplus
extern "C" {
#endif
/* Avoid including vulkan.h, don't define VkInstance if it's already included */
#ifdef VULKAN_H_
#define NO_SDL_VULKAN_TYPEDEFS
#endif
#ifndef NO_SDL_VULKAN_TYPEDEFS
#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object;
#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__)
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object;
#else
#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object;
#endif
VK_DEFINE_HANDLE(VkInstance)
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
#endif /* !NO_SDL_VULKAN_TYPEDEFS */
typedef VkInstance SDL_vulkanInstance;
typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */
/**
* \name Vulkan support functions
*
* \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API
* is compatable with Tizen's implementation of Vulkan in SDL.
*/
/* @{ */
/**
* \brief Dynamically load a Vulkan loader library.
*
* \param [in] path The platform dependent Vulkan loader library name, or
* \c NULL to open the default Vulkan loader library.
*
* \return \c 0 on success, or \c -1 if the library couldn't be loaded.
*
* This should be done after initializing the video driver, but before
* creating any Vulkan windows. If no Vulkan loader library is loaded, the
* default library will be loaded upon creation of the first Vulkan window.
*
* \note If you specify a non-NULL \a path, you should retrieve all of the
* Vulkan functions used in your program from the dynamic library using
* \c SDL_Vulkan_GetVkGetInstanceProcAddr() unless you can guarantee
* \a path points to the same vulkan loader library that you linked to.
*
* \note On Apple devices, if \a path is NULL, SDL will attempt to find
* the vkGetInstanceProcAddr address within all the mach-o images of
* the current process. This is because the currently (v0.17.0)
* recommended MoltenVK (Vulkan on Metal) usage is as a static library.
* If it is not found then SDL will attempt to load \c libMoltenVK.dylib.
* Applications using the dylib alternative therefore do not need to do
* anything special when calling SDL.
*
* \note On non-Apple devices, SDL requires you to either not link to the
* Vulkan loader or link to a dynamic library version. This limitation
* may be removed in a future version of SDL.
*
* \note This function will fail if there are no working Vulkan drivers
* installed.
*
* \sa SDL_Vulkan_GetVkGetInstanceProcAddr()
* \sa SDL_Vulkan_UnloadLibrary()
*/
extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path);
/**
* \brief Get the address of the \c vkGetInstanceProcAddr function.
*
* \note This should be called after either calling SDL_Vulkan_LoadLibrary
* or creating an SDL_Window with the SDL_WINDOW_VULKAN flag.
*/
extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void);
/**
* \brief Unload the Vulkan loader library previously loaded by
* \c SDL_Vulkan_LoadLibrary().
*
* \sa SDL_Vulkan_LoadLibrary()
*/
extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void);
/**
* \brief Get the names of the Vulkan instance extensions needed to create
* a surface with \c SDL_Vulkan_CreateSurface().
*
* \param [in] window Window for which the required Vulkan instance
* extensions should be retrieved
* \param [in,out] count pointer to an \c unsigned related to the number of
* required Vulkan instance extensions
* \param [out] names \c NULL or a pointer to an array to be filled with the
* required Vulkan instance extensions
*
* \return \c SDL_TRUE on success, \c SDL_FALSE on error.
*
* If \a pNames is \c NULL, then the number of required Vulkan instance
* extensions is returned in pCount. Otherwise, \a pCount must point to a
* variable set to the number of elements in the \a pNames array, and on
* return the variable is overwritten with the number of names actually
* written to \a pNames. If \a pCount is less than the number of required
* extensions, at most \a pCount structures will be written. If \a pCount
* is smaller than the number of required extensions, \c SDL_FALSE will be
* returned instead of \c SDL_TRUE, to indicate that not all the required
* extensions were returned.
*
* \note The returned list of extensions will contain \c VK_KHR_surface
* and zero or more platform specific extensions
*
* \note The extension names queried here must be enabled when calling
* VkCreateInstance, otherwise surface creation will fail.
*
* \note \c window should have been created with the \c SDL_WINDOW_VULKAN flag.
*
* \code
* unsigned int count;
* // get count of required extensions
* if(!SDL_Vulkan_GetInstanceExtensions(window, &count, NULL))
* handle_error();
*
* static const char *const additionalExtensions[] =
* {
* VK_EXT_DEBUG_REPORT_EXTENSION_NAME, // example additional extension
* };
* size_t additionalExtensionsCount = sizeof(additionalExtensions) / sizeof(additionalExtensions[0]);
* size_t extensionCount = count + additionalExtensionsCount;
* const char **names = malloc(sizeof(const char *) * extensionCount);
* if(!names)
* handle_error();
*
* // get names of required extensions
* if(!SDL_Vulkan_GetInstanceExtensions(window, &count, names))
* handle_error();
*
* // copy additional extensions after required extensions
* for(size_t i = 0; i < additionalExtensionsCount; i++)
* names[i + count] = additionalExtensions[i];
*
* VkInstanceCreateInfo instanceCreateInfo = {};
* instanceCreateInfo.enabledExtensionCount = extensionCount;
* instanceCreateInfo.ppEnabledExtensionNames = names;
* // fill in rest of instanceCreateInfo
*
* VkInstance instance;
* // create the Vulkan instance
* VkResult result = vkCreateInstance(&instanceCreateInfo, NULL, &instance);
* free(names);
* \endcode
*
* \sa SDL_Vulkan_CreateSurface()
*/
extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(
SDL_Window *window,
unsigned int *pCount,
const char **pNames);
/**
* \brief Create a Vulkan rendering surface for a window.
*
* \param [in] window SDL_Window to which to attach the rendering surface.
* \param [in] instance handle to the Vulkan instance to use.
* \param [out] surface pointer to a VkSurfaceKHR handle to receive the
* handle of the newly created surface.
*
* \return \c SDL_TRUE on success, \c SDL_FALSE on error.
*
* \code
* VkInstance instance;
* SDL_Window *window;
*
* // create instance and window
*
* // create the Vulkan surface
* VkSurfaceKHR surface;
* if(!SDL_Vulkan_CreateSurface(window, instance, &surface))
* handle_error();
* \endcode
*
* \note \a window should have been created with the \c SDL_WINDOW_VULKAN flag.
*
* \note \a instance should have been created with the extensions returned
* by \c SDL_Vulkan_CreateSurface() enabled.
*
* \sa SDL_Vulkan_GetInstanceExtensions()
*/
extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(
SDL_Window *window,
VkInstance instance,
VkSurfaceKHR* surface);
/**
* \brief Get the size of a window's underlying drawable in pixels (for use
* with setting viewport, scissor & etc).
*
* \param window SDL_Window from which the drawable size should be queried
* \param w Pointer to variable for storing the width in pixels,
* may be NULL
* \param h Pointer to variable for storing the height in pixels,
* may be NULL
*
* This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI
* drawable, i.e. the window was created with SDL_WINDOW_ALLOW_HIGHDPI on a
* platform with high-DPI support (Apple calls this "Retina"), and not disabled
* by the \c SDL_HINT_VIDEO_HIGHDPI_DISABLED hint.
*
* \sa SDL_GetWindowSize()
* \sa SDL_CreateWindow()
*/
extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window,
int *w, int *h);
/* @} *//* Vulkan support functions */
/* Ends C function definitions when using C++ */
#ifdef __cplusplus
}
#endif
#include "close_code.h"
#endif /* SDL_vulkan_h_ */

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -61,6 +61,12 @@
# else # else
# define DECLSPEC __declspec(dllexport) # define DECLSPEC __declspec(dllexport)
# endif # endif
# elif defined(__OS2__)
# ifdef BUILD_SDL
# define DECLSPEC __declspec(dllexport)
# else
# define DECLSPEC
# endif
# else # else
# if defined(__GNUC__) && __GNUC__ >= 4 # if defined(__GNUC__) && __GNUC__ >= 4
# define DECLSPEC __attribute__ ((visibility("default"))) # define DECLSPEC __attribute__ ((visibility("default")))
@ -74,6 +80,11 @@
#ifndef SDLCALL #ifndef SDLCALL
#if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__) #if (defined(__WIN32__) || defined(__WINRT__)) && !defined(__GNUC__)
#define SDLCALL __cdecl #define SDLCALL __cdecl
#elif defined(__OS2__) || defined(__EMX__)
#define SDLCALL _System
# if defined (__GNUC__) && !defined(_System)
# define _System /* for old EMX/GCC compat. */
# endif
#else #else
#define SDLCALL #define SDLCALL
#endif #endif
@ -111,7 +122,7 @@
#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ #elif defined(_MSC_VER) || defined(__BORLANDC__) || \
defined(__DMC__) || defined(__SC__) || \ defined(__DMC__) || defined(__SC__) || \
defined(__WATCOMC__) || defined(__LCC__) || \ defined(__WATCOMC__) || defined(__LCC__) || \
defined(__DECC) defined(__DECC) || defined(__CC_ARM)
#define SDL_INLINE __inline #define SDL_INLINE __inline
#ifndef __inline__ #ifndef __inline__
#define __inline__ __inline #define __inline__ __inline
@ -134,6 +145,16 @@
#endif #endif
#endif /* SDL_FORCE_INLINE not defined */ #endif /* SDL_FORCE_INLINE not defined */
#ifndef SDL_NORETURN
#if defined(__GNUC__)
#define SDL_NORETURN __attribute__((noreturn))
#elif defined(_MSC_VER)
#define SDL_NORETURN __declspec(noreturn)
#else
#define SDL_NORETURN
#endif
#endif /* SDL_NORETURN not defined */
/* Apparently this is needed by several Windows compilers */ /* Apparently this is needed by several Windows compilers */
#if !defined(__MACH__) #if !defined(__MACH__)
#ifndef NULL #ifndef NULL

View File

@ -1,6 +1,6 @@
/* /*
Simple DirectMedia Layer Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org> Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -29,7 +29,7 @@
#undef _begin_code_h #undef _begin_code_h
/* Reset structure packing at previous byte alignment */ /* Reset structure packing at previous byte alignment */
#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__WATCOMC__) || defined(__BORLANDC__) #if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__)
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#pragma nopackwarning #pragma nopackwarning
#endif #endif

View File

@ -1,10 +1,11 @@
# sdl2 cmake project-config input for ./configure scripts # sdl2 cmake project-config input for ./configure scripts
set(prefix "/usr/local/cross-tools/i686-w64-mingw32") set(prefix "/usr/local/i686-w64-mingw32")
set(exec_prefix "${prefix}") set(exec_prefix "${prefix}")
set(libdir "${exec_prefix}/lib") set(libdir "${exec_prefix}/lib")
set(SDL2_PREFIX "/usr/local/cross-tools/i686-w64-mingw32") set(SDL2_PREFIX "/usr/local/i686-w64-mingw32")
set(SDL2_EXEC_PREFIX "/usr/local/cross-tools/i686-w64-mingw32") set(SDL2_EXEC_PREFIX "/usr/local/i686-w64-mingw32")
set(SDL2_LIBDIR "${exec_prefix}/lib") set(SDL2_LIBDIR "${exec_prefix}/lib")
set(SDL2_INCLUDE_DIRS "${prefix}/include/SDL2") set(SDL2_INCLUDE_DIRS "${prefix}/include/SDL2")
set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} -lmingw32 -lSDL2main -lSDL2 -mwindows") set(SDL2_LIBRARIES "-L${SDL2_LIBDIR} -lmingw32 -lSDL2main -lSDL2 -mwindows")
string(STRIP "${SDL2_LIBRARIES}" SDL2_LIBRARIES)

Some files were not shown because too many files have changed in this diff Show More