sdl2
Both high- and low-level bindings to the SDL library (version 2.0.6+).
Version on this page: | 2.5.5.0 |
LTS Haskell 22.33: | 2.5.5.0@rev:1 |
Stackage Nightly 2023-12-26: | 2.5.5.0 |
Latest on Hackage: | 2.5.5.0@rev:1 |
sdl2-2.5.5.0@sha256:8226fe90c517a9ec52da011a98d3e5523c8e0759c9c28d45d12dfe9178c5fe31,12150
This package contains bindings to the SDL 2 library, in both high- and low-level forms:
The SDL
namespace contains high-level bindings, where enumerations are split
into sum types, and we perform automatic error-checking.
The SDL.Raw
namespace contains an almost 1-1 translation of the C API into
Haskell FFI calls. As such, this does not contain sum types nor error
checking. Thus this namespace is suitable for building your own abstraction
over SDL, but is not recommended for day-to-day programming.
Read SDL
for a getting started guide.
Changes
2.5.5.0
- Added
windowOpacity
property - Added
renderGeometry
andrenderGeometryRaw
- Requires SDL 2.0.18
- See
examples/RenderGeometry.hs
- Changed
SDL.Input.GameController
bindings to be more high-levelControllerAxisEventData
type changed
2.5.4.0
- Added missing floating point variants of render functions.
- Fixed
createCursor
masks. - Adapted
createCursorFrom
helper from LambdaHack1. - Added
pkgconfig
flag (enabled by default) to make its use optional.
2.5.3.3
- Alignment in hsc files is now provided by hsc2c.
2.5.3.2
- Added high-level binding for
setWindowIcon
. - Raised
text
upper bound to 2.0. - Fixed and optimized even polling for SDL 2.0.20.
copyExF
and related are under a package flag now. Turn onrecent-ish
if you have at least 2.0.10.- Removed misleading result type from
updateTexture
.
2.5.3.1
- Constructors exported for ModalLocation, SurfacePixelFormat, AudioSpec.
- Added getWindowBordersSize.
- Added SDL.Input.Mouse.createSystemCursor.
2.5.3.0
- Correct the Storable instance for SDL.Raw.Types.Event to correctly convert SDL_CONTROLLERAXISMOTION to a ControllerAxisEvent (it was previously ControllerButtonEvent). See https://github.com/haskell-game/sdl2/pull/218 for more details.
2.5.2.0
- Correct SDL.Raw.Video.vkLoadLibrary to correctly call vkLoadLibraryFFI, rather than setClipboardTextFFI. See https://github.com/haskell-game/sdl2/pull/209.
2.5.1.0
- Support
linear-1.21
2.5.0.0
-
Version 2.0.6 of the SDL2 C library is now required.
-
Added Vulkan support. See
SDL.Video.WindowGraphicsContext
data type andSDL.Video.Vulkan
module. -
Support
StateVar
< 1.3
2.4.1.0
-
More SDL functions no longer allocate. See https://github.com/haskell-game/sdl2/pull/179 and https://github.com/haskell-game/sdl2/issues/178. Thanks to @chrisdone for this work.
-
Fixed an off-by-one bug in
SDL.Input.Mouse.getMouseButtons
. See https://github.com/haskell-game/sdl2/pull/177 for more information. Thanks to @Linearity for identifying and fixing this bug.
2.4.0.1
- Raise upper bounds for
exceptions
to <0.11
2.4.0
getRelativeMouseLocation
now returnsVector
instead ofPoint
.getModalMouseLocation
returns either aVector
or aPoint
, wrapped in (new)ModalLocation
.WindowSizeChangedEventData
includes the new window size.- Added an invalid state to the
ControllerButtonState
enum, and switched to a more reliable state detection method. - Raise upper bounds for
exceptions
to <0.10
2.3.0
- Windows builds now use
-D_SDL_main_h
. See https://github.com/haskell-game/sdl2/issues/139 for more discussion. - Some basic support for game controller events have been added. See
SDL.Input.GameController
and changes toControllerDeviceEventData
. - Support for event watching:
addEventWatch
anddelEventWatch
. - High-level bindings now distinguish between finger down / motion / up.
See
SDL.Event.TouchFingerEvent
andSDL.Event.TouchFingerMotionEvent
. - Several event payloads now have their
Window
fields modified to useMaybe Window
, substitutingNothing
for null pointers. - High-level structure for controller button state:
ControllerButtonState
. - High-level structure for controller buttons:
ControllerButton
. - High-level structure for controller connection:
ControllerDeviceConnection
. - High-level structure for joystick device connection:
JoyDeviceConnection
. - High-level structure for joystick button state:
JoyButtonState
. - Support for user defined events:
registerEvent
,pushRegisteredEvent
, andgetRegisteredEvent
. - Initial window visibility can be specified in
WindowConfig
forcreateWindow
function. WarpMouseOrigin
is now fully exported and can warp to global coordinates.- It’s possible to retrieve palette information with
paletteNColors
,paletteColors
andpalletColor
.
2.2.0
-
Version 2.0.4 of the SDL2 C library is now required:
SDL.Event
:- Add
AudioDeviceEvent
constructor toEvent
- Add
KeymapChangedEvent
constructor toEventPayload
- Add
mouseWheelEventDirection
field toMouseWheelEventData
- Add
SDL.Input.Mouse
:- Add
MouseScrollDirection
enumeration
- Add
SDL.Raw.Audio
:- Add
clearQueuedAudio
function - Add
getQueuedAudioSize
function - Add
queueAudio
function
- Add
SDL.Raw.Enum
:- Add
SDL_GL_CONTEXT_RELEASE_BEHAVIOR
pattern synonym - Add
JoystickPowerLevel
pattern synonyms - Add
SDL_MOUSEWHEEL_NORMAL
andSDL_MOUSEWHEEL_FLIPPED
pattern synonyms - Add
SDL_KEYMAPCHANGED
,SDL_AUDIODEVICEADDED
,SDL_AUDIODEVICEREMOVED
,SDL_RENDER_TARGETS_RESET
, andSDL_RENDER_DEVICE_RESET
pattern synonyms - Add
SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE
andSDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
pattern synonyms - Add
SDL_WINDOW_MOUSE_CAPTURE
pattern synonym
- Add
SDL.Raw.Event
:- Add
captureMouse
function - Add
getGlobalMouseState
function - Add
warpMouseGlobal
function - Add
joystickCurrentPowerLevel
function - Add
joystickFromInstanceID
function - Add
gameControllerFromInstanceID
function
- Add
SDL.Raw.Event
:- Add
AudioDeviceEvent
constructor toEvent
- Add
KeymapChangedEvent
constructor toEvent
- Add
mouseWheelEventDirection
field toMouseMotionEvent
constructor
- Add
-
Add
SDL.Exception
module, exposingSDLException
-
Add new function,
createSoftwareRenderer
, to render onto a surface -
Add joystick POV hat support
-
Remove deprecated functionality:
InitEverything
enumeration inSDL.Init
mapRGB
inSDL.Video.Renderer
setRelativeMouseMode
inSDL.Input.Mouse
getRelativeMouseMode
inSDL.Input.Mouse
getMouseLocation
inSDL.Input.Mouse
-
Remove
ClipboardUpdateEventData
-
Merge
isScreenSaverEnabled
,enableScreenSaver
, anddisableScreenSaver
into ascreenSaverEnabled
StateVar. -
Make function
surfaceBlit
inSDL.Video.Renderer
return final blit rectangle post-clipping. -
Make all fields in EventData constructors strict
-
Fix issue with
setWindowMode
transitions not working properly between fullscreen and windowed modes.
2.1.3.1
- Raise upper bounds for
vector
to <0.13
2.1.3
- Cabal flag
no-linear
removes dependency onlinear
(and thus, transiently,lens
). SeeSDL.Vect
for details. - Remove ‘lens’ dependency from all examples.
- Add Cabal flag
opengl-example
to separate that target fromexamples
, because it is now the only example with an extra dependency (OpenGL). - Make
hlint
happy with examples. - Add
updateTexture
wrapper for nativeSDL_UpdateTexture
. - Expose
glGetDrawableSize
(can differ from window size in some environments). - Correct
hintToString
output to match SDL hint tokens, rather than the names of the CPP macros defining them. - Removed
ghc-options: -Wall
until we drop support for GHC 7.8. (>1300 warnings!) - Various documentation updates.
2.1.2.1
- Raise upper bounds for
lens
to <4.15 (affects examples only)
2.1.2
- Revise some documentation examples to be more idomatic
- Update
.gitignore
to coverstack
and other tools - Raise upper bounds for
transformers
to <0.6 - Lower required SDL2 version to 2.0.2.
- Fix decoding of
TextEditingEvent
where the Raw bindings failed to stop reading character data past the null terminator.
2.1.1
SDL.Input.Mouse
new has a new API for fetching the location of the mouse. This API gives you greater control over finding the mouse position with respect to the various “modes” a mouse can be in. The old API still exists, but will be removed at some point in the future.SDL.Raw
now has a binding toSDL_free
.
2.1.0
- Introduce
initializeAll
and deprecateInitEverything
. To fix this deprecation warning, changeinitialize [InitEverything]
toinitializeAll
. surfaceColorKey
,surfaceFillRect
andsurfaceFillRects
now all operate on on RGBAV4 Word8
values. They all implicitly map and unmap (usingSDL_MapRGBA
andSDL_GetRGBA
respectively).SDL.mapRGB
is now deprecated, as this conversion is always done for you. If you still need this routine, useSDL.Raw.mapRGB
.- Fix a runtime crash when reading the current BlendMode of a texture. Thanks to @seppeljordan for discovering and fixing this bug.
2.0.0
- Introduce a set of comprehensive high-level bindings to SDL. These bindings
should allow users to work with SDL while writing idiomatic Haskell code. They
take care of pointer manipulation, and wrap up values in much more “natural”
data types. The high-level bindings live in the
SDL
namespace, and have been extensively documented. - Raw bindings have been moved from
Graphics.UI.SDL
toSDL.Raw
.
1.3.1
- Correct type signature of
getSurfaceBlendMode
1.3.0
- Use pattern synonyms exclusively
Graphics.UI.SDL.Enum.Pattern
overridesGraphics.UI.SDL.Enum
- Generalize all IO functions over MonadIO
- Add convenience wrapper functions for constructing FunPtr callbacks
- Add Typeable instances to all type classes
- Add strictness annotations to all data structure fields
- Add missing
SDLK_AUDIOPREV
enumeration - Correct deserialization of
SDL_TEXTINPUT
event- Data beyond the null terminator was returned previously
1.2.0
- Add support for pattern synonyms as an alternative for SDL enumerations
- Only present when compiling with GHC 7.8 or newer
- Add missing enumerations:
keymodShift
,keymodCtrl
,keymodAlt
,keymodGUI
keyPressend
,keyReleased
toucheMouseID
- Specialize init flags over
InitFlag
, aWord32
- Generalize
keymod*
enumerations overNum
- The C API is inconsistent on their types
- Fix foreign imports on
Graphics.UI.SDL.Thread
- Correct type signature of
getRenderDrawBlendMode
- Correct type signature of
queryTexture
- Remove export of
Keycode
fromGraphics.UI.SDL.Types
Graphics.UI.SDL.Enum
already exportsKeycode
1.1.3
- Add missing
Keycode
enumerations - Add missing enumerations:
audioAllowFrequencyChange
,audioAllowFormatChange
audioAllowChannelsChange
,audioAllowAnyChange
1.1.2
- Add
ClipboardUpdateEvent
toEvent
data structure - Add
UnknownEvent
toEvent
data structure
1.1.1
- Add
Graphics.UI.SDL.Platform
module - Add
Graphics.UI.SDL.Thread
module and associated types and enumerations - Add
getWindowWMInfo
- Add
setError
- Add additional logging functions
1.1.0
- Require SDL 2.0.3
- Add
gameControllerAddMappingsFromFile
- Add
gameControllerAddMappingsFromRW
- Add
glResetAttributes
- Add
mouseButtonEventClicks
field toWindowEvent
- Add
- Add missing mouse button enumerations
1.0.2
- Correct type signature of
getNumTouchFingers
1.0.1
- Factor type of
addHintCallback
anddelHintCallback
intoHintCallback
- Add
Version
data structure