# SDL 2.0.14 released!

**URL:** <https://discourse.libsdl.org/t/sdl-2-0-14-released/28470>\
**Category:** SDL Announcements\
**Created:** [December 21, 2020, 10:47pm UTC](https://discourse.libsdl.org/t/sdl-2-0-14-released/28470 "2020-12-21T22:47:39Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![slouken](https://discourse.libsdl.org/letter_avatar_proxy/v4/letter/s/ec9cab/32.png) [@slouken](https://discourse.libsdl.org/u/slouken)\
**Post date:** [December 21, 2020, 10:47pm UTC](https://discourse.libsdl.org/t/sdl-2-0-14-released/28470/1 "2020-12-21T22:47:39Z")

</div>

Thanks to all the people who contributed code and feedback, SDL 2.0.14 is now available!

> **[Simple DirectMedia Layer - SDL version 2.0.14 (stable)](https://www.libsdl.org/download-2.0.php)**

In addition to lots of bug fixes, here are the major changes in this release:

General:

- Added support for PS5 DualSense and Xbox Series X controllers to the HIDAPI controller driver
- Added game controller button constants for paddles and new buttons
- Added game controller functions to get additional information:
  - SDL\_GameControllerGetSerial()
  - SDL\_GameControllerHasAxis()
  - SDL\_GameControllerHasButton()
  - SDL\_GameControllerGetNumTouchpads()
  - SDL\_GameControllerGetNumTouchpadFingers()
  - SDL\_GameControllerGetTouchpadFinger()
  - SDL\_GameControllerHasSensor()
  - SDL\_GameControllerSetSensorEnabled()
  - SDL\_GameControllerIsSensorEnabled()
  - SDL\_GameControllerGetSensorData()
  - SDL\_GameControllerRumbleTriggers()
  - SDL\_GameControllerHasLED()
  - SDL\_GameControllerSetLED()

- Added the hint SDL\_HINT\_JOYSTICK\_HIDAPI\_PS5 to control whether the HIDAPI driver for PS5 controllers should be used.
- Added joystick functions to get additional information:
  - SDL\_JoystickGetSerial()
  - SDL\_JoystickRumbleTriggers()
  - SDL\_JoystickHasLED()
  - SDL\_JoystickSetLED()

- Added an API to allow the application to create virtual joysticks:
  - SDL\_JoystickAttachVirtual()
  - SDL\_JoystickDetachVirtual()
  - SDL\_JoystickIsVirtual()
  - SDL\_JoystickSetVirtualAxis()
  - SDL\_JoystickSetVirtualButton()
  - SDL\_JoystickSetVirtualHat()

- Added SDL\_LockSensors() and SDL\_UnlockSensors() to guarantee exclusive access to the sensor list
- Added SDL\_HAPTIC\_STEERING\_AXIS to play an effect on the steering wheel
- Added the hint SDL\_HINT\_MOUSE\_RELATIVE\_SCALING to control whether relative motion is scaled by the screen DPI or renderer logical size
- The default value for SDL\_HINT\_VIDEO\_MINIMIZE\_ON\_FOCUS\_LOSS is now false for better compatibility with modern window managers
- Added SDL\_GetPreferredLocales() to get the application’s current locale setting
- Added the hint SDL\_HINT\_PREFERRED\_LOCALES to override your application’s default locale setting
- Added SDL\_OpenURL() to open a URL in the system’s default browser
- Added SDL\_HasSurfaceRLE() to tell whether a surface is currently using RLE encoding
- Added SDL\_SIMDRealloc() to reallocate memory obtained from SDL\_SIMDAlloc()
- Added SDL\_GetErrorMsg() to get the last error in a thread-safe way
- Added SDL\_crc32(), SDL\_wcscasecmp(), SDL\_wcsncasecmp(), SDL\_trunc(), SDL\_truncf()
- Added clearer names for RGB pixel formats, e.g. SDL\_PIXELFORMAT\_XRGB8888, SDL\_PIXELFORMAT\_XBGR8888, etc.

Windows:

- Added the RAWINPUT controller driver to support more than 4 Xbox controllers simultaneously
- Added the hint SDL\_HINT\_JOYSTICK\_RAWINPUT to control whether the RAWINPUT driver should be used
- Added the hint SDL\_HINT\_JOYSTICK\_HIDAPI\_CORRELATE\_XINPUT to control whether XInput and WGI should be used to for complete controller functionality with the RAWINPUT driver.

macOS:

- Added the SDL\_WINDOW\_METAL flag to specify that a window should be created with a Metal view
- Added SDL\_Metal\_GetLayer() to get the CAMetalLayer backing a Metal view
- Added SDL\_Metal\_GetDrawableSize() to get the size of a window’s drawable, in pixels

Linux:

- Added Vulkan support to the KMSDRM video driver
- Added the hint SDL\_HINT\_AUDIO\_DEVICE\_APP\_NAME to specify the name that shows up in PulseAudio for your application
- Added the hint SDL\_HINT\_AUDIO\_DEVICE\_STREAM\_NAME to specify the name that shows up in PulseAudio associated with your audio stream
- Added the hint SDL\_HINT\_LINUX\_JOYSTICK\_DEADZONES to control whether HID defined dead zones should be respected on Linux
- Added the hint SDL\_HINT\_THREAD\_PRIORITY\_POLICY to specify the thread scheduler policy
- Added the hint SDL\_HINT\_THREAD\_FORCE\_REALTIME\_TIME\_CRITICAL to allow time critical threads to use a realtime scheduling policy

Android:

- Added SDL\_AndroidRequestPermission() to request a specific system permission
- Added the hint SDL\_HINT\_ANDROID\_BLOCK\_ON\_PAUSE\_PAUSEAUDIO to control whether audio will pause when the application goes intot he background

OS/2:

- Added support for OS/2, see docs/README-os2.md for details

Emscripten (running in a web browser):

- Added the hint SDL\_HINT\_EMSCRIPTEN\_ASYNCIFY to control whether SDL should call emscripten\_sleep internally

---

<div class="post-metadata">

**Author:** ![Lokathor](https://discourse.libsdl.org/user_avatar/discourse.libsdl.org/lokathor/32/3692_2.png) [@Lokathor](https://discourse.libsdl.org/u/Lokathor)\
**Post date:** [December 22, 2020, 3:30am UTC](https://discourse.libsdl.org/t/sdl-2-0-14-released/28470/2 "2020-12-22T03:30:54Z")

</div>

SDL\_CONTROLLER\_BUTTON\_PADDLE2 and SDL\_CONTROLLER\_BUTTON\_PADDLE3 seem to have their docs flipped in SDL\_gamecontroller.h
