8ec576ddab tray, windows: fix logic error from commit 1167cf54e1572 748f0b3201 Improved Steam Controller detection on iOS ba1a980535 wayland: Only apply the toplevel bounds when initially mapping the window 28389f1c38 wayland: Apply toplevel bounds to windows ef52a4d4df Fixed warning C4389: '==': signed/unsigned mismatch 8d8649b33f Fixed error: returning 'SDL_TrayEntry **' from a function with incompatible return type 'const SDL_TrayEntry **' f8b13dadd7 Enabled warning level 4 on Visual Studio 1167cf54e1 Fixed warning C4706: assignment within conditional expression 8a9b7ae8d1 Switched nEntries to int, to avoid signed/unsigned comparison warnings fb4ec07119 Fixed warning C4701: potentially uninitialized local variable 'previous_context' used b674b715f5 fix integer overflow ub in testautomation_sdltest 1e1442ed4a README-migration.md: Note the GL/EGL library environment variable removals. d8c7006a42 README-migration.md: Removed obsolete documentation. 6473de59b7 SDL_keyboard.h: Note that SDL_GetKeyName() returns uppercase letters. c7584df999 Sync SDL3 wiki -> header 1f54b228ff video: Convert some EGL environment variables to SDL hints. 7c9f6c6313 Remove debug logging 19ddb29d2d Sync SDL3 wiki -> header d16f76e3d4 wasapi: Don't crash/hang if transitioning to/from a Remote Desktop Connection. 742f2a2fad SDL_render.h: Improve SDL_ConvertEventToRenderCoordinates documentation. 2b375d9704 wayland: Don't enable the text-input protocol when using Fcitx dcc645e413 Fix HTML examples template tabs ece6a6ed8f Sync SDL3 wiki -> header 7f9ee31024 include: Fill in more category documentation. 16ad3e5af6 cmake: consider X11 as not available when xext.h is not found 0ae57f1d90 tray: unix: Shutdown the GTK thread when not in use 6a0405b933 testautomation: Added a test to stdlib_swprintf that previously would fail. 9f2186ad52 Removed outdated comment in AndroidManifest.xml 181995b44f stdlib: Reworked SDL_vswprintf to be more efficient and return correct values. 8509041a09 video: Fix SDL_GL_GetAttribute depth/stencil size when 0 344e394bf4 camera: Favor v4l2 over pipewire, for now. d8c679416b Sync SDL3 wiki -> header b6dc44b133 Support dark theme for tray menus on Windows 7673b84f52 Make SDL_GetTrayEntires() NULL-terminated a58bc3eaf4 [GPU] Fix crash in nvidia user-mode win32 driver when game window is minimized during swapchain resize (#11848) 0a5d2f3da2 Handle pen eraser button as a second button 3519ef3b3b SDL_asyncio.h: Fixed various datatype's `\since` documentation. 56d7cc7a02 SDL_video.h: Added a note about platform quirks to SDL_DestroyWindow docs. 04f3bdb118 Sync SDL3 wiki -> header 18c6958cae SDL_vulkan.h: Improve SDL_Vulkan_LoadLibrary/SDL_Vulkan_UnloadLibrary docs. 522682cd6e Add detailed documentation on building with MinGW64 (#11780) a4cd17cce5 Fixed building on macOS with the dialog subsystem disabled efba42a67b tests: avoid undefined signed overflow 156b3b4a8c Fixed language detection on iOS 53aaf8c26b cmake: custom generate-XXX targets must depend on outputs 9b40d43b1f Sync SDL3 wiki -> header 85851459d6 docs: Note that using the Wayland display scaling mode can have imprecision when positioning due to unit conversion and rounding db97da4ccb ci: bump FreeBSD to 14.2 5579010b6a wayland: Adjust the scaled popup position even if the dimensions didn't change 2d37903323 pen: implement pen support for Windows. ef21ccf080 Create a separate metal shader for NV12 textures 49663bfb58 Make Windows dialogs DPI aware a8c41135aa Enable themed Windows dialogs when building with Visual Studio 8b83a57847 Check that dll's built by MinGW do not link to unwanted runtime libraries e484182765 testcamera: Log the camera backend in use. 011454b237 Sync SDL3 wiki -> header efc390d7e2 Don't log SDL errors by default c077b7a918 Fixed the version availability of SDL_HINT_JOYSTICK_ENHANCED_REPORTS 0b520cd4b4 Sync SDL3 wiki -> header 9f7b2c3595 Fixed incorrect error message when a joystick can't be opened 2c0a8363a5 Added SDL_HINT_JOYSTICK_ENHANCED_REPORTS 95d44f11c7 Sync SDL3 wiki -> header 16dfaca728 Sync SDL3 wiki -> header 32ab09ba21 Sync SDL3 wiki -> header 1461f893c3 video: Correct the window position property documentation a63052db96 Sync SDL3 wiki -> header dd6b484359 Document platform gamepad hotplug requirements ecf8dd054d Show the display content scale in SDLTest_CommonDrawWindowInfo() 4797970bfa Enable SDL_HINT_JOYSTICK_THREAD by default 6b4b9b5f2b Improved XInput controller detection 8ea4b326b3 video: Fix focus when non-focused popup windows are hidden 67ea67f191 Fix mip generation for 2x1 textures on D3D12 c6b5c21aaf clipboard: Ensure SDL_ClearClipboardData clears data even when no data has been set f8f8d87bfa ci: always create binary packages if build succeeded b713e7581b stdlib: fix SDL_strtol of "0" with base 0 54752f8d1c SDL_malloc.c: replace FORCEINLINE usage with SDL_FORCE_INLINE 3842384a38 dynapi: trigger a breakpoint on a fatal error when SDL is built in debug mode 6cf6b160cd SDL_hashtable: don't use assert from libc 62bc2c4c92 SDL_malloc: don't define FORCEINLINE 4fccfb142e cmake: avoid security cookies in SDL_uclibc when building with -DSDL_LIBC=ON 4fbf59ac3a Implement __chkstk for arm64 578ac0ef52 SDL_malloc: disable malloc stats 31a4c92ee5 When building with libc enabled, we don't need to provide __chkstk ourselves 02e85a153f Use the expected plane size when capturing Android camera frames 9955e1dc0d Updated the Android gradle plugin to version 8.7.3 0281071243 Lock joysticks when they are connected/disconnected on emscripten c68ed04a06 Sync SDL3 wiki -> header 2b1d809b21 video: Fix positioning and focusing popups parented to child toplevel windows 6d554a9ea3 Sync SDL3 wiki -> header 9fbc767d4f Fixed formatting of SDL_storage documentation e43aa12b49 Updated copyright for 2025 c0e5901c42 Reverted accidentally committed work in progress f2074d7af3 Updated copyright for 2025 3197e27b59 testcamera: fixed return codes f18e023317 Added testclipboard 54d4e48539 Get the initial clipboard state at startup 6575b8157b Synchronize clipboard mime types with external clipboard updates 30a22d3fed Allow a NULL size parameter to retrieve null terminated text d666c2d189 Use a consistent error message when video isn't initialized 196e2c6662 Fixed crash if num_mime_types is NULL b902b0527b Renamed n_mime_types to num_mime_types a767952617 Fixed spacing 54c555e394 Send supported mime types for external clipboard contents on Windows 8b155708ff Fixed clipboard memory leak on shutdown 1d417ab27f win32: Set the WS_THICKFRAME style on popup windows 643281d022 Revert "win32: Use the size in the WINDOWPOS data while handling popup windows in the WM_WINDOWPOSCHANGED message" 2be89f0dd1 Clarify migration for GetWindowData and SetWindowData a37f993a07 Sync SDL3 wiki -> header 65e0fed5b3 gpu: Document why VertexID/InstanceID builtins are unreliable dd83908109 keyboard: Check for both caps lock and shift when looking up a keycode by name 99ad53ec3f Sync SDL3 wiki -> header df97ccf283 win32: Return 0 from WM_WINDOWPOSCHANGING if a resize is expected 4f0a056b95 win32: Use the size in the WINDOWPOS data while handling popup windows in the WM_WINDOWPOSCHANGED message 18fc13c20d Sync SDL3 wiki -> header 6d20b65a9e Sync SDL3 wiki -> header 3cd3c9317e storage: Add error messages when ReadIO/WriteIO lengths mismatch 6ca2a48595 Sync SDL3 wiki -> header fa9c3331d5 main: Adjust how SDL_HINT_MAIN_CALLBACK_RATE works. cd1bd0ac2e storage: Remove an outdated FIXME. 0be5b8070d Update SDL_asyncio.c 1c04ebe423 Renamed SDL_ASYNCIO_CANCELLED to SDL_ASYNCIO_CANCELED d4d5faedab Added SDL_EVENT_FINGER_CANCELED 8704ab8422 Wait for a display resize event before sending orientation changes 60deaf5f0f Send display mode change events when the orientation changes 5340f2e3fe Updated to the latest version of gradle, with support for Android SDK 35 e91c37f4dd Added support for inset handling on Android 15 f3cbd04a81 Fix C99 trailing enum comma warning. 5f25691c85 Fix C23 empty initializer warning. 8cc4735d74 wayland: Don't override the min/max values when scaling to the screen 2d91f096ca Remove libc function from Windows tray 78c1dc3e2c Sync SDL3 wiki -> header 0410328b15 Fixed warning: ordered comparison of pointer with integer zero d5f08b8f4b stdinc: use __has_include to detect <stdbool.h> 543f244965 tests: include SDL_build_config.h when HAVE_BUILD_CONFIG is defined c2121dd9a2 testcamera: fix MSVC build failure due to C4244 warning. 5c84d38822 testcamera: don't pick a frame size larger than the maximum texture size 6e1177ac03 Include tray function prototypes c030e6f782 examples/pen/01-drawing-lines: Match render target size to renderer output. 0ad3a18937 uikit: reworked Apple Pencil code. f6143da617 uikit: Patched to compile, added to Xcode project. 774e38d073 uikit: Initial Apple Pencil support. 5acd7fe208 wayland: Prevent popup configure events from overwriting the current size with old data c714b1a38b Fixed public header inclusion in the Xcode project cf439d5c63 Fix dib-to-bmp logic in SDL_windowsclipboard.c ec29d3fd66 Define NDEBUG in release Xcode builds 92b7054870 Add SDL_tray.h to the public framework headers 1a466b5548 Sync SDL3 wiki -> header ec8a780ad4 tray, unix: fix -Wformat warnings cc723c9e4b ci: run emscripten on Ubuntu 22.04 0cb4a94c88 cmake: really disable xrandr by default on Solaris 4ffcb8ebab Sync SDL3 wiki -> header 49153ebfc4 audio: Add NULL check to SDL_UnbindAudioStreams 1b99467c71 audio: Make SDL_Bind/UnbindAudioStreams take const arrays 0be6dc5734 cmake: disable xrandr by default on Solaris 4fbd6cba60 cmake: Solaris' SunPro has alternative way to link to pthread libraries e25cc7a88f cmake: cocoa video backend needs IOKit framework 38dd6bcd32 docs: gradle needs package identifier + change example Activity class path f1232de3d2 cmake: add_dependencies must have at least 2 arguments 2664d36faf cmake: avoid parallel generation of headers through intermediate target 609b147432 Sync SDL3 wiki -> header cc24518c41 render: Update GPU backend to use the new present workflow a0e537b9c0 examples: Fix dead links in app metadata df1f1c2e12 cmake: don't create relocatable packages by default with non-MSVC toolchains af3d97dcac Update build-scripts/build-release.py bc448fa445 win32: Use the nearest monitor size for calculating maximized window dimensions 599b4ef254 win32: Fix maximizing borderless windows 1c52e290a3 video: Don't overwrite pending size values when setting the window min/max 9a4d29699d Don't use connection state from the Nintendo Switch Pro report 75a24116b5 testcontroller: show gamepad connection state 22f6eed1d9 Use the NVIDIA Shield home button as the guide button c148837546 Added a Bluetooth mapping for the NVIDIA Shield Controller on Linux 82a1e9f6df Fixed the guide button for the NVIDIA Shield Controller on Linux ba5cf2b152 x11: Don't overwrite popup window coordinates when changing the size 567b828e18 wayland: Use the proper popup coordinates if the position is set while the window is hidden 1701208f32 Sync SDL3 wiki -> header 622c3ebb94 Updated Xcode project with new tray files 0461180e25 SDL_EVENT_QUIT when no window nor tray ff139fe71b Sync SDL3 wiki -> header e9290eeedf Use `pthread_setname_np` also on Android 578509c326 windows/SDL_tray.c, video/windows/SDL_surface_utils.h: use SDL_windows.h 05932e05da tray, windows: replace ZeroMemory() with SDL_zero() e2323c1367 Refactor Android input handling and add pen support f5fbdf7ed5 Make onNativePen available for Android a5e8fc21b2 Add SDL_androidpen 80c39f2ff4 Expose SDL_GetPenStatus for Android pen buttons e3c99e3bd3 misc: Fixed typo in iOS error message. 1413bfb185 Don't overwrite non-CRC gamepad mapping with a new mapping that specifies a CRC 948b16533c testcamera: use the first available cameras cd1bb6247b video/windows/SDL_surface_utils.c: replace ZeroMemory() with SDL_zero() a773558517 Sync SDL3 wiki -> header 50fbae9302 tray, windows: define NOTIFYICON_VERSION_4 and NIF_SHOWTIP, if missing. c744c8fc0b Document how to check for gamepad capabilities a8d585aac3 Don't try to enumerate possible texture failure reasons. ca17d19f90 Updated iOS file path documentation 7bbe6025be misc: Make SDL_OpenURL work with VisionOS, tvOS, etc. ffed1c50c0 misc: Fix SDL_OpenURL on newer iOS releases. 1a6e139dde win32: Only recalculate the position on show for popup windows cf220ea4f1 win32: Fix popup positioning 17ef0c1237 SDL_video.c: replace strlcpy with memcpy in SDL_ShowMessageBox() 8fde28813e SDL_tray.h: Filled in doxygen for a few minor missing things. 17df3fe836 Sync SDL3 wiki -> header eb1be89e70 Cleaned up thread state handling and added thread object validation 7647f16ae1 Sync SDL3 wiki -> header eadc64973a Reset text field content on text input stop b2c2a483e8 GPU: Rename HDR10_ST2048 to HDR10_ST2084 fe39509b85 GPU: Doc touch ups b8036bdd41 Sync SDL3 wiki -> header ca4f5dd40d Added SDL_GetThreadState b7dac5072b correct termination of windows openfiledialog filters 0becdad392 Add missing includes to SDL_tray.h 5bf742daa6 Fix documentation for SDL_sinf bed16f77d1 cmake: define HAVE_MALLOC_H when malloc.h is found b2178857dc Corrected CoreAudio surround sound channel layouts f40a530fd9 subclass the builtin system message class instead cf946e32ba Fix memory management for Windows dialog title 4c70aa33ae Sync SDL3 wiki -> header 76920a230f Fixed Xcode build 01b9b0edb7 Add system tray support (#10873) 17a029502a Sync SDL3 wiki -> header a27c139b12 GPU: Explicitly check Metal hardware support on device creation aa817a67d1 GPU: Document system requirements for each driver 8653a5821b Fixed mingw64 Windows build 60dce94583 Fixed building with older Windows SDKs 440d5754f8 build_configs: remove unused symbols_to_check, added Windows ones 052cb5773e build_configs: remove `HAVE_LIBUNWIND_H` 42c67756cc build_configs: fix spacing 286cc2ebd0 build_config: change unnecessary replacement variables to 1 c2508d5d99 Fix various `#if defined`s f2b7495adc SDL_camera_pipewire: use `SDL_CAMERA_DRIVER_PIPEWIRE_DYNAMIC` ade829d7ca build_config: fix `SDL_DEFAULT_ASSERT_LEVEL` e73d98ad72 build_config: add missing macros 7f1c9c9053 build_config: move unconditionally defined macros 6f462e244f build_config: remove unused `SIZEOF_VOIDP` ddd7d0f927 build_configs: remove unused macros 483e79bf82 Fixed mouse click count for relative mode and multiple mice ed75d9d22a Document that the mouse ID is only valid in mouse relative mode 024e5da6fb Mouse events only get a mouse ID in relative mode 8a0f649363 windows: fix BITMAPINFOHEADER values when getting bitmap from Clipboard af2dbbcb53 Merge SDL_wasapi_win32 into SDL_wasapi 4d301b88d6 Sync SDL3 wiki -> header 5a2eb60389 Only save the pending flags we will restore when hiding a window 969f03d9f0 Added SDL_PROP_RENDERER_GPU_DEVICE_POINTER 7a22076a7c Sync SDL3 wiki -> header 3a1810f9a9 Fixed the Linux mapping for the NVIDIA Controller v1.03 49610fd1e8 Leave mouse relative mode when losing focus 62124e2c28 GPU: Enable Metal validation in debug mode (#11691) 18115ef6bd Sync SDL3 wiki -> header 8691408baf Clarify that you shouldn't make any assumptions about the an SDL_FingerID value. 37b87f79fb Fixed Bluetooth Steam Controller detection on iOS and Android 9a43c08146 Allow rendering during the modal resize loop on macOS 225c0e2ad9 Removed unused function declaration 4add7e2005 Round the window size values when using fixed aspect ratio 3ac28bae6a Removed references to non-existent method SDL_GetAsyncIOTaskResult da37e1541b Sync SDL3 wiki -> header ecea3471f6 Sync SDL3 wiki -> header f8d8bf8066 SDL_GetNumAllocations returns -1 when allocation counting is disabled a33144fbc9 SDL_test: disable memory tracking if SDL does not count allocations 2e4dc9c109 Disable tracking memory allocation counts by default 80c1b1e1a0 Fix testautomation pixels_saveLoadBMP big endian issue 478ac0b9bf Sync SDL3 wiki -> header 03d6e4b69e Sync SDL3 wiki -> header ca4ffc8a00 Fix missing parens in preprocessor defined op 8475c496b4 Fix typo 56cf8d8dc9 Sync SDL3 wiki -> header f0fad41f2c include: Filled in all remaining missing documentation! 4d8f5758cf Sync SDL3 wiki -> header c080bb8417 GPU: Fix non-triangle D3D12 primitive topology types 33442701ca Use the monitor as the client rect for maximized borderless windows 7e298f50fe Make windows resizable if we're about to maximize them programmatically 34974d4d2b Don't remove the resizable style for borderless windows cadeec9cc9 SDL_SoftStretch() doesn't handle large pixel formats f37eef948c Removed raw mouse events d07bb0e679 Removed raw key events c44fa5bb07 Updated raw input events to match SDL style 1025087c2e Sync SDL3 wiki -> header a47b62d1fe Removed PS2 compiler definition f3c194f39a Remove EXTRA_CFLAGS. 7e8576fd19 gpu: Xbox fixes for swapchain presentation f7580374a1 include: Always declare SDL_GDKSuspendComplete. 232c2970d3 Sync SDL3 wiki -> header 5ec5f23fff tests: Print accurate enabled/disabled relative mode status in testrelative b815123cf2 Sync SDL3 wiki -> header 819e1cc95b SDL_stdinc.h: A couple wikiheaders fixes. b2eb23a617 SDL_filesystem.h: Fill in missing documentation. 0b401137d2 SDL_stdinc.h: Document more stuff. b83dd793fd SDL_stdinc.h: Tons of documentation updates. a0864799f2 GDK: Fix compile_shaders_xbox.bat build events 5d9ccb6296 gpu: Add explicit casts to D3D12 staging descriptor changes e992522cb2 Xbox buildfixes for WarpCursor jitter fix, dark mode b2c15a8c2a Sync SDL3 wiki -> header 0f9e86fe1c tests: Fix GPU tests crashing when window is minimized c9e22d4672 Sync SDL3 wiki -> header ff366fba87 include: Move SDL_HAS_BUILTIN to SDL_begin_code.h, document it. e46d8756e5 tests: Update GPU tests to use new swapchain best practice 401c8f8e4e SDL_timer.h: Fixed doxygen typo. 2f9a45af60 Sync SDL3 wiki -> header 0c42891826 include: Filled in more documentation gaps. 3ce68f80bc wayland: Clean up the relative pointer if the seat capability is removed 7c8171da92 wayland: Handle the relative pointer manager appearing after the seat has been initialized 4bfc8f84f7 tests: Add a raw event mode to testrelative 8c849ecc6c wayland: Add support for the MOUSE_RAW_* events fce922b66c wayland: Add support for the SDL_MOUSE_RELATIVE_SYSTEM_SCALE hint d6a95ae198 Sync SDL3 wiki -> header 42de2ac6a9 Fixed typo e08f34c3be Removed SDL_HINT_MOUSE_RELATIVE_MODE_WARP 6e0df0af24 Reduce the possibility of SDL_LockMutex getting called on a destroyed mutex after SDL_StopEventLoop 519923ea80 Sync SDL3 wiki -> header 624a4d5f26 include: Documented important SDL_begin_code symbols. 5c0f8dc179 add alternate raw mouse motion events with windows implementation (#10042) 345cab1e36 streamline cursor clipping logic on windows (#11237) 35a9d156a6 render: convert tmotion vectors to render basis 3739749404 Improve Win32 darkmode and fix title bar's context menu (#11543) 10f868abf4 Sync SDL3 wiki -> header f81472d767 Document that you should read from processes before waiting for them to exit. 3001c61de0 x11: Use the master pointer device for absolute motion 835b6e0c1a Enable high refresh rates on iOS da80b9bce5 Fixed an inaccuracy in the documentation for SDL_ConvertPixelsAndColorspace 2ce21d1fed Fixed an inaccuracy in the documentation for SDL_CancelGPUCommandBuffer 0ca8027205 Fixed an inaccuracy in the documentation for SDL_PenProximityEvent and SDL_PenMotionEvent 4d9e7a2a68 Sync SDL3 wiki -> header b5eea03d1e GPU: Clarify presentation concerns in SDL_gpu.h 7dd523fbb1 Sync SDL3 wiki -> header 48a0adb2ac Sync SDL3 wiki -> header 4d4a2786bb render: Updates to format-string versions of SDL_RenderDebugText. 6abebca943 Fix format string in debug-text example 1d0e28a5b3 Add SDL_RenderDebugTextF & SDL_RenderDebugTextV 5608bf5866 Sync SDL3 wiki -> header 0fbcd0d586 GPU: Optimize usage of D3D12 staging descriptors (#11657) e957840d34 include: Filling in some more documentation gaps. 684098fac3 Fix possible bug with Windows dialogs bc9c86bcc2 Dialog: Add suffix to filters all the time b58e6d7274 .wikiheaders-options: Include CPU intrinsics macros in quick reference. c9ab8ad8d9 SDL_intrin.h: Added missing NEON and Altivec documentation. d38c09e5c4 Sync SDL3 wiki -> header 6730cf7bed SDL_intrin.h: Add documentation. 2f68efda83 wikiheaders: Add underscore to the "big ascii" character table. 19bdc01b8c Sync SDL3 wiki -> header eda0261c4e video: Drop size and position requests for windows in a fixed size/position state 6fa6297441 fix typo from commit b84f150d0669592f b84f150d06 fix macOS builds with hidapi disabled c52a96ca8e Sync SDL3 wiki -> header 080b3002c6 Fixed building with an older Windows SDK d0d1414836 messagebox: Copy title and message up front, to protect SDL_GetError() strings. a92eade183 Sync SDL3 wiki -> header 0bb42cb023 alsa: a few more minor formatting tweaks. 483ceb5355 alsa: Reenable SDL's internal channel map support when ALSA can't swizzle. 35360ec4d7 alsa: Use more hints for opening default devices. 576f13ac7c alsa: Put debug logging back into correct category and logging level. ff96c59df4 alsa: Add back in code to guess the correct ALSA device prefix. b108b54c6a alsa: Bring up to current SDL coding conventions and standards, other tweaks. 639855b7e5 alsa: Remove direct calls to memset a4a1dff219 alsa: remove `loop` macro b9c062c858 alsa: Pulled in latest changes from @sylware 76e7bc4c04 Added support for ALSA dmix audio output (thanks @sylware!) 3fa0537565 Sync SDL3 wiki -> header 79316ca36e Heavy work on improving category documentation. 9aca97f4e7 Sync SDL3 wiki -> header c0803f7683 SDL_dialog.h: Improvements and fixes to the documentation. a55686ce61 hints: Clarify when joystick hints should be set. eb3fc0684c wayland: Don't close an externally owned display on init failure 6cc9ce183d SDL_internal: remove `#undef SDL_LEAN_AND_MEAN` 8b6d3c88cf Fix `#ifdef`s to have config flags either defined as 1 or undefined 313d522f39 wayland: Only require fifo-v1 for Wayland by default ac2edad809 audio: Simplify and unify audio stream format updating when devices change. 9a9616894d wikiheaders: Fix uninitialized variable issue. 9628549c7c Xbox buildfixes 80b9986418 audio: Fixed potential NULL dereference. 1944bc7407 Fixed warning C4702: unreachable code 63a498c966 Fixed warning C4189: 'cqe': local variable is initialized but not referenced ce9dddfde2 Don't free properties while modifying the property hashtable 43a61fec91 Removed external hashtable locking functions 61511c48a4 SDL_HashTable is now optionally thread-safe e0cee83a3a emscriptenaudio: Removed comment about Firefox not supporting userActivation. 2635239bbc README-migration: some improvements to the audio section. ce7cb10541 dialog/unix: create zenity argv on the main thread cf59fc797f dialog/unix: deep copy args to avoid data race af6c641b8c dialog/unix: stricter typing 4c86511035 dialog/unix: reduce string allocations ff82238172 dialog/unix: remove /usr/bin/env indirection c5acbef3bf GPU: Fix D3D12_INTERNAL_StrToWStr returning incorrect length 6fe09e3aa4 dynapi: Minor optimization to SDL_SetError wrapper. a1e8d5c327 Sync SDL3 wiki -> header 3ee39f6c3f GPU: Revise swapchain acquisition (#11633) bbd4eeb287 examples/audio/04-multiple-streams: Note about web browser audio in README. f45ce45603 ngage: Remove Nokia N-Gage support. 3f425b6f20 examples/audio/04-multiple-streams: Patched to compile on Visual Studio. 1fbb8e1824 examples/audio/04-multiple-streams: Remove drag-and-drop support. e6e468d0c4 Sync SDL3 wiki -> header 962268ca21 Fixed Chinese locales on PSP (thanks @ccawley2011!) ac92af02ea wikiheaders: put a header on the quick reference pages. be5fba963a wikiheaders: optionally generate a Quick Reference page. 7c5c88a3ad cocoa: Fix conditional coding style d4225070ad cocoa: Toggle the fullscreen menu item to 'leave' when entering a fullscreen space 48b6b93fb6 cmake: make RelWithDebInfo the default configuration 5447cb6d38 video: Prefer the window manager supplied coordinates for selecting a fullscreen display e4215a04d9 gpu: make macro's function-like using do-while-0 fb71b44231 gpu: define EXPAND_ARRAY_IF_NEEDED macro once and make it function-like 0370b92d80 gpu: SDL_ClaimWindowForGPUDevice must set an error message on failure 5c020b9930 GPU: Enable VK_ERROR_NATIVE_WINDOW_IN_USE_KHR to print 279836d259 GPU: Swapchain image count respects number of allowed frames in flight 1d5d948ccf Fix building SDL3 without dialog support 19cc04a162 Add build-release.py updates from satellite libraries b5c05b6e29 wayland: pass actual empty strings to zenity 1e7c7c69c5 wayland: handle 0 extra buttons in message box 09428688b9 Added a reminder to sign the source archives when creating a release 972c6d0b82 Add `SetTextInputProperties` to video device API and fix iOS handling 5d09656afa Refactor iOS text input activation to better work with hardware keyboards 72895a6994 Remove unused `hardwareKeyboard` variable f64e9a52dc Sync SDL3 wiki -> header ddb1e66d90 Updated the release checklist documentation caf0348b26 Enable ApplePressAndHoldEnabled 900627f7fc Enable the SDL_HINT_MOUSE_DOUBLE_CLICK_TIME and SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS hints on macOS 6d1dac1404 Removed unused math code from the Visual Studio projects d25cdc0fef Sync SDL3 wiki -> header df48af22d4 Removed unused math code from the Xcode project 08de6656fc Document the pixel layout of YUV format surfaces 2ac62d8c67 Sync SDL3 wiki -> header 846eb9a886 Added SDL_RenderTextureAffine() to the exported API 7278399366 Sync SDL3 wiki -> header d0f1910918 add SDL_RenderTextureAffine 2c4fc2e549 Sync SDL3 wiki -> header 8d8578785c SDL_asyncio.h is a public header and should be included in the framework fa5f84fb6e GPU: Add SetGPUAllowedFramesInFlight (#11599) 47429227ab examples: Handle newlines in README.txt better. 0f228de48a examples: Add some metadata to the generated webpages. ffb9b30e84 The metal renderer doesn't actually support RGB texture formats 1a5b0796b4 examples: fix canvas size for small screens d1b8fcd692 work around type redefinition errors in SDL_immdevice.h 9b82d46259 GPU: Use correct logging category 5229b520af GPU: Log D3D12 driver version b79e3ac830 examples: Let the browser handle README.txt word wrapping. 90efb63e52 examples: Improve webpage generation in various ways, add thumbnails, etc. e50dc7265b examples: Fix some window titles in the demos. 7ddda4fe18 Add system theme support for Emscripten 3060105cfa Don't filter out controllers when launched by Steam under Proton 2e5208f353 kmsdrm: Fix Vulkan type redefinition errors from commit 24ed947cc35ebb9f50ac0685f1b88ec164d46c6c c49f4ceeb2 Sync SDL3 wiki -> header 23828b62d4 Added SDL_IsMainThread() and SDL_RunOnMainThread() bc4185c685 Document that video and input functions should be called on the main thread. fffa6c7a2b Add missing include of fcntl.h 235e5c6a6c Fixed crash if a device doesn't have a USB product or manufacturer string 9f8157f42c Sync SDL3 wiki -> header a0b8b57afe examples: add empty placeholder image 951ca96dc9 asyncio: Added more category documentation. 58f8e259d1 examples: fixup URLs for project subfolder 56da4e81d8 examples: added homepage + categories pages + added CSS (similar to wiki) 9784e10a75 audio: Let emscripten update device->sample_frames at device open time. 5bfece34f9 ran gendynapi.pl after PR/11170. 045e31178f Added SDL_dialog.c to the Xcode project a74693c9a5 Sync SDL3 wiki -> header a4852f3a10 SDL_ShowFileDialogWithProperties with more options dc5a2ddfd0 GPU: Forward D3D12 validation warnings to the SDL log efb59bd0bf GPU: Fix validation warning in D3D12 blit code 45869d6177 GPU: Vulkan requires drawIndirectFirstInstance feature (#11583) d8eb68a6c5 GPU: Clean up D3D12 blit shader compilation 24ed947cc3 kmsdrm: Fix an LTO type mismatch warning 31128b6cdd kmsdrm: Clean up GLES function definitions 123306b18c X11: support _NET_WM_SYNC_REQUEST d320d7143d Fix rawmouse wrong timestamp (#11553) 830b132cd4 SDL_asyncio_liburing.c: replace __kernel_time64_t use with SDL's Sint64 4ac78706bf SDL_asyncio_liburing.c: replace size_t casts on pointers with intptr_t 2ad5836d02 Sync SDL3 wiki -> header 31d09909b6 Sync SDL3 wiki -> header 1377cdb3f2 Fix the Indonesian language code on Android 46f43c2e6e asyncio: Remove `SDL_AsyncIOTask` from the public API. 4745aa3324 asyncio: Windows IoRing support, other tweaks and fixes. 3ca629ceb5 asyncio: Allow file closes to request a flush/fsyncdata. 022a6a9f97 asyncio: Added Linux io_uring support. e79ce2a200 asyncio: Added async i/o APIs. 7293c18314 Fixed an inaccuracy in the return parameter information in the SDL_ConvertPixels function 401187eb6c Removed extra sa in SDL_ConvertSurfaceAndColorspace b7a31ead08 added "gpu" to the list of possible values of SDL_HINT_RENDER_DRIVER in SDL_hints.h 9fb8661684 Fixed an inaccuracy in the return parameter information in the SDL_SurfaceHasAlternateImages function 6aab5a089d Fixed potential buffer overflow 65c9a58f5e audio: Make sure a few bitflag checks convert to bools correctly. ec2ef5f9b5 dynapi: order headers for reproducible behavior 2762644e96 video: Don't error when setting an unbounded max window size while a minimum is set 068d9cc7d6 Sync SDL3 wiki -> header 2f59a1ce44 SDL_audio.h: Fixed a documentation typo (thanks, @JBetz!). acf0f09320 SDL_migration.cocci: Fixed up some SDL3 symbols that had changed. 3a1d76d298 Sync SDL3 wiki -> header ce573b01f8 audio: Added SDL_IsAudioDevicePhysical and SDL_IsAudioDevicePlayback. d53241a299 docs/README-main-functions.md: reformatted Best Practices section. 5cd188bdbc Sync SDL3 wiki -> header 7099de4ae8 Update README-main-functions.md bf9fa38920 SDL_audio.h: Fixed two typos. f5ad66ef4b audio: Allow channel maps to specify -1 to mute a channel. 3303e9843f Sync SDL3 wiki -> header f852038384 filesystem: Added SDL_GetCurrentDirectory(). 16113374ff cmake: Enable POSIX fsops code for PS2 and PSP. c0f1fe8e7f Sync SDL3 wiki -> header f022501d52 fnsince.pl: Deal with post-3.1.3 releases before 3.2.0. b8233aff8e Vita: implement mousewheel and buttons 4/5 b8bbd29ce9 Sync SDL3 wiki -> header bbc9c75618 x11: Fix memory leaks in clipboard event handler 5c8bed3780 GPU: Fix D3D12 tearing query 03d15c031b Sync SDL3 wiki -> header d55e6dfc5e hint for which system cursor to use as default 3c13bae64f Sync SDL3 wiki -> header e0e61775b8 Add missing SDL_WindowFlags to SDL_test_common.c 6fab61b69d hidapi: check each usage on a device before ignoring it completely e9fdcf6c60 Sync SDL3 wiki -> header 1720fc77fe examples: Added input/02-joystick-events a07a88c1b4 examples: added input/01-joystick-polling c508396e33 Avoid usage of CreateEventEx in WASAPI code 7a3f5ef129 Speed up full-surface fills 10e2ce9ba4 examples: Added audio/04-multiple-streams 88926f2b73 emscripten: send drag and drop events e14d939ead Sync SDL3 wiki -> header bbe843fd80 Full configuration of SDL_INSTALL_CMAKEDIR_ROOT 79f6f766d4 Avoid usage of `CreateEventEx` in D3D12 GPU backend fdafa266d8 (doc): make cmake build parallel on linux 61ba8010d3 examples: Emscripten builds should allow memory growth. 212f0dcdb1 examples: Fix output name of demos. 41b0d36a6c fix MSVC projects after commit 51637495 f9ddb0bdea examples/demo/04-bytepusher: No need to check NULL before destroying things. 7bf3cae02e examples: fix cmake after commit 51637495 51637495e4 examples: Rename "game" to "demo". 566f3dc138 Add BytePusher example b02285d495 Sync SDL3 wiki -> header 97ddc9adf2 Fix outdated references to SDL symbols in docs. Fixes #11503 465881d560 android: patched to compile. c135386f58 events: Add render category to SDL_EventCategory. 615c935d11 events: Added SDL_RenderEvent. 848fd1eab4 ci: don't do 'brew install pkg-config' anymore II 0007451222 ci: don't do 'brew install pkg-config' anymore 3a2b595c4f PSP: Add locale support e94ba6e700 Sync SDL3 wiki -> header 631c30527b Sync SDL3 wiki -> header 2e70944c44 gpu: Added an initial FAQ to the category documentation. df73cae2b0 cocoa: Clear the pending flags on non-spaces fullscreen transitions a4006e654e Fixed typo in the name of the SDL_GetAppMetadataProperty function in the description of the SDL_SetAppMetadataProperty function 5ee4d176f1 Added support for the Razer Wolverine V3 Pro a0591ec4a3 README-documentation-rules.md: Mention not listing types in param/returns docs. fef001cb48 Sync SDL3 wiki -> header e770b4e266 dialog: Clean up filter param documentation. 795ceae520 Sync SDL3 wiki -> header ecae3789ab SDL_dialog.h: Remove verbose docs on callback param from several functions. 587384756f render: use nearest pixel scaling for debug text 2b744c7df3 cocoa: Refuse to SDL_Init(SDL_INIT_VIDEO) from background thread. 932bb968d7 Fixed infinite recursion when the microphone is unavailable 1413848f41 Fixed crash if a window ends up without a display 35e6c92c3c Added the ROG Ally X to the list of Xbox controllers 4fb955c80b cmake: fix sdlcpu.cmake for C89 compilers aa352837d5 cocoa: Don't sync on a pending fullscreen event if the window is miniaturized 18b7a2315c cocoa: Restore fullscreen state on the window regaining key status 014196d98d cocoa: Fix minimizing fullscreen windows on Sequoia 7a074f582e Steam Controller handling improvements d2dc0fa920 Sync SDL3 wiki -> header 0c53d9a1ee Implemented SendEffect for Steam Controllers d8f8cf3e99 Added SDL_HINT_JOYSTICK_HIDAPI_STEAM_HOME_LED 184da780f5 Fixed a crash when unplugging a Steam Controller dongle 70fe38bcb2 wayland: Rename some display related variables to better reflect their purpose e027b85cc4 Validate that pixel formats have the correct attributes bd57cfdb55 ci: pin MSVC ARM Windows SDK version to 10.0.22621.0 0f9e551d71 joystick/gdk/SDL_gameinputjoystick.c: fix build errors due to -Wformat af6ce629c4 Make sure pairing remains enabled for the entire time dongle pairing is active 2b10a040ff Fixed rare case of wireless Steam Controller not being detected at startup 572cc7af63 Sync SDL3 wiki -> header 7d7ee43ddb stdinc: document SDL_strnlen and SDL_strlen e9f7a1b359 fix relative system scale function on Windows 25390d6c21 fix relative warp emulation broken by #11460 e0166256ff joystick: Fix connection type for Steam Controller and Xbox 360 dongles 8657fa8b3b Improved reliability of the Steam Controller driver f8468d580d add brace for contitional eaef956a9a fix errenous delta when warping b54f6044a5 Removed Linux Steam Controller support b43b333d25 Moved the GPU renderer to the bottom of the list 7f14eb33c6 snake: improve comment b71151a697 Added support for pairing controllers to the Steam Controller dongle e4778d53d3 testautomation_video: Another Emscripten test to be skipped. d48d4c8c48 testautomation_video: Don't test window position on Emscripten. f0b61c69e7 Fixed duplicate controllers showing up on the Steam Controller wireless dongle fe3566ca46 Ignore Steam Controllers in the Linux driver if HIDAPI is handling them 7959b08a4d Fixed spacing 6ca8269b96 docs/README-raspberrypi.md: Corrected NEON information (thanks, @cmitu!). 0f9505256d Steam Controller support defaults off on mobile platforms 140aba9e5d Enable Steam Controller support by default 68c2cf84f6 hidapi: Add support for the Steam Controller wireless dongle 1a311bc638 hidapi: Add support for Steam controllers connected via USB e67ae274a5 hidapi: Fix bus type in HIDAPI_IGNORE_DEVICE() on Linux 7c5a2cd462 Sync SDL3 wiki -> header 95c8a1cf7c iostream: Update docs about return values and SDL_GetIOStatus(). 7007b4762b events: Fix a compiler warning. 6049ca4fb1 docs/README-raspberrypi.md: Initial updates. c021c75737 Sync SDL3 wiki -> header d20936b544 camera: Add some category docs about camera device warmup delays. 3877bf55a3 Sync SDL3 wiki -> header c26dda10e0 Sync SDL3 wiki -> header 9a4ae4b9ed Fixed crash if SDL_GetVideoDisplayForWindow() returns NULL 20cd4290d7 Sync SDL3 wiki -> header dcf6dd19c3 Sync SDL3 wiki -> header 6c99a4b783 Sync SDL3 wiki -> header a85f0b49f4 GPU: Remove D3D11 shaders from testgpu_spinning_cube 5a74aadac9 GPU: Null check shader inputs in CreateGPUGraphicsPipeline 32cc92dceb pipewire: i/o callbacks should avoid higher-level iteration during device open. 119b4fa5f5 GPU: Remove D3D11 backend and allow D3D12 to ingest DXBC (#11456) fc12cc6dfd ci: add linux-powerpc to test matrix 559223ff9d cmake: don't use uninitialized SDL_VERSION and use REVISION.txt 332fd824f0 GPU Vulkan: release submitted command buffer after defrag (#11430) 1ed1bc1d5d testautomation keyboard: use `space` instead of `a` 8a2cac7aaa Fix SDL_PRIs64 to use standard PRId64 54ff1f35bd Fixed audio dropouts when plenty of audio is queued on Android 37b49c98dc Fixed setting up surround sound on NVIDIA Shield TV dbe82e685d Sync SDL3 wiki -> header 3e2ef64c98 Add SDL_SaveFile and SDL_SaveFile_IO functions b0140fb1b4 Sync SDL3 wiki -> header 97dac37373 Added SDL_HINT_ANDROID_LOW_LATENCY_AUDIO 6836ef8fd2 Added logging for low latency audio state 908bd84c5e Fixed reopening a controller on Android 1ea4edddec Fixed Java exception if mConnection is null 588e32ea5a test: Change LoadContext() return value type from int to bool ecfd143a26 testcontroller: update the controller name when it's opened as a gamepad 908b42f2b9 Fixed 8BitDo M30 mapping to match fighting game conventions and the layout in XInput mode 028194286c Added mappings for the various firmware versions of the 8BitDo SN30 Pro controller 0ef7a1d901 Show the guid of gamepads that are opened ed943318e2 Support multiple joystick buttons bound to the same gamepad button 27b828754a Use HIDAPI to provide better names for DirectInput controllers 5a7b75607a Added the OpenVR license to openvr_capi.h c1246e31a4 Added support for the PowerA OPS v1 and v3 Pro wireless controllers d3b882b4f9 Added support for the PowerA Fusion Pro 4 and Fusion Pro Wireless controllers fb2145f731 Sync SDL3 wiki -> header 96729e745a SDL_GetClosestFullscreenDisplayMode(): Rename parameter `mode` to `closest` 683991ab71 Get the full display bounds if the window doesn't fit in the usable bounds. 6823e3f005 Fixed gaps in scaled 9-grid texture rendering 458f616c53 wayland: Send a display removed event when a display is disconnected 73e0e8cf5b SDL_GetDisplayForPoint(), SDL_GetDisplayForRect(): Check argument for NULL. 8026866994 wayland: fixed memory leak at shutdown cacfdc8cfa Sync SDL3 wiki -> header 7031b240df Added SDL_PROP_WINDOW_WAYLAND_VIEWPORT_POINTER c56a3f60fe xcode+cmake: use SDL3.framework folder as IMPORTED_LOCATION 615d2dcd5b .wikiheader-options: Treat SDL int types (Uint64, etc) as API prefixes. e001a309be create-release.py: use head of git ref as default commit 27f69c772c Updated the release checklist 87dade4421 Set SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER for the GPU renderer 0508f100e2 Sync SDL3 wiki -> header 927d297161 Updated to version 3.1.7 for development 78cc5c1734 Updated to version 3.1.6 for the preview release 19af3a2b34 Sync SDL3 wiki -> header e31e3caece PSP: Fix building examples in parallel c5f12b135d Fixed the D-pad on wireless Xbox 360 controllers 780578cd36 PSP: Allow building tests in parallel 8b48b70c6e Fixed return value setting state on combined Joy-Con controllers 77a0411dde Minor cleanup 68cc173d92 Sync SDL3 wiki -> header 7c968f1510 Update SDL_hints.h e2857fc5a2 Update SDL_mouse.c 5699ba799e Add return to CHECK_VULKAN_ERROR_AND_RETURN macro 6c10446a6c Add version info when building CI/CD for apple platforms d6b60bcc53 typo in player spawnpos, mov drawcall out of loop 09495059df Fixed the PS5 controller face buttons on Amazon Fire TV, Android 11 c099d0525e sort_controllers.py: fixed parsing SDL_PRIVATE_GAMEPAD_DEFINITIONS 24bdbb8bf4 Supress Metal warning when compiling against macOS 10.11-10.13 2a05b63580 Mark generate.py as executable 51628034d9 Don't offset the view if there's no text input rect c8a04eec06 Autorelease keys should go down when pressed. f543faf837 Allow in-tree build 6647345be0 Sync SDL3 wiki -> header b4dff42dcd GPU: Add SDL_CancelGPUCommandBuffer (#11316) 94d110edd5 Specify C source file in example VC projects 415abf2ea2 Rename variables for readability bdf16628fb Added 03-infinite-monkeys example game 2b92dc9baa Minor updates to woodeneye-008.c from template.c a93ec0c679 Added Visual Studio project for 02-woodeneye-008 9a77ee2008 Added instructions for creating Visual Studio projects for examples 014b473bcc GPU D3D12: Fix depth texture sampling ff14a1781f GPU D3D12: Fix indirect buffers not being refcounted 149ecffd6f SDL_vulkan.h: undefine VK_DEFINE_HANDLER and VK_DEFINE_NON_DISPATCHABLE_HANDLE 35e53f76a9 metal: check success of device creation (#11367) feb10434a1 Order by subsystem b2f216f9e2 Add GPU to iOS build config 54836050c9 metal: Add availability checks 8f9a562969 wayland: Remove vestigial struct member 152bcce85f Add examples to `SDL.sln` (#11255) 1e7c186461 Splitcreen FPS example with multiple mouse and keyboard (#11317) 5c5235fb51 ci: Add Steam Linux Runtime (Sniper) task 36c209080c wayland: Refactor some shell surface related names 2b7dc55364 wayland: Check the WM capabilities before sending a minimize event 1abbd13414 wayland: Throttle interactive user resize events e0d019c941 Sync SDL3 wiki -> header cb0c7c9680 SDL_CreateDirectory(): directory tree creation for absolute paths for non-Windows platforms a10578acbd SDL_SYS_RenamePath(): Fix error message. 3922bcec95 Sync SDL3 wiki -> header 04a478b6a9 SDL_Enumerate[Storage]Directory() comments: Use enum constant names instead of integers. 5c3d42aade Update README-linux.md for openSUSE Tumbleweed dependencies 8468c372b2 SDL_EnumerateDirectory(): (posix) Fix return value when directory is invalid 97b924f985 typo: maxOS -> macOS a851c5b648 create-release.py uses python3 47411d8007 build-release.py uses python3 4f160d69a6 Closes #10318 - implement Android prerotation in the Vulkan renderer 93471cf78d video/openvr: minor clean-up: 8bf1a84200 ci: add include headers of build directory to ci artifacts 590e1196d0 snake: check allocated memory before use 20e01c6fbe android: add (disabled) android.permission.INTERNET to AndroidManifest.xml 850158f83f testcontroller: fixed incorrect usage of memcpy() 344546b4ea cocoa: Make sure GL context destruction happens on the main thread. dcd4ddb043 Sync SDL3 wiki -> header 8d3bec99a7 audio: Make SDL_GetAudioStreamProperties() thread safe. 10e52e1899 docs: Added more '\threadsafety` tags. 731853077a Send drop complete events when the drop leaves the window on Cocoa, Wayland, and X11 db4e2ccbac Allow redefinition of only one macro SDL_SINT64_C SDL_UINT64_C c0bad724a7 README-ios.md: Add info about UIApplicationSupportsIndirectInputEvents on iOS 17 4ea26a7771 emscripten: scale mousewheel X coordinates correctly, not just Y coordinates. d0cf2c19d1 Allow defining custom SDL_SINT64_C and SDL_UINT64_C macros (#11315) 7108291d0b video: Change SDL_GLattr to SDL_GLAttr. c0e9205a92 video: Change capitalization on various OpenGL attribute typedefs. 3c506630c3 video: Turn several OpenGL attribute enums into integer typedefs. a04fda211c Sync SDL3 wiki -> header 4e33440c04 Sync SDL3 wiki -> header e8b69b03fe cmake: fail configuring when no X11 or wayland could be found (#11310) 540db0d164 Bumped version of macro 'main' to 3.1.3 370521363a Sync SDL3 wiki -> header 924f719b97 wayland: Get the window content scale from the backend 299587fa64 Sync SDL3 wiki -> header 5e855d82e3 Manually bump versions of non-function identifiers introduced after 3.1.3 to 3.2.0 22bc430bbb Set error using function hresult 6eca02a0e7 evdev: correctly handle composite devices ba1412cb9f evdev: fixed devices not being removed on disconnect 370c0426ce testspriteminimal: only quit when escape is pressed acfc223e15 Sync SDL3 wiki -> header 423337796c GPU Vulkan: Use dedicated allocation for download buffers (#11298) 24b376ef18 Sync SDL3 wiki -> header 1c1706a00b fnsince: update `\since` policy for documentation. 21c91d5535 examples now using SDL_ALPHA_OPAQUE(_FLOAT) for opaque alpha value 63ef5a2369 Sync SDL3 wiki -> header fd530d029f Fixed typo in SDL_clipboard.h 7b6416add0 Sync SDL3 wiki -> header af1c165352 Set version of new identifiers after 3.1.3 release to 3.1.6 45584ad73e Simplify get_channel_name() so it's easier for people to read and understand c134dd6e5e Fixed typo in the channel layout documentation 4a8eadf167 include: Fixed typo in SDL_CopyFile's documentation. d9e6fe0b7a Sync SDL3 wiki -> header f5c27a3a2c render: Corrected docs for SDL_SetRenderVSync(). 1f8b9a320c VITA: fix SDL_ShowMessageBox by using different memory type a42c9ec5f7 Sync SDL3 wiki -> header 2318961b6f docs: Add `\threadsafety` to some low-hanging fruit across a few headers. eed11ad6d6 docs: Fixed example code for SDL_qsort_r() and SDL_bsearch_r(). 0bec18245d android: fix android.content.Context:getCacheDir JNI prototype e9b5f6749e wikiheaders: add (disabled) code to check for missing `\threadsafety` tags. 19a1175c02 include: Updated docs on SDL_TouchFingerEvent. e61f0678ee x11: Remove the "safety net" error handler. f9bffa31b6 docs: fix window flags in README-migration.md b0982e8982 docs: Updated README-emscripten.md. c56af0d975 Removed unused code 35be8bb7f9 Fixed warning C4456: declaration of 'e' hides previous local declaration 8119568805 x11: Remove text-scaling-factor setting checks 1c51b8dc33 Only set the OpenGL flag if the OpenVR driver is active 82b3325978 Fixed memory leaks if Windows initialization fails d199586683 Fixed memory leaks if OpenVR initialization fails 7b492553c4 Allow the OpenVR driver to be enabled on Windows 0aea14cf45 Added logging for additional events 3d47877bb4 Added SDL_EVENT_RENDER_DEVICE_LOST 54e52d055f Sync SDL3 wiki -> header 9c848e08e4 docs: Explain events for already plugged in controllers (#11286) 26567df878 Don't treat mouse buttons as focus clicks if the window has mouse capture ef758d05c1 render: GetRenderViewportSize shouldn't use scale, just logical presentation. 92520c1d9b Improved D3D12 handling of unrecoverable device loss 315842cf71 Fixed crashes handling D3D11/12 device lost in testsprite e2254b1045 Added color scale info for the GPU renderer TODO item 4b54e32231 Tweak android path functions comment tag \sa a6536a9298 RI_KEY_BREAK indicates key is up 679dd4b181 SDL_RequestAndroidPermission() comment: Add link to android permissions website eb1451536e Sync SDL3 wiki -> header 5819d4b360 SDL_CreateRenderer() comment: Remove mention of flags e0321ca5b6 SDL3: SDL_render_gl(render name: opengl) dose not support transparent on Linux/X11 (Bug #11273) (#11274) dcbb2f11a8 Clamp the texture alpha and color modulation values to 0-255 541ba33714 Fix SDL_GetClosestFullscreenDisplayMode documentation 40070d899d Refactor Blit_RGB555_ARGB1555 to be more generic 3d2c8c510d add GLES3 headers from Khronos for OpenVR video driver. 2668558c5c Sync SDL3 wiki -> header 153f90a725 Revert "Use the correct return type for SDL_GetAndroidJNIEnv()" ffb1d9e4b4 Removed Blit2101010toN and BlitNto2101010 5c1ccaefae Fixed VULKAN_UpdateViewport judgment. 4c2d0c422b wayland: Remove kde_output_order_v1 support 5f874b60a8 Sync SDL3 wiki -> header 1647d36aec docs: document copying shared SDL3 a bit more + document sanitizer/libc incompatibility b6a6a4a7f8 audio: fix incorrect dynCall in Emscripten audio. 07bb8f1c4c openvr: added APIENTRY for OpenGL functions (thanks @cnlohr!) b40ad5428b Fixed assertion at quit when the debug text was the last texture used. a48fa675be Fix formatting 1d23d2c3c2 Renamed SDL_SANDBOX_UNKNOWN to SDL_SANDBOX_UNKNOWN_CONTAINER a7da3ad59b x11: Support sorting displays via the priority hint 0faf9dc4a4 kmsdrm: Support sorting displays via the priority hint a6e5ab437f video/openvr: Avoid type redefinition errors. 2654d5d48b Sync SDL3 wiki -> header e81e917c5e Added an OpenVR video driver (thanks @cnlohr!) 569691797d windows/SDL_systhread.c: fix permissions 186c6e5c9d windows: fix race condition with exception-based thread naming. faa404a652 If we get a newline character, treat it as SDLK_RETURN a432abf4cc Make sure that we quit if we get a terminating event c5e1ae4580 Only free debug_char_texture_atlas if it has been allocated 00f4cb308b Fixed crash if the Vulkan renderer changes swapchain image count 41366f73b2 Don't block in Android USB device open 60c3eaf5ee Use SDL_GetAndroidJNIEnv() in hid.cpp 2d3fa03d53 Use the correct return type for SDL_GetAndroidJNIEnv() 3d852da806 Requesting Bluetooth permission on Android is now asynchronous be3d961b47 Treat clicking the right pad as a thumbstick click on a Steam Controller 6da4d94abf VITA: implement camera subsystem f79f21217b VITA: fix yuv texture update 4612db21a3 SDL_utils.c: restrict gethostname() usage to non-windows 9a5420118a Define SDL_DIALOG_DUMMY in SDL_build_config_xbox.h dd955332a2 Removed SDL_build_config_emscripten.h 5492be23a1 ci: test Apple x64 on macos-13 runner c48fbbb067 Sync SDL3 wiki -> header c41b2bb855 SDL_ShouldIgnoreGamepad() should take product IDs rather than a guid. 8a30def5f2 Only use Steam Virtual Gamepads if we're running under Steam 28504f5791 Steam virtual gamepad info isn't available in the macOS sandbox d6981da5a4 Added SDL_GetSandbox() d7b1ba1bfc Added support for the Steam Virtual Gamepad on macOS Sequoia 3ebfdb04be SDL_stdinc.h: provide a prototype for strdup for __clang_analyzer__ case d9df87f19f Fix syntax of trailing doc comments 9cf388f260 Re-added HAVE_FDATASYNC and HAVE_GETHOSTNAME for platforms that have them. 6897385623 Add `void` to `run_colorspace_test()` function prototype 69433ee075 doc: explain build-scripts/create-release.py in the release checklist 18410c03ea cmake: fix checks for fdatasync() and gethostname() a027ec59ca Make the name of the Steam Deck Controller consistent. 09e3af58b5 Fixed bug #10954: software renderer: examples/renderer/10-geometry missing a triangle typo when changing return code from int to bool 860e38a3a2 VITA: fix shader color format ed1ec236c1 Removed fdatasync and gethostname definitions from platforms that don't have them cbbad4051b Treat a button press location as an implicit mouse move e5fa929245 Report win32 last error string windows_file_open (#11224) b4554a8a75 Sync SDL3 wiki -> header 97f1da73da Rename GPU properties for consistency 9af5ffcfbe Improve support for private platforms (#11220) 66d09a1cda wayland: Adjust primary display selection priority 638b50b69b CI, LoongArch64: disable clang-tidy dede2ab86f Sync SDL3 wiki -> header 553fc5fe0e wayland: Expose displays in a deterministic order, and attempt to better handle selecting a primary display. 075ae7db7d ci: update LoongArch toolchain to 2023.08.08 4162bddca7 cmake: fix configuration with -DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON cdaaabb978 GPU: Fix Metal sampler address mode order 104dabb9de PSVITA: enable posix fsops afee27a530 Make sure stdio handles are in blocking mode bb764e3106 Added support for full range BT.709 YUV conversion ce49465b13 Sync SDL3 wiki -> header 72bae5167e Updated documentation e254c99b38 examples/game/01-snake: Update game logic in AppIterate, don't use a timer. edb28e79b5 Make SDL_LoadBMP() use true instead of 1 f212cb5f92 Don't overwrite the SDL_IOFromConstMem() error in testshape 51dc978785 Don't overwrite the SDL_IOFromFile() error in SDL_LoadFile() fb43dc3097 Set error for NULL SDL_IOStream in SDL_LoadWAV_IO() 00bb81de76 GPU: Allow size queries on depth formats 817fa9a975 releases: don't add static library to MinGW binary release 45dfdfbb7b Add parametrized build script 57f2577c65 GPU Vulkan: Fix depth-only framebuffer leak 46835650db Added config.xcconfig to the Xcode build 9fac4b9f5f SDL_windowsmodes.c: Fix MSVC builds against SDKs older than 10.0.17134.0 b865708039 Sync SDL3 wiki -> header 0b6ad8bf62 Improved the documentation for SDL_SetWindowShape() f9d490045b Fixed uikit crash when GLES is disabled 3733b1d5d8 Sync SDL3 wiki -> header c20918b0fb render: Add SDL_RenderDebugText(). 44bc19b592 test: remove testaudio-art.txt (this info is in test/LICENSE.txt now). 1cc85c912b Check return value of SDL_small_alloc() d7be7fc168 Fixed Cohen-Sutherland out code computation for float line intersection db78c0f563 Sync SDL3 wiki -> header a8ca024495 Added SDL_GetDefaultLogOutputFunction() b766c824bd Don't overwrite the SDL_IOFromFile() error in SDL_LoadBMP() aed1f76248 Sync SDL3 wiki -> header a567786762 Added SDL_SetErrorV() d5e02474ac Fixed SDL_oldnames.h to use the correct new names 1a1e2e9892 Set size parameter in SDL_GetClipboardData() 82598e5ca9 GPU Vulkan: Fix frame counter timing (#11189) b641c2a0db Refactor gendynapi.py with the final goal to make it re-usable 173c168ff4 Default functions are already declared by the first SDL_dynapi_procs.h include fd9f2ae5b5 Sync SDL3 wiki -> header 01c9c1d0eb Document main callbacks API thread safety fd9e57b71e 3DS: Support simple message boxes 2bef8852fb testdrawchessboard: Allow using the standard render API 7556c44796 SDL3: Fixed Cocoa_GL_CreateContext() not returning a context on success (#11181) 94c8c170eb 3DS: Only bundle resources with tests that need them fec006a4f9 Allow for more fine tuning of Duff's device routines aebb64efa1 Remove leftover ARM SIMD code 9a81892447 Old env vars as fallback for SDL_VIDEO_DRIVER + SDL_AUDIO_DRIVER #11115 3e57d996fe Reduce the size of the SDL_blit_0 alpha code 05c53b5ab0 Add macro guards for OpenGL <=1.3 function prototypes 365dba6de8 Sync SDL3 wiki -> header 4898cbb6cf SDL_migration.cocci: Fix renaming SDL_bool 22566506d0 SDL3: opengles2 render not support window with transparent flag on Linux/X11 (#11167) c6c195ff88 Always use WaitForSingleObjectEx() as a fallback in SDL_SYS_DelayNS() c5904d8710 Improved implementation of SDL_DelayPrecise() (thanks @nightmareci!) 25251a9405 Fixed warning C4723: potential divide by 0 33366b0a4e Fix SDL_MAIN_USE_CALLBACKS with Android, introduce SDL_MAIN_EXPORTED 86ef790a23 explicit cast to int in SDL_bits 3cd7e22e8b Fixed converting full range YUV to RGB 3086b25c4e Set hint SDL_HINT_MAC_SCROLL_MOMENTUM version to SDL 3.1.4. b676413657 Sync SDL3 wiki -> header 48ff3efdb9 Clarify README-highdpi.md (#10083) e31c68427a Sync SDL3 wiki -> header 6ea4a66451 GPU: Add SDL_CalculateGPUTextureFormatSize (#11146) 6d85127560 Rename hint string literal SDL_HINT_MAC_SCROLL_MOMENTUM 3db10a6b2c GPU: ASTC block size fixes (#11157) 90a3a2359b thread: Rewrote generic Condition Variables. 41dfe2c246 test/testautomation_stdlib.c: fix gcc warning on 32 bit 73b995fbad Don't assume OpenGL on Android 8aaaeb7560 Sync SDL3 wiki -> header 2a9cb68b91 Sync SDL3 wiki -> header 0babb284dd fnsince.pl: Make fixes now that we've reached ABI lock. 40ff6a2785 test: Fix mouse focus test on X11 e4b1a9f382 Sync SDL3 wiki -> header 7ff819141d libm/e_exp.c: fix gcc warning on 32 bit: ac6b9e2d19 Sync SDL3 wiki -> header 8262072d91 Fixed possible memset(NULL) call in testautomation's SDL_aligned_alloc() check 4b7c5f561b Fixed warning: ‘new_item.probe_len’ may be used uninitialized in this function c8f5f6d47a Added SDL_DelayPrecise() 28a70a5b71 Use the correct version for the \since field bf351b0b0e Add more configChanges to Android Manifest (#11145) 9c322386bf gpu: vulkan: Fix an uninitialised structure in SDL_BlitGPUTexture() da5a1585cd GPU: Avoid calling SDL_GetWindowSizeInPixels when possible (#11139) 4707bb730e Sync SDL3 wiki -> header 9023a199dd Fixed crash in RLE colorkey blitting f946f87f30 Don't rely on event.buttonMask being set in touchesEnded ee9b6204cf Updated to version 3.1.5 for development 02f3a96476 Sync SDL3 wiki -> header f8eac30276 Added SDL_StepBackUTF8() 1f08a03794 Switched drag-n-drop logging to trace level 5b6342a00d Default SDL_HINT_JOYSTICK_GAMEINPUT to "1" on GDK platforms ed87e7e434 test: enable GameInput driver on GDK platforms acb18e05b5 GPU: fix swapchain buffer size not set on Xbox ff834f7733 Removed the restrict keyword 8e6ead2f7b [GPU] Added ASTC texture format support (#11116) 02434cd293 emscripten: Fixes for data addresses above 2gb c34790f9f1 Fixed spacing 312ecc4a52 SDL_main.h: Remove dead code for hypothetical C++ platforms 823b218051 Simplify code to include SDL_main_impl.h in SDL_main.h cba77834f2 init: Log '<unspecified>' not '(null)' if the app name isn't set. fb8244d6d9 init: Also log the SDL revision here c24f7d2453 Log app ID as SYSTEM/INFO during initialization e7ee92e822 Switched drag-n-drop logging to trace level d9f8474dd7 Sync SDL3 wiki -> header 95aaaa3232 Sync SDL3 wiki -> header 158ba93d61 Update some window function documentation 300daf308a Replace SDL_TRUE/FALSE with true/false in the coccinelle script 95ab38ba15 ci: actions/cache might return a boolean as string 7acfdfd3e7 Sync SDL3 wiki -> header 326ab439d7 Sync SDL3 wiki -> header fb07ab91c6 Improved SDL_main documentation and remove extern "C" comment. 03fa9ff0b0 Sync SDL3 wiki -> header 2000ccb541 Allow linear interpolation of the font textures f6fa617139 Define SDL_DIALOG_DUMMY in SDL_build_config.h as needed 4627283eca Allow building both Cocoa and dummy dialog implementations c8526532de Changed objectVersion to 54 so Xcode 12 can load the projects (thanks @Wohlstand!) 2fd12b2e8a keyboard: Note that enabling text input can also enable an IME 81b48de3f5 Fixed VID/PID list parsing of SDL_HINT_GAMECONTROLLER_SENSOR_FUSION 5db64300b8 Fixed SDL_GetStringInteger() for values starting with '0' and '1' (thanks @DanielGibson!) 7da728a642 Added support for wired XBox controllers on macOS 15.0 Sequoia 659f2f4b04 examples: add basic app metadata to all existing examples. aa534c3ac3 core: Fixed incorrect comment in core/windows/SDL_windows.h. ee7f61fd9a snake: Add extended app metadata ca82405d5a snake: Add basic app metadata 6ae5666acf Check for VK_SUBOPTIMAL_KHR also in vkQueuePresentKHR (#11113) 06bd214af6 Fixed warnings building on Android 596fcfa6c4 fix microphone permission and feature flags being spread out 54e622c2e6 Use the printf vararg verification macros when compiling with clang fca05fa754 examples: Use SDL_Log() instead of message boxes for errors. 9f170286ba test: Replace README with LICENSE.txt d0ef58b442 Sync SDL3 wiki -> header cbb9a16367 Sync SDL3 wiki -> header 65539bc4f7 Make sure trackpad state is updated when button presses are delivered 03b259893a Fixed return value of SDL_AddGamepadMapping() bf54eddba9 macOS: Clarify when macOS hints need to be set c2b98e21ba macOS: Add hint for smooth SDL_EVENT_MOUSE_WHEEL values 2fa8acb084 x11: Refresh the global cursor coordinates when confining the pointer e59078ac6f Sync SDL3 wiki -> header 9e74ada7b8 gpu: fixed formatting in docs. c358bf3f9b Removed test program list, it's better to just look at the code. f8dd73fdb9 Fixed build 0f47d3a77b Fixed use after free (thanks @meyraud705!) e159bcf5de test: Make blit_testExampleApplicationRender work on big endian c9ffa3f9e1 Remove vestiges of the TAKE_FOCUS window event 596ef1ba2e Moved the SDL_ttf IME demo to showfont in the SDL_ttf project e00b1fdd67 clipboard: include mime types in SDL_ClipboarUpdate 2880b40e33 fix pipewire prototype b6ab7d28f6 Replaced \r\n with \n in SDL root files b8e72b0969 Note that creating a renderer will fail if the preferred renderer isn't available. 1ca45c5891 Fix typo: DiretMedia->DirectMedia 8db3b47482 Just use normal stdio for the child process 8c3f88b495 docs: Wrote CategoryVulkan. 369b93771b Sync SDL3 wiki -> header deeffaa8d6 Sync SDL3 wiki -> header 84ecf7fd3e docs: Add CategorySurface text. e292d1f5ac Sync SDL3 wiki -> header d5af0c7e09 Added missing parentheses 5a60d073c0 Sync SDL3 wiki -> header a3413e050b Sync SDL3 wiki -> header c25423b94c docs: Filled in some category pages. a57ecad648 Fixed documentation typos 37315110c1 Sync SDL3 wiki -> header f26dd52090 SDL_GetProcessProperties is missing a SDLCALL d318a4a6b1 .wikiheaders-options: Declare SDL3 to be a stable API! 64cbf02dbf Sync SDL3 wiki -> header ffe4e571d1 wikiheaders: regex hack to make a URL not confuse wikilink genertion. a7e4e9219a Sync SDL3 wiki -> header e8c852d77c GPU: re-add parens to wiki intro 00385951a1 Use file descriptor I/O for process pipes f592a35439 Sync SDL3 wiki -> header 12d007038c GPU: wiki header link typo f275731e18 Sync SDL3 wiki -> header f3285b01c8 GPU: Intro fixes 93c7521dd5 Sync SDL3 wiki -> header c1084bfaa3 GPU Introduction (#11062) 21e7fa45e8 GPU: fix padding field typo bd4cd34a74 Add docs to mingw development archive f859d69c44 Sync SDL3 wiki -> header 6c64c62114 Rename SDL_BUTTON() to SDL_BUTTON_MASK() d529407ce7 Sync SDL3 wiki -> header fe2880fcda Rename SDL_SetThreadPriority() to SDL_SetCurrentThreadPriority() 69196ab30d Change evasive library handle to `SDL_SharedObject*` 3a6a3ab64f gpu: Fix memory leak in Vulkan backend. 43e7ce7dfc Updated to version 3.1.3 for the preview release ca0b1eaf5a Sync SDL3 wiki -> header 93c27a6675 Fixed the documentation for consistency. 3ae2af8aa1 Sync SDL3 wiki -> header 9a5d5a2839 video: Improve the EGL attribute callbacks. d4143e02d1 Always set checked_monotonic_time when calling CheckMonotonicTime() 020fb6889c Removed unnecessary const-qualifiers in src and test files b8e8dcaa9a Add void to openbsd function prototypes 0e909d2785 Removed redundant condition in src/events/SDL_pen.c 191f3ecbbc render: Restore previous policy for converting window/render coordinates. 3246df8bd3 Remove redundant SDL_Vulkan_GetResultString() declaration 07fd88d241 docs: Fix migration documentation for SDL_WINDOWEVENT_SIZE_CHANGED a0de6c4abf Add properties to SDL_IOStreams returned by IOFromMem 1bb7e2b1a8 SDL_migration.cocci: Removed obsolete SDL_CreateWindowWithPosition code. f4cea5e019 Removed const qualifiers from SDL_CreateHashTable() parameter types d287feaddf render: Remove non-pointer args' const qualifiers on SDL_RenderTextureRotated. e3757f072b Sync SDL3 wiki -> header 8b4f5f09c1 dynapi: It's a Python script now, not a perl script. 35b002be82 audio: Clarified SDL_GetAudioStreamQueued docs. 47450425fd Allow iterating just the keys or values in a hashtable d5fe6dd627 Don't use const for non-pointer API parameters d2b2a752ce SDL_migration.cocci: A few fixes. 91b074beb7 Removed SDL_IPHONE_MAX_GFORCE 34033d5838 Sync SDL3 wiki -> header eced9f58a9 Added a userdata parameter for EGL attribute callbacks 798c9574d0 Sync SDL3 wiki -> header 89e68aa801 Added missing return value documentation for bsearch() 4fa92d233d Include stdbool.h when using Visual Studio 2017+ 522321b7c9 test: Fix testcustomcursor on high-DPI displays 3b3c4a79b6 Don't close file descriptors already handled by AddFileDescriptorCloseActions() 5f5379dc99 Add `SDL_IsTV()` (#11004) 6bcf2f919a Sync SDL3 wiki -> header 0b5e01a305 loadso: library handles are now `SDL_SharedObject*` instead of `void*`. f351395c46 Sync SDL3 wiki -> header 3234a3b902 Simplified internal SDL_Surface structure 1f3a0d12e6 Made texture size and format public in the API 5136b30652 render: SDL_ConvertEventToRenderCoordinates() now handles pen events. b4fcd1f345 pen: Corrected some documentation. e3dbd74fe7 Improved documentation for SDL_Surface fields 13c5d1092f hidapi: update hid_write() for windows from mainstream. 3eab599977 just force the barrier on UpdateTexture actually e17741a6cb Render GPU: Only cycle on update if entire texture is replaced 45ad763de5 Disable backface culling and use a constant rectangle winding order. fa14b53273 GPU Vulkan: Clear up some swapchain edge cases c16d7c87d6 Sync SDL3 wiki -> header ab832f1be0 Added documentation for qsort and bsearch functions 818d7d892a x11: store all atoms in a specific struct 801870c8cf video: cache some more atoms under X11 dcc7560a5c Sync SDL3 wiki -> header afdf325fb4 GPU: Add swapchain dimension out params (#11003) b3388d5753 Haiku does not have fdatasync, but has fsync 396afa2117 ci: bump haiku to r1beta5 0b64520997 hashtable: fixed unused-parameter warnings 1787d6ca5c main: SDL_AppQuit() now reports the result value. 6a7f8b74f1 filesystem: SDL_GlobDirectory shouldn't strip final '/' if the path is "/". 7241dd9ec3 Add more SDL_Process tests f6055432c8 Fix null-pointer dereference on failing SDL_SYS_CreateProcess e9bfa5bf6a Mitigate BatBadBut vulnerability 06e122103c Fix window opacity update c84d825241 Added SDL_HashPointer() and SDL_KeyMatchPointer() d0c9c008e1 wayland: Use high-DPI system cursors on non-DPI aware windows 5f304b3a47 Fix builed error after commit 0e45b824e34 due to -Wunused-variable 0e45b824e3 renderer: always update the output pixel size at startup 2825a682f0 Fixed build errors ba7b346e52 hashtable: reimplement as open-addressed robin hood hashtable 62938837c2 Sync SDL3 wiki -> header fc242abbd2 GPU: recreate swapchain on window pixel size change event (#10985) 66f6b40c92 Render GPU: Don't call GetWindowSizeInPixels during RenderPreset (#10984) a923771978 Added SDL_murmur3_32() 039148fb0e Updated check for stdbool.h 7ca0e9ede1 wayland: Scale the pointer destination size relative to the theme size d2094bd0a2 wayland: Don't query the cursor info with DBus if the cursor shape protocol is present dee62e1b47 Remove trailing comma in enum 7d21a49c9c filesystem: SDL_EnumerateDirectoryCallback uses an enum now, not an int. 55bd9f5311 iostream: flush() should attempt to sync file data to physical media. 0852307b58 gpu: Check Vulkan device features for IsDeviceSuitable fb165a542b GPU Vulkan: add resolve info to framebuffer and render pass lookups 0542bbbf1a Sync SDL3 wiki -> header 4a296f1bde filesystem: Fixed memory leak on Windows. e944f0fb9d testfilesystem: Added test of creating parent dirs. 428f2f35be filesystem: SDL_CreateDirectory should make parent directories. 94030131de filesystem: Windows SDL_SYS_CreateDirectory should succeed if dir exists. 48c3ee2120 testcolorspace.c: Fix unreachable code warning 8d6b397cd8 Sync SDL3 wiki -> header 3f446d8fb5 Minor cleanup 1088ea55fa SDL_gpu_d3d11.c: define D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD for old toolchains 8377cad974 Sync SDL3 wiki -> header c39e8298b7 GPU: Document swapchain dimensions de40d6bae0 GPU Metal: Set texture to NULL even if AcquireSwapchainTexture fails 0e5a49542d Sync SDL3 wiki -> header f32e96f5e2 clipboard: add SDL_ClipboardMimeTypes 0befa7d8e9 Sync SDL3 wiki -> header eedd2039f9 GPU: 32-bit component texture formats 769ff47461 Sync SDL3 wiki -> header 05d0656bd6 GPU: Simultaneous compute pass read-write (#10965) d39acc6d1e Fixed warning C4702: unreachable code 5ff6e8d522 GPU: Add enable_depth_clip to RasterizerState (#10964) 04bb105d09 Added header for SDL_ThreadID type e98cf3c870 Fix Xbox builds c7442b04f0 Sync SDL3 wiki -> header be401dd1e3 GPU: More robust error reporting (#10958) 48e213b4cd Fixed SDL_ShouldQuit() returning false during status transitions d8c76d2f34 filesystem: POSIX SDL_SYS_CopyFile shouldn't use a temp file. 0d593cf39a Sync SDL3 wiki -> header f267ec7681 filesystem: Improve docs, make some promises about overwrites and file caches. c1587b1eac Sync SDL3 wiki -> header 125e592844 Added SDL_ShouldInit() and SDL_ShouldQuit() 0e2c4e407a README-migration: note that logical presentation state is different from SDL2. 4e09e58f62 include: Small clarification on directory enumeration documentation. 38f971bac5 filesystem: SDL_SYS_EnumerateDirectory() now returns bool. 86ea283904 examples: No need to explicitly seed the RNG at startup. 671a33c2f7 wayland: Raise all touches on a cancel event 457d0edeaf Remove some extra semicolons 345cae361d Document mode parameter of SDL_GetRenderLogicalPresentation 345d9bfe19 A zero source rect is valid for blitting 1aea43846e Don't use BlitARGBto555PixelAlpha() for SDL_PIXELFORMAT_ARGB1555 59d69a3ba3 Sync SDL3 wiki -> header d9a7da4fac Optimized SDL_HasEvent() and SDL_HasEvents() 3abb213083 opengl: Fixed SDL_RENDERCMD_SETDRAWCOLOR code checking the wrong variable. 961cd51611 opengl: Removed a FIXME (this is documented as not-thread-safe now. 80cf3f7c38 ci: Fix check_stdlib_usage.py and run on ci 76f28ea120 Fix stdlib usage 80da805688 build: Fix testprocess invocation during "as-installed" tests 81644d260f Sync SDL3 wiki -> header 122cd4db2b include: Added `\threadsafety` notes to all SDL_render.h functions. 276969cd58 Sync SDL3 wiki -> header 4c48ff51f8 render: SDL_RenderPresent now behaves when a render target is currently set. 7a6a0becb8 render: Fixed a FIXME for SDL_SetRenderViewport with a negative size. 54459def69 render: Remove the logical presentation render target. bf7a48cdcc render/gpu: Change some memcpy calls to SDL_memcpy. b48f29dd9b examples: Fix name of renderer/17-read-pixels binary. 925e47a077 GPU: Fix backwards LogError and SetError calls 1561d7c089 Fix warnings in build-scripts/check_stdlib_usage.py 2070adb262 android: add python script checking Android JNI bindings cf4049cfde ci: check versioning on ci 557c6dfb18 GPU: call SDL_SetError where appropriate 6ec8b1a173 Throttle tickle reports to PS4/PS5 controllers 53bf2baac3 Change JNI calls to comply with recent Boolean changes fcab6c99fb examples: Fixed some window titles. 9881c4e582 examples: Added renderer/17-read-pixels 62389ada6f examples/renderer/02-primitives: seed the RNG. 95134f6d58 examples: Added renderer/15-cliprect ad3a4c677b wayland: Clean up cursor scaling e5d3a1b6f5 Remove casts from typed pointer to void * for printf %p in test projects 57418475ce kmsdrm: Keep fd around if we can drop master 13f88df190 kmsdrm: Fix KMSDRM_Vulkan_CreateSurface() return value 8f55f48337 kmsdrm: Move property initialization a bit further down 1ed3dac021 examples: Added renderer/14-viewport e00ea27d25 examples/renderer/01-clear: No longer needs vsync. 004ac40226 Fix warning: no function prototype 4a3faf20ac gpu: Replace high-level logs with SetError 043c876a15 Move default colorspace aliases into enum 0685b96469 GPU: fix build when SDL_GPU_DISABLED is set e973b687cd examples: Added renderer/11-color-mods 0478a6ee3b Move endian pixel format aliases into enum 1828bde49f examples/renderer/01-clear: Use the color-cycle code from testvulkan.c 3bc2bd790c build-web-examples.pl: Added a FIXME. git-subtree-dir: external/SDL git-subtree-split: 8ec576ddabdc7edfd68e7a8a3214e84e4026328d
2585 lines
106 KiB
C
2585 lines
106 KiB
C
/*
|
|
Simple DirectMedia Layer
|
|
Copyright (C) 1997-2025 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.
|
|
*/
|
|
|
|
/**
|
|
* # CategoryRender
|
|
*
|
|
* Header file for SDL 2D rendering functions.
|
|
*
|
|
* This API supports the following features:
|
|
*
|
|
* - single pixel points
|
|
* - single pixel lines
|
|
* - filled rectangles
|
|
* - texture images
|
|
* - 2D polygons
|
|
*
|
|
* The primitives may be drawn in opaque, blended, or additive modes.
|
|
*
|
|
* The texture images may be drawn in opaque, blended, or additive modes. They
|
|
* can have an additional color tint or alpha modulation applied to them, and
|
|
* may also be stretched with linear interpolation.
|
|
*
|
|
* This API is designed to accelerate simple 2D operations. You may want more
|
|
* functionality such as polygons and particle effects and in that case you
|
|
* should use SDL's OpenGL/Direct3D support, the SDL3 GPU API, or one of the
|
|
* many good 3D engines.
|
|
*
|
|
* These functions must be called from the main thread. See this bug for
|
|
* details: https://github.com/libsdl-org/SDL/issues/986
|
|
*/
|
|
|
|
#ifndef SDL_render_h_
|
|
#define SDL_render_h_
|
|
|
|
#include <SDL3/SDL_stdinc.h>
|
|
#include <SDL3/SDL_blendmode.h>
|
|
#include <SDL3/SDL_error.h>
|
|
#include <SDL3/SDL_events.h>
|
|
#include <SDL3/SDL_pixels.h>
|
|
#include <SDL3/SDL_properties.h>
|
|
#include <SDL3/SDL_rect.h>
|
|
#include <SDL3/SDL_surface.h>
|
|
#include <SDL3/SDL_video.h>
|
|
|
|
#include <SDL3/SDL_begin_code.h>
|
|
/* Set up for C function definitions, even when using C++ */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* The name of the software renderer.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_SOFTWARE_RENDERER "software"
|
|
|
|
/**
|
|
* Vertex structure.
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*/
|
|
typedef struct SDL_Vertex
|
|
{
|
|
SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */
|
|
SDL_FColor color; /**< Vertex color */
|
|
SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */
|
|
} SDL_Vertex;
|
|
|
|
/**
|
|
* The access pattern allowed for a texture.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_TextureAccess
|
|
{
|
|
SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */
|
|
SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */
|
|
SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */
|
|
} SDL_TextureAccess;
|
|
|
|
/**
|
|
* How the logical size is mapped to the output.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_RendererLogicalPresentation
|
|
{
|
|
SDL_LOGICAL_PRESENTATION_DISABLED, /**< There is no logical size in effect */
|
|
SDL_LOGICAL_PRESENTATION_STRETCH, /**< The rendered content is stretched to the output resolution */
|
|
SDL_LOGICAL_PRESENTATION_LETTERBOX, /**< The rendered content is fit to the largest dimension and the other dimension is letterboxed with black bars */
|
|
SDL_LOGICAL_PRESENTATION_OVERSCAN, /**< The rendered content is fit to the smallest dimension and the other dimension extends beyond the output bounds */
|
|
SDL_LOGICAL_PRESENTATION_INTEGER_SCALE /**< The rendered content is scaled up by integer multiples to fit the output resolution */
|
|
} SDL_RendererLogicalPresentation;
|
|
|
|
/**
|
|
* A structure representing rendering state
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*/
|
|
typedef struct SDL_Renderer SDL_Renderer;
|
|
|
|
#ifndef SDL_INTERNAL
|
|
|
|
/**
|
|
* An efficient driver-specific representation of pixel data
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
*/
|
|
struct SDL_Texture
|
|
{
|
|
SDL_PixelFormat format; /**< The format of the texture, read-only */
|
|
int w; /**< The width of the texture, read-only. */
|
|
int h; /**< The height of the texture, read-only. */
|
|
|
|
int refcount; /**< Application reference count, used when freeing texture */
|
|
};
|
|
#endif /* !SDL_INTERNAL */
|
|
|
|
typedef struct SDL_Texture SDL_Texture;
|
|
|
|
/* Function prototypes */
|
|
|
|
/**
|
|
* Get the number of 2D rendering drivers available for the current display.
|
|
*
|
|
* A render driver is a set of code that handles rendering and texture
|
|
* management on a particular display. Normally there is only one, but some
|
|
* drivers may have several available with different capabilities.
|
|
*
|
|
* There may be none if SDL was compiled without render support.
|
|
*
|
|
* \returns the number of built in render drivers.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_GetRenderDriver
|
|
*/
|
|
extern SDL_DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void);
|
|
|
|
/**
|
|
* Use this function to get the name of a built in 2D rendering driver.
|
|
*
|
|
* The list of rendering drivers is given in the order that they are normally
|
|
* initialized by default; the drivers that seem more reasonable to choose
|
|
* first (as far as the SDL developers believe) are earlier in the list.
|
|
*
|
|
* The names of drivers are all simple, low-ASCII identifiers, like "opengl",
|
|
* "direct3d12" or "metal". These never have Unicode characters, and are not
|
|
* meant to be proper names.
|
|
*
|
|
* \param index the index of the rendering driver; the value ranges from 0 to
|
|
* SDL_GetNumRenderDrivers() - 1.
|
|
* \returns the name of the rendering driver at the requested index, or NULL
|
|
* if an invalid index was specified.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetNumRenderDrivers
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetRenderDriver(int index);
|
|
|
|
/**
|
|
* Create a window and default renderer.
|
|
*
|
|
* \param title the title of the window, in UTF-8 encoding.
|
|
* \param width the width of the window.
|
|
* \param height the height of the window.
|
|
* \param window_flags the flags used to create the window (see
|
|
* SDL_CreateWindow()).
|
|
* \param window a pointer filled with the window, or NULL on error.
|
|
* \param renderer a pointer filled with the renderer, or NULL on error.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer);
|
|
|
|
/**
|
|
* Create a 2D rendering context for a window.
|
|
*
|
|
* If you want a specific renderer, you can specify its name here. A list of
|
|
* available renderers can be obtained by calling SDL_GetRenderDriver()
|
|
* multiple times, with indices from 0 to SDL_GetNumRenderDrivers()-1. If you
|
|
* don't need a specific renderer, specify NULL and SDL will attempt to choose
|
|
* the best option for you, based on what is available on the user's system.
|
|
*
|
|
* By default the rendering size matches the window size in pixels, but you
|
|
* can call SDL_SetRenderLogicalPresentation() to change the content size and
|
|
* scaling options.
|
|
*
|
|
* \param window the window where rendering is displayed.
|
|
* \param name the name of the rendering driver to initialize, or NULL to let
|
|
* SDL choose one.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRendererWithProperties
|
|
* \sa SDL_CreateSoftwareRenderer
|
|
* \sa SDL_DestroyRenderer
|
|
* \sa SDL_GetNumRenderDrivers
|
|
* \sa SDL_GetRenderDriver
|
|
* \sa SDL_GetRendererName
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window *window, const char *name);
|
|
|
|
/**
|
|
* Create a 2D rendering context for a window, with the specified properties.
|
|
*
|
|
* These are the supported properties:
|
|
*
|
|
* - `SDL_PROP_RENDERER_CREATE_NAME_STRING`: the name of the rendering driver
|
|
* to use, if a specific one is desired
|
|
* - `SDL_PROP_RENDERER_CREATE_WINDOW_POINTER`: the window where rendering is
|
|
* displayed, required if this isn't a software renderer using a surface
|
|
* - `SDL_PROP_RENDERER_CREATE_SURFACE_POINTER`: the surface where rendering
|
|
* is displayed, if you want a software renderer without a window
|
|
* - `SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER`: an SDL_Colorspace
|
|
* value describing the colorspace for output to the display, defaults to
|
|
* SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers
|
|
* support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and
|
|
* supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing
|
|
* still uses the sRGB colorspace, but values can go beyond 1.0 and float
|
|
* (linear) format textures can be used for HDR content.
|
|
* - `SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER`: non-zero if you want
|
|
* present synchronized with the refresh rate. This property can take any
|
|
* value that is supported by SDL_SetRenderVSync() for the renderer.
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER`: the VkInstance to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER`: the VkSurfaceKHR to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER`: the
|
|
* VkPhysicalDevice to use with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER`: the VkDevice to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER`: the
|
|
* queue family index used for rendering.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER`: the
|
|
* queue family index used for presentation.
|
|
*
|
|
* \param props the properties to use.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateProperties
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateSoftwareRenderer
|
|
* \sa SDL_DestroyRenderer
|
|
* \sa SDL_GetRendererName
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties(SDL_PropertiesID props);
|
|
|
|
#define SDL_PROP_RENDERER_CREATE_NAME_STRING "SDL.renderer.create.name"
|
|
#define SDL_PROP_RENDERER_CREATE_WINDOW_POINTER "SDL.renderer.create.window"
|
|
#define SDL_PROP_RENDERER_CREATE_SURFACE_POINTER "SDL.renderer.create.surface"
|
|
#define SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.create.output_colorspace"
|
|
#define SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER "SDL.renderer.create.present_vsync"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER "SDL.renderer.create.vulkan.instance"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER "SDL.renderer.create.vulkan.surface"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER "SDL.renderer.create.vulkan.physical_device"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER "SDL.renderer.create.vulkan.device"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.graphics_queue_family_index"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.present_queue_family_index"
|
|
|
|
/**
|
|
* Create a 2D software rendering context for a surface.
|
|
*
|
|
* Two other API which can be used to create SDL_Renderer:
|
|
* SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_
|
|
* create a software renderer, but they are intended to be used with an
|
|
* SDL_Window as the final destination and not an SDL_Surface.
|
|
*
|
|
* \param surface the SDL_Surface structure representing the surface where
|
|
* rendering is done.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_DestroyRenderer
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface *surface);
|
|
|
|
/**
|
|
* Get the renderer associated with a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the rendering context on success or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the window associated with a renderer.
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns the window on success or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetRenderWindow(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the name of a renderer.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns the name of the selected renderer, or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateRendererWithProperties
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetRendererName(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the properties associated with a renderer.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_RENDERER_NAME_STRING`: the name of the rendering driver
|
|
* - `SDL_PROP_RENDERER_WINDOW_POINTER`: the window where rendering is
|
|
* displayed, if any
|
|
* - `SDL_PROP_RENDERER_SURFACE_POINTER`: the surface where rendering is
|
|
* displayed, if this is a software renderer without a window
|
|
* - `SDL_PROP_RENDERER_VSYNC_NUMBER`: the current vsync setting
|
|
* - `SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER`: the maximum texture width
|
|
* and height
|
|
* - `SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER`: a (const SDL_PixelFormat *)
|
|
* array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN,
|
|
* representing the available texture formats for this renderer.
|
|
* - `SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER`: an SDL_Colorspace value
|
|
* describing the colorspace for output to the display, defaults to
|
|
* SDL_COLORSPACE_SRGB.
|
|
* - `SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN`: true if the output colorspace is
|
|
* SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with
|
|
* HDR enabled. This property can change dynamically when
|
|
* SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT`: the value of SDR white in the
|
|
* SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is
|
|
* automatically multiplied into the color scale. This property can change
|
|
* dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_RENDERER_HDR_HEADROOM_FLOAT`: the additional high dynamic range
|
|
* that can be displayed, in terms of the SDR white point. When HDR is not
|
|
* enabled, this will be 1.0. This property can change dynamically when
|
|
* SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
*
|
|
* With the direct3d renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D9_DEVICE_POINTER`: the IDirect3DDevice9 associated
|
|
* with the renderer
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D11_DEVICE_POINTER`: the ID3D11Device associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER`: the IDXGISwapChain1
|
|
* associated with the renderer. This may change when the window is resized.
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D12_DEVICE_POINTER`: the ID3D12Device associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER`: the IDXGISwapChain4
|
|
* associated with the renderer.
|
|
* - `SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER`: the ID3D12CommandQueue
|
|
* associated with the renderer
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER`: the VkInstance associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER`: the VkSurfaceKHR associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER`: the VkPhysicalDevice
|
|
* associated with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_DEVICE_POINTER`: the VkDevice associated with
|
|
* the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER`: the queue
|
|
* family index used for rendering
|
|
* - `SDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER`: the queue
|
|
* family index used for presentation
|
|
* - `SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER`: the number of
|
|
* swapchain images, or potential frames in flight, used by the Vulkan
|
|
* renderer
|
|
*
|
|
* With the gpu renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_GPU_DEVICE_POINTER`: the SDL_GPUDevice associated with
|
|
* the renderer
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns a valid property ID on success or 0 on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetRendererProperties(SDL_Renderer *renderer);
|
|
|
|
#define SDL_PROP_RENDERER_NAME_STRING "SDL.renderer.name"
|
|
#define SDL_PROP_RENDERER_WINDOW_POINTER "SDL.renderer.window"
|
|
#define SDL_PROP_RENDERER_SURFACE_POINTER "SDL.renderer.surface"
|
|
#define SDL_PROP_RENDERER_VSYNC_NUMBER "SDL.renderer.vsync"
|
|
#define SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER "SDL.renderer.max_texture_size"
|
|
#define SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER "SDL.renderer.texture_formats"
|
|
#define SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.output_colorspace"
|
|
#define SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN "SDL.renderer.HDR_enabled"
|
|
#define SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT "SDL.renderer.SDR_white_point"
|
|
#define SDL_PROP_RENDERER_HDR_HEADROOM_FLOAT "SDL.renderer.HDR_headroom"
|
|
#define SDL_PROP_RENDERER_D3D9_DEVICE_POINTER "SDL.renderer.d3d9.device"
|
|
#define SDL_PROP_RENDERER_D3D11_DEVICE_POINTER "SDL.renderer.d3d11.device"
|
|
#define SDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER "SDL.renderer.d3d11.swap_chain"
|
|
#define SDL_PROP_RENDERER_D3D12_DEVICE_POINTER "SDL.renderer.d3d12.device"
|
|
#define SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER "SDL.renderer.d3d12.swap_chain"
|
|
#define SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER "SDL.renderer.d3d12.command_queue"
|
|
#define SDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER "SDL.renderer.vulkan.instance"
|
|
#define SDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER "SDL.renderer.vulkan.surface"
|
|
#define SDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER "SDL.renderer.vulkan.physical_device"
|
|
#define SDL_PROP_RENDERER_VULKAN_DEVICE_POINTER "SDL.renderer.vulkan.device"
|
|
#define SDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.vulkan.graphics_queue_family_index"
|
|
#define SDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.vulkan.present_queue_family_index"
|
|
#define SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER "SDL.renderer.vulkan.swapchain_image_count"
|
|
#define SDL_PROP_RENDERER_GPU_DEVICE_POINTER "SDL.renderer.gpu.device"
|
|
|
|
/**
|
|
* Get the output size in pixels of a rendering context.
|
|
*
|
|
* This returns the true output size in pixels, ignoring any render targets or
|
|
* logical size and presentation.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w a pointer filled in with the width in pixels.
|
|
* \param h a pointer filled in with the height in pixels.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetCurrentRenderOutputSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderOutputSize(SDL_Renderer *renderer, int *w, int *h);
|
|
|
|
/**
|
|
* Get the current output size in pixels of a rendering context.
|
|
*
|
|
* If a rendering target is active, this will return the size of the rendering
|
|
* target in pixels, otherwise if a logical size is set, it will return the
|
|
* logical size, otherwise it will return the value of
|
|
* SDL_GetRenderOutputSize().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w a pointer filled in with the current width.
|
|
* \param h a pointer filled in with the current height.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderOutputSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetCurrentRenderOutputSize(SDL_Renderer *renderer, int *w, int *h);
|
|
|
|
/**
|
|
* Create a texture for a rendering context.
|
|
*
|
|
* The contents of a texture when first created are not defined.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param format one of the enumerated values in SDL_PixelFormat.
|
|
* \param access one of the enumerated values in SDL_TextureAccess.
|
|
* \param w the width of the texture in pixels.
|
|
* \param h the height of the texture in pixels.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
* \sa SDL_GetTextureSize
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, SDL_TextureAccess access, int w, int h);
|
|
|
|
/**
|
|
* Create a texture from an existing surface.
|
|
*
|
|
* The surface is not modified or freed by this function.
|
|
*
|
|
* The SDL_TextureAccess hint for the created texture is
|
|
* `SDL_TEXTUREACCESS_STATIC`.
|
|
*
|
|
* The pixel format of the created texture may be different from the pixel
|
|
* format of the surface, and can be queried using the
|
|
* SDL_PROP_TEXTURE_FORMAT_NUMBER property.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param surface the SDL_Surface structure containing pixel data used to fill
|
|
* the texture.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface);
|
|
|
|
/**
|
|
* Create a texture for a rendering context with the specified properties.
|
|
*
|
|
* These are the supported properties:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER`: an SDL_Colorspace value
|
|
* describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR
|
|
* for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures,
|
|
* SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for
|
|
* YUV textures.
|
|
* - `SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER`: one of the enumerated values in
|
|
* SDL_PixelFormat, defaults to the best RGBA format for the renderer
|
|
* - `SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER`: one of the enumerated values in
|
|
* SDL_TextureAccess, defaults to SDL_TEXTUREACCESS_STATIC
|
|
* - `SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER`: the width of the texture in
|
|
* pixels, required
|
|
* - `SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER`: the height of the texture in
|
|
* pixels, required
|
|
* - `SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT`: for HDR10 and floating
|
|
* point textures, this defines the value of 100% diffuse white, with higher
|
|
* values being displayed in the High Dynamic Range headroom. This defaults
|
|
* to 100 for HDR10 textures and 1.0 for floating point textures.
|
|
* - `SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT`: for HDR10 and floating
|
|
* point textures, this defines the maximum dynamic range used by the
|
|
* content, in terms of the SDR white point. This would be equivalent to
|
|
* maxCLL / SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content.
|
|
* If this is defined, any values outside the range supported by the display
|
|
* will be scaled into the available HDR headroom, otherwise they are
|
|
* clipped.
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER`: the ID3D11Texture2D
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER`: the ID3D11Texture2D
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER`: the ID3D11Texture2D
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER`: the ID3D12Resource
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER`: the ID3D12Resource
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER`: the ID3D12Resource
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the metal renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER`: the CVPixelBufferRef
|
|
* associated with the texture, if you want to create a texture from an
|
|
* existing pixel buffer.
|
|
*
|
|
* With the opengl renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the opengles2 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage with layout
|
|
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL associated with the texture, if
|
|
* you want to wrap an existing texture.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param props the properties to use.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateProperties
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_DestroyTexture
|
|
* \sa SDL_GetTextureSize
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props);
|
|
|
|
#define SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER "SDL.texture.create.colorspace"
|
|
#define SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER "SDL.texture.create.format"
|
|
#define SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER "SDL.texture.create.access"
|
|
#define SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER "SDL.texture.create.width"
|
|
#define SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER "SDL.texture.create.height"
|
|
#define SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT "SDL.texture.create.SDR_white_point"
|
|
#define SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT "SDL.texture.create.HDR_headroom"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER "SDL.texture.create.d3d11.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER "SDL.texture.create.d3d11.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER "SDL.texture.create.d3d11.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER "SDL.texture.create.d3d12.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER "SDL.texture.create.d3d12.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER "SDL.texture.create.d3d12.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER "SDL.texture.create.metal.pixelbuffer"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER "SDL.texture.create.opengl.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.create.opengl.texture_uv"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.create.opengl.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.create.opengl.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.create.opengles2.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.create.opengles2.texture_uv"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.create.opengles2.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.create.opengles2.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER "SDL.texture.create.vulkan.texture"
|
|
|
|
/**
|
|
* Get the properties associated with a texture.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_COLORSPACE_NUMBER`: an SDL_Colorspace value describing
|
|
* the texture colorspace.
|
|
* - `SDL_PROP_TEXTURE_FORMAT_NUMBER`: one of the enumerated values in
|
|
* SDL_PixelFormat.
|
|
* - `SDL_PROP_TEXTURE_ACCESS_NUMBER`: one of the enumerated values in
|
|
* SDL_TextureAccess.
|
|
* - `SDL_PROP_TEXTURE_WIDTH_NUMBER`: the width of the texture in pixels.
|
|
* - `SDL_PROP_TEXTURE_HEIGHT_NUMBER`: the height of the texture in pixels.
|
|
* - `SDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT`: for HDR10 and floating point
|
|
* textures, this defines the value of 100% diffuse white, with higher
|
|
* values being displayed in the High Dynamic Range headroom. This defaults
|
|
* to 100 for HDR10 textures and 1.0 for other textures.
|
|
* - `SDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT`: for HDR10 and floating point
|
|
* textures, this defines the maximum dynamic range used by the content, in
|
|
* terms of the SDR white point. If this is defined, any values outside the
|
|
* range supported by the display will be scaled into the available HDR
|
|
* headroom, otherwise they are clipped. This defaults to 1.0 for SDR
|
|
* textures, 4.0 for HDR10 textures, and no default for floating point
|
|
* textures.
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER`: the ID3D11Texture2D associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER`: the ID3D11Texture2D
|
|
* associated with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER`: the ID3D11Texture2D
|
|
* associated with the V plane of a YUV texture
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER`: the ID3D12Resource associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER`: the ID3D12Resource associated
|
|
* with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER`: the ID3D12Resource associated
|
|
* with the V plane of a YUV texture
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER`: the VkImage associated with the
|
|
* texture
|
|
*
|
|
* With the opengl renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER`: the GLuint texture associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER`: the GLuint texture associated
|
|
* with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER`: the GLuint texture associated
|
|
* with the V plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER`: the GLenum for the
|
|
* texture target (`GL_TEXTURE_2D`, `GL_TEXTURE_RECTANGLE_ARB`, etc)
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT`: the texture coordinate width of
|
|
* the texture (0.0 - 1.0)
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT`: the texture coordinate height of
|
|
* the texture (0.0 - 1.0)
|
|
*
|
|
* With the opengles2 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER`: the GLenum for the
|
|
* texture target (`GL_TEXTURE_2D`, `GL_TEXTURE_EXTERNAL_OES`, etc)
|
|
*
|
|
* \param texture the texture to query.
|
|
* \returns a valid property ID on success or 0 on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetTextureProperties(SDL_Texture *texture);
|
|
|
|
#define SDL_PROP_TEXTURE_COLORSPACE_NUMBER "SDL.texture.colorspace"
|
|
#define SDL_PROP_TEXTURE_FORMAT_NUMBER "SDL.texture.format"
|
|
#define SDL_PROP_TEXTURE_ACCESS_NUMBER "SDL.texture.access"
|
|
#define SDL_PROP_TEXTURE_WIDTH_NUMBER "SDL.texture.width"
|
|
#define SDL_PROP_TEXTURE_HEIGHT_NUMBER "SDL.texture.height"
|
|
#define SDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT "SDL.texture.SDR_white_point"
|
|
#define SDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT "SDL.texture.HDR_headroom"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER "SDL.texture.d3d11.texture"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER "SDL.texture.d3d11.texture_u"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER "SDL.texture.d3d11.texture_v"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER "SDL.texture.d3d12.texture"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER "SDL.texture.d3d12.texture_u"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER "SDL.texture.d3d12.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER "SDL.texture.opengl.texture"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.opengl.texture_uv"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.opengl.texture_u"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.opengl.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER "SDL.texture.opengl.target"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT "SDL.texture.opengl.tex_w"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT "SDL.texture.opengl.tex_h"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.opengles2.texture"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.opengles2.texture_uv"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.opengles2.texture_u"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.opengles2.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER "SDL.texture.opengles2.target"
|
|
#define SDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER "SDL.texture.vulkan.texture"
|
|
|
|
/**
|
|
* Get the renderer that created an SDL_Texture.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \returns a pointer to the SDL_Renderer that created the texture, or NULL on
|
|
* failure; call SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_GetRendererFromTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Get the size of a texture, as floating point values.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param w a pointer filled in with the width of the texture in pixels. This
|
|
* argument can be NULL if you don't need this information.
|
|
* \param h a pointer filled in with the height of the texture in pixels. This
|
|
* argument can be NULL if you don't need this information.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureSize(SDL_Texture *texture, float *w, float *h);
|
|
|
|
/**
|
|
* Set an additional color value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation each source color
|
|
* channel is modulated by the appropriate color value according to the
|
|
* following formula:
|
|
*
|
|
* `srcC = srcC * (color / 255)`
|
|
*
|
|
* Color modulation is not always supported by the renderer; it will return
|
|
* false if color modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param r the red color value multiplied into copy operations.
|
|
* \param g the green color value multiplied into copy operations.
|
|
* \param b the blue color value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureAlphaMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b);
|
|
|
|
|
|
/**
|
|
* Set an additional color value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation each source color
|
|
* channel is modulated by the appropriate color value according to the
|
|
* following formula:
|
|
*
|
|
* `srcC = srcC * color`
|
|
*
|
|
* Color modulation is not always supported by the renderer; it will return
|
|
* false if color modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param r the red color value multiplied into copy operations.
|
|
* \param g the green color value multiplied into copy operations.
|
|
* \param b the blue color value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureColorModFloat(SDL_Texture *texture, float r, float g, float b);
|
|
|
|
|
|
/**
|
|
* Get the additional color value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param r a pointer filled in with the current red color value.
|
|
* \param g a pointer filled in with the current green color value.
|
|
* \param b a pointer filled in with the current blue color value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureColorMod(SDL_Texture *texture, Uint8 *r, Uint8 *g, Uint8 *b);
|
|
|
|
/**
|
|
* Get the additional color value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param r a pointer filled in with the current red color value.
|
|
* \param g a pointer filled in with the current green color value.
|
|
* \param b a pointer filled in with the current blue color value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureColorModFloat(SDL_Texture *texture, float *r, float *g, float *b);
|
|
|
|
/**
|
|
* Set an additional alpha value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation the source alpha
|
|
* value is modulated by this alpha value according to the following formula:
|
|
*
|
|
* `srcA = srcA * (alpha / 255)`
|
|
*
|
|
* Alpha modulation is not always supported by the renderer; it will return
|
|
* false if alpha modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param alpha the source alpha value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha);
|
|
|
|
/**
|
|
* Set an additional alpha value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation the source alpha
|
|
* value is modulated by this alpha value according to the following formula:
|
|
*
|
|
* `srcA = srcA * alpha`
|
|
*
|
|
* Alpha modulation is not always supported by the renderer; it will return
|
|
* false if alpha modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param alpha the source alpha value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureAlphaMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureAlphaModFloat(SDL_Texture *texture, float alpha);
|
|
|
|
/**
|
|
* Get the additional alpha value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param alpha a pointer filled in with the current alpha value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureAlphaMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureAlphaMod(SDL_Texture *texture, Uint8 *alpha);
|
|
|
|
/**
|
|
* Get the additional alpha value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param alpha a pointer filled in with the current alpha value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureAlphaModFloat(SDL_Texture *texture, float *alpha);
|
|
|
|
/**
|
|
* Set the blend mode for a texture, used by SDL_RenderTexture().
|
|
*
|
|
* If the blend mode is not supported, the closest supported mode is chosen
|
|
* and this function returns false.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param blendMode the SDL_BlendMode to use for texture blending.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode);
|
|
|
|
/**
|
|
* Get the blend mode used for texture copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param blendMode a pointer filled in with the current SDL_BlendMode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetTextureBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode);
|
|
|
|
/**
|
|
* Set the scale mode used for texture scale operations.
|
|
*
|
|
* The default texture scale mode is SDL_SCALEMODE_LINEAR.
|
|
*
|
|
* If the scale mode is not supported, the closest supported mode is chosen.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param scaleMode the SDL_ScaleMode to use for texture scaling.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode);
|
|
|
|
/**
|
|
* Get the scale mode used for texture scale operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param scaleMode a pointer filled in with the current scale mode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode);
|
|
|
|
/**
|
|
* Update the given texture rectangle with new pixel data.
|
|
*
|
|
* The pixel data must be in the pixel format of the texture, which can be
|
|
* queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
|
|
*
|
|
* This is a fairly slow function, intended for use with static textures that
|
|
* do not change often.
|
|
*
|
|
* If the texture is intended to be updated often, it is preferred to create
|
|
* the texture as streaming and use the locking functions referenced below.
|
|
* While this function will work with streaming textures, for optimization
|
|
* reasons you may not get the pixels back if you lock the texture afterward.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect an SDL_Rect structure representing the area to update, or NULL
|
|
* to update the entire texture.
|
|
* \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.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
* \sa SDL_UnlockTexture
|
|
* \sa SDL_UpdateNVTexture
|
|
* \sa SDL_UpdateYUVTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateTexture(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch);
|
|
|
|
/**
|
|
* Update a rectangle within a planar YV12 or IYUV texture with new pixel
|
|
* data.
|
|
*
|
|
* You can use SDL_UpdateTexture() as long as your pixel data is a contiguous
|
|
* block of Y and U/V planes in the proper order, but this function is
|
|
* available if your pixel data is not contiguous.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect a pointer to the rectangle of pixels to update, or NULL to
|
|
* update the entire texture.
|
|
* \param Yplane the raw pixel data for the Y plane.
|
|
* \param Ypitch the number of bytes between rows of pixel data for the Y
|
|
* plane.
|
|
* \param Uplane the raw pixel data for the U plane.
|
|
* \param Upitch the number of bytes between rows of pixel data for the U
|
|
* plane.
|
|
* \param Vplane the raw pixel data for the V plane.
|
|
* \param Vpitch the number of bytes between rows of pixel data for the V
|
|
* plane.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_UpdateNVTexture
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateYUVTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
const Uint8 *Yplane, int Ypitch,
|
|
const Uint8 *Uplane, int Upitch,
|
|
const Uint8 *Vplane, int Vpitch);
|
|
|
|
/**
|
|
* Update a rectangle within a planar NV12 or NV21 texture with new pixels.
|
|
*
|
|
* You can use SDL_UpdateTexture() as long as your pixel data is a contiguous
|
|
* block of NV12/21 planes in the proper order, but this function is available
|
|
* if your pixel data is not contiguous.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect a pointer to the rectangle of pixels to update, or NULL to
|
|
* update the entire texture.
|
|
* \param Yplane the raw pixel data for the Y plane.
|
|
* \param Ypitch the number of bytes between rows of pixel data for the Y
|
|
* plane.
|
|
* \param UVplane the raw pixel data for the UV plane.
|
|
* \param UVpitch the number of bytes between rows of pixel data for the UV
|
|
* plane.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_UpdateTexture
|
|
* \sa SDL_UpdateYUVTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateNVTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
const Uint8 *Yplane, int Ypitch,
|
|
const Uint8 *UVplane, int UVpitch);
|
|
|
|
/**
|
|
* Lock a portion of the texture for **write-only** pixel access.
|
|
*
|
|
* As an optimization, the pixels made available for editing don't necessarily
|
|
* contain the old texture data. This is a write-only operation, and if you
|
|
* need to keep a copy of the texture data you should do that at the
|
|
* application level.
|
|
*
|
|
* You must use SDL_UnlockTexture() to unlock the pixels and apply any
|
|
* changes.
|
|
*
|
|
* \param texture the texture to lock for access, which was created with
|
|
* `SDL_TEXTUREACCESS_STREAMING`.
|
|
* \param rect an SDL_Rect structure representing the area to lock for access;
|
|
* NULL to lock the entire texture.
|
|
* \param pixels this is filled in with a pointer to the locked pixels,
|
|
* appropriately offset by the locked area.
|
|
* \param pitch this is filled in with the pitch of the locked pixels; the
|
|
* pitch is the length of one row in bytes.
|
|
* \returns true on success or false if the texture is not valid or was not
|
|
* created with `SDL_TEXTUREACCESS_STREAMING`; call SDL_GetError()
|
|
* for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_LockTextureToSurface
|
|
* \sa SDL_UnlockTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_LockTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
void **pixels, int *pitch);
|
|
|
|
/**
|
|
* Lock a portion of the texture for **write-only** pixel access, and expose
|
|
* it as a SDL surface.
|
|
*
|
|
* Besides providing an SDL_Surface instead of raw pixel data, this function
|
|
* operates like SDL_LockTexture.
|
|
*
|
|
* As an optimization, the pixels made available for editing don't necessarily
|
|
* contain the old texture data. This is a write-only operation, and if you
|
|
* need to keep a copy of the texture data you should do that at the
|
|
* application level.
|
|
*
|
|
* You must use SDL_UnlockTexture() to unlock the pixels and apply any
|
|
* changes.
|
|
*
|
|
* The returned surface is freed internally after calling SDL_UnlockTexture()
|
|
* or SDL_DestroyTexture(). The caller should not free it.
|
|
*
|
|
* \param texture the texture to lock for access, which must be created with
|
|
* `SDL_TEXTUREACCESS_STREAMING`.
|
|
* \param rect a pointer to the rectangle to lock for access. If the rect is
|
|
* NULL, the entire texture will be locked.
|
|
* \param surface this is filled in with an SDL surface representing the
|
|
* locked area.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
* \sa SDL_UnlockTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect, SDL_Surface **surface);
|
|
|
|
/**
|
|
* Unlock a texture, uploading the changes to video memory, if needed.
|
|
*
|
|
* **Warning**: Please note that SDL_LockTexture() is intended to be
|
|
* write-only; it will not guarantee the previous contents of the texture will
|
|
* be provided. You must fully initialize any area of a texture that you lock
|
|
* before unlocking it, as the pixels might otherwise be uninitialized memory.
|
|
*
|
|
* Which is to say: locking and immediately unlocking a texture can result in
|
|
* corrupted textures, depending on the renderer in use.
|
|
*
|
|
* \param texture a texture locked by SDL_LockTexture().
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Set a texture as the current rendering target.
|
|
*
|
|
* The default render target is the window for which the renderer was created.
|
|
* To stop rendering to a texture and render to the window again, call this
|
|
* function with a NULL `texture`.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture the targeted texture, which must be created with the
|
|
* `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the
|
|
* window instead of a texture.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderTarget
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture);
|
|
|
|
/**
|
|
* Get the current render target.
|
|
*
|
|
* The default render target is the window for which the renderer was created,
|
|
* and is reported a NULL here.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns the current render target or NULL for the default render target.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderTarget
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Set a device independent resolution and presentation mode for rendering.
|
|
*
|
|
* This function sets the width and height of the logical rendering output.
|
|
* The renderer will act as if the window is always the requested dimensions,
|
|
* scaling to the actual window resolution as necessary.
|
|
*
|
|
* This can be useful for games that expect a fixed size, but would like to
|
|
* scale the output to whatever is available, regardless of how a user resizes
|
|
* a window, or if the display is high DPI.
|
|
*
|
|
* You can disable logical coordinates by setting the mode to
|
|
* SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel
|
|
* resolution of the output window; it is safe to toggle logical presentation
|
|
* during the rendering of a frame: perhaps most of the rendering is done to
|
|
* specific dimensions but to make fonts look sharp, the app turns off logical
|
|
* presentation while drawing text.
|
|
*
|
|
* Letterboxing will only happen if logical presentation is enabled during
|
|
* SDL_RenderPresent; be sure to reenable it first if you were using it.
|
|
*
|
|
* You can convert coordinates in an event into rendering coordinates using
|
|
* SDL_ConvertEventToRenderCoordinates().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w the width of the logical resolution.
|
|
* \param h the height of the logical resolution.
|
|
* \param mode the presentation mode used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_ConvertEventToRenderCoordinates
|
|
* \sa SDL_GetRenderLogicalPresentation
|
|
* \sa SDL_GetRenderLogicalPresentationRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderLogicalPresentation(SDL_Renderer *renderer, int w, int h, SDL_RendererLogicalPresentation mode);
|
|
|
|
/**
|
|
* Get device independent resolution and presentation mode for rendering.
|
|
*
|
|
* This function gets the width and height of the logical rendering output, or
|
|
* the output size in pixels if a logical resolution is not enabled.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w an int to be filled with the width.
|
|
* \param h an int to be filled with the height.
|
|
* \param mode the presentation mode used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderLogicalPresentation(SDL_Renderer *renderer, int *w, int *h, SDL_RendererLogicalPresentation *mode);
|
|
|
|
/**
|
|
* Get the final presentation rectangle for rendering.
|
|
*
|
|
* This function returns the calculated rectangle used for logical
|
|
* presentation, based on the presentation mode and output size. If logical
|
|
* presentation is disabled, it will fill the rectangle with the output size,
|
|
* in pixels.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect a pointer filled in with the final presentation rectangle, may
|
|
* be NULL.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderLogicalPresentationRect(SDL_Renderer *renderer, SDL_FRect *rect);
|
|
|
|
/**
|
|
* Get a point in render coordinates when given a point in window coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param window_x the x coordinate in window coordinates.
|
|
* \param window_y the y coordinate in window coordinates.
|
|
* \param x a pointer filled with the x coordinate in render coordinates.
|
|
* \param y a pointer filled with the y coordinate in render coordinates.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
* \sa SDL_SetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderCoordinatesFromWindow(SDL_Renderer *renderer, float window_x, float window_y, float *x, float *y);
|
|
|
|
/**
|
|
* Get a point in window coordinates when given a point in render coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param x the x coordinate in render coordinates.
|
|
* \param y the y coordinate in render coordinates.
|
|
* \param window_x a pointer filled with the x coordinate in window
|
|
* coordinates.
|
|
* \param window_y a pointer filled with the y coordinate in window
|
|
* coordinates.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
* \sa SDL_SetRenderScale
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderCoordinatesToWindow(SDL_Renderer *renderer, float x, float y, float *window_x, float *window_y);
|
|
|
|
/**
|
|
* Convert the coordinates in an event to render coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* Various event types are converted with this function: mouse, touch, pen,
|
|
* etc.
|
|
*
|
|
* Touch coordinates are converted from normalized coordinates in the window
|
|
* to non-normalized rendering coordinates.
|
|
*
|
|
* Relative mouse coordinates (xrel and yrel event fields) are _also_
|
|
* converted. Applications that do not want these fields converted should use
|
|
* SDL_RenderCoordinatesFromWindow() on the specific event fields instead of
|
|
* converting the entire event structure.
|
|
*
|
|
* Once converted, coordinates may be outside the rendering area.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param event the event to modify.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderCoordinatesFromWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_ConvertEventToRenderCoordinates(SDL_Renderer *renderer, SDL_Event *event);
|
|
|
|
/**
|
|
* Set the drawing area for rendering on the current target.
|
|
*
|
|
* Drawing will clip to this area (separately from any clipping done with
|
|
* SDL_SetRenderClipRect), and the top left of the area will become coordinate
|
|
* (0, 0) for future drawing commands.
|
|
*
|
|
* The area's width and height must be >= 0.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect the SDL_Rect structure representing the drawing area, or NULL
|
|
* to set the viewport to the entire target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderViewport
|
|
* \sa SDL_RenderViewportSet
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderViewport(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the drawing area for the current target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure filled in with the current drawing area.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderViewportSet
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderViewport(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Return whether an explicit rectangle was set as the viewport.
|
|
*
|
|
* This is useful if you're saving and restoring the viewport and want to know
|
|
* whether you should restore a specific rectangle or NULL. Note that the
|
|
* viewport is always reset when changing rendering targets.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true if the viewport was set to a specific rectangle, or false if
|
|
* it was set to NULL (the entire target).
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderViewport
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderViewportSet(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the safe area for rendering within the current viewport.
|
|
*
|
|
* Some devices have portions of the screen which are partially obscured or
|
|
* not interactive, possibly due to on-screen controls, curved edges, camera
|
|
* notches, TV overscan, etc. This function provides the area of the current
|
|
* viewport which is safe to have interactible content. You should continue
|
|
* rendering into the rest of the render target, but it should not contain
|
|
* visually important or interactible content.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect a pointer filled in with the area that is safe for interactive
|
|
* content.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderSafeArea(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Set the clip rectangle for rendering on the specified target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure representing the clip area, relative to
|
|
* the viewport, or NULL to disable clipping.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderClipRect
|
|
* \sa SDL_RenderClipEnabled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderClipRect(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the clip rectangle for the current target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure filled in with the current clipping area
|
|
* or an empty rectangle if clipping is disabled.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderClipEnabled
|
|
* \sa SDL_SetRenderClipRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderClipRect(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get whether clipping is enabled on the given renderer.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true if clipping is enabled or false if not; call SDL_GetError()
|
|
* for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderClipRect
|
|
* \sa SDL_SetRenderClipRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderClipEnabled(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Set the drawing scale for rendering on the current target.
|
|
*
|
|
* The drawing coordinates are scaled by the x/y scaling factors before they
|
|
* are used by the renderer. This allows resolution independent drawing with a
|
|
* single coordinate system.
|
|
*
|
|
* If this results in scaling or subpixel drawing by the rendering backend, it
|
|
* will be handled using the appropriate quality hints. For best results use
|
|
* integer scaling factors.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scaleX the horizontal scaling factor.
|
|
* \param scaleY the vertical scaling factor.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderScale(SDL_Renderer *renderer, float scaleX, float scaleY);
|
|
|
|
/**
|
|
* Get the drawing scale for the current target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scaleX a pointer filled in with the horizontal scaling factor.
|
|
* \param scaleY a pointer filled in with the vertical scaling factor.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderScale(SDL_Renderer *renderer, float *scaleX, float *scaleY);
|
|
|
|
/**
|
|
* Set the color used for drawing operations.
|
|
*
|
|
* Set the color for drawing or filling rectangles, lines, and points, and for
|
|
* SDL_RenderClear().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r the red value used to draw on the rendering target.
|
|
* \param g the green value used to draw on the rendering target.
|
|
* \param b the blue value used to draw on the rendering target.
|
|
* \param a the alpha value used to draw on the rendering target; usually
|
|
* `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to
|
|
* specify how the alpha channel is used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderDrawColor
|
|
* \sa SDL_SetRenderDrawColorFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawColor(SDL_Renderer *renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
|
|
|
|
/**
|
|
* Set the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* Set the color for drawing or filling rectangles, lines, and points, and for
|
|
* SDL_RenderClear().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r the red value used to draw on the rendering target.
|
|
* \param g the green value used to draw on the rendering target.
|
|
* \param b the blue value used to draw on the rendering target.
|
|
* \param a the alpha value used to draw on the rendering target. Use
|
|
* SDL_SetRenderDrawBlendMode to specify how the alpha channel is
|
|
* used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderDrawColorFloat
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawColorFloat(SDL_Renderer *renderer, float r, float g, float b, float a);
|
|
|
|
/**
|
|
* Get the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r a pointer filled in with the red value used to draw on the
|
|
* rendering target.
|
|
* \param g a pointer filled in with the green value used to draw on the
|
|
* rendering target.
|
|
* \param b a pointer filled in with the blue value used to draw on the
|
|
* rendering target.
|
|
* \param a a pointer filled in with the alpha value used to draw on the
|
|
* rendering target; usually `SDL_ALPHA_OPAQUE` (255).
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderDrawColorFloat
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawColor(SDL_Renderer *renderer, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a);
|
|
|
|
/**
|
|
* Get the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r a pointer filled in with the red value used to draw on the
|
|
* rendering target.
|
|
* \param g a pointer filled in with the green value used to draw on the
|
|
* rendering target.
|
|
* \param b a pointer filled in with the blue value used to draw on the
|
|
* rendering target.
|
|
* \param a a pointer filled in with the alpha value used to draw on the
|
|
* rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderDrawColorFloat
|
|
* \sa SDL_GetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawColorFloat(SDL_Renderer *renderer, float *r, float *g, float *b, float *a);
|
|
|
|
/**
|
|
* Set the color scale used for render operations.
|
|
*
|
|
* The color scale is an additional scale multiplied into the pixel color
|
|
* value while rendering. This can be used to adjust the brightness of colors
|
|
* during HDR rendering, or changing HDR video brightness when playing on an
|
|
* SDR display.
|
|
*
|
|
* The color scale does not affect the alpha channel, only the color
|
|
* brightness.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scale the color scale value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderColorScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale);
|
|
|
|
/**
|
|
* Get the color scale used for render operations.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scale a pointer filled in with the current color scale value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderColorScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale);
|
|
|
|
/**
|
|
* Set the blend mode used for drawing operations (Fill and Line).
|
|
*
|
|
* If the blend mode is not supported, the closest supported mode is chosen.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param blendMode the SDL_BlendMode to use for blending.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderDrawBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode);
|
|
|
|
/**
|
|
* Get the blend mode used for drawing operations.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param blendMode a pointer filled in with the current SDL_BlendMode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderDrawBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode);
|
|
|
|
/**
|
|
* Clear the current rendering target with the drawing color.
|
|
*
|
|
* This function clears the entire rendering target, ignoring the viewport and
|
|
* the clip rectangle. Note, that clearing will also set/fill all pixels of
|
|
* the rendering target to current renderer draw color, so make sure to invoke
|
|
* SDL_SetRenderDrawColor() when needed.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderClear(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Draw a point on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a point.
|
|
* \param x the x coordinate of the point.
|
|
* \param y the y coordinate of the point.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderPoints
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPoint(SDL_Renderer *renderer, float x, float y);
|
|
|
|
/**
|
|
* Draw multiple points on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple points.
|
|
* \param points the points to draw.
|
|
* \param count the number of points to draw.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderPoint
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int count);
|
|
|
|
/**
|
|
* Draw a line on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a line.
|
|
* \param x1 the x coordinate of the start point.
|
|
* \param y1 the y coordinate of the start point.
|
|
* \param x2 the x coordinate of the end point.
|
|
* \param y2 the y coordinate of the end point.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderLines
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderLine(SDL_Renderer *renderer, float x1, float y1, float x2, float y2);
|
|
|
|
/**
|
|
* Draw a series of connected lines on the current rendering target at
|
|
* subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple lines.
|
|
* \param points the points along the lines.
|
|
* \param count the number of points, drawing count-1 lines.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderLine
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderLines(SDL_Renderer *renderer, const SDL_FPoint *points, int count);
|
|
|
|
/**
|
|
* Draw a rectangle on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a rectangle.
|
|
* \param rect a pointer to the destination rectangle, or NULL to outline the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderRects
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderRect(SDL_Renderer *renderer, const SDL_FRect *rect);
|
|
|
|
/**
|
|
* Draw some number of rectangles on the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple rectangles.
|
|
* \param rects a pointer to an array of destination rectangles.
|
|
* \param count the number of rectangles.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count);
|
|
|
|
/**
|
|
* Fill a rectangle on the current rendering target with the drawing color at
|
|
* subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should fill a rectangle.
|
|
* \param rect a pointer to the destination rectangle, or NULL for the entire
|
|
* rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderFillRects
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderFillRect(SDL_Renderer *renderer, const SDL_FRect *rect);
|
|
|
|
/**
|
|
* Fill some number of rectangles on the current rendering target with the
|
|
* drawing color at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should fill multiple rectangles.
|
|
* \param rects a pointer to an array of destination rectangles.
|
|
* \param count the number of rectangles.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderFillRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count);
|
|
|
|
/**
|
|
* Copy a portion of the texture to the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderTextureRotated
|
|
* \sa SDL_RenderTextureTiled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Copy a portion of the source texture to the current rendering target, with
|
|
* rotation and flipping, at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \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 flip an SDL_FlipMode value stating which flipping actions should be
|
|
* performed on the texture.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureRotated(SDL_Renderer *renderer, SDL_Texture *texture,
|
|
const SDL_FRect *srcrect, const SDL_FRect *dstrect,
|
|
double angle, const SDL_FPoint *center,
|
|
SDL_FlipMode flip);
|
|
|
|
/**
|
|
* Copy a portion of the source texture to the current rendering target, with
|
|
* affine transform, at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param origin a pointer to a point indicating where the top-left corner of
|
|
* srcrect should be mapped to, or NULL for the rendering
|
|
* target's origin.
|
|
* \param right a pointer to a point indicating where the top-right corner of
|
|
* srcrect should be mapped to, or NULL for the rendering
|
|
* target's top-right corner.
|
|
* \param down a pointer to a point indicating where the bottom-left corner of
|
|
* srcrect should be mapped to, or NULL for the rendering target's
|
|
* bottom-left corner.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety You may only call this function from the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture,
|
|
const SDL_FRect *srcrect, const SDL_FPoint *origin,
|
|
const SDL_FPoint *right, const SDL_FPoint *down);
|
|
|
|
/**
|
|
* Tile a portion of the texture to the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* The pixels in `srcrect` will be repeated as many times as needed to
|
|
* completely fill `dstrect`.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param scale the scale used to transform srcrect into the destination
|
|
* rectangle, e.g. a 32x32 texture with a scale of 2 would fill
|
|
* 64x64 tiles.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Perform a scaled copy using the 9-grid algorithm to the current rendering
|
|
* target at subpixel precision.
|
|
*
|
|
* The pixels in the texture are split into a 3x3 grid, using the different
|
|
* corner sizes for each corner, and the sides and center making up the
|
|
* remaining pixels. The corners are then scaled using `scale` and fit into
|
|
* the corners of the destination rectangle. The sides and center are then
|
|
* stretched into place to cover the remaining destination rectangle.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect the SDL_Rect structure representing the rectangle to be used
|
|
* for the 9-grid, or NULL to use the entire texture.
|
|
* \param left_width the width, in pixels, of the left corners in `srcrect`.
|
|
* \param right_width the width, in pixels, of the right corners in `srcrect`.
|
|
* \param top_height the height, in pixels, of the top corners in `srcrect`.
|
|
* \param bottom_height the height, in pixels, of the bottom corners in
|
|
* `srcrect`.
|
|
* \param scale the scale used to transform the corner of `srcrect` into the
|
|
* corner of `dstrect`, or 0.0f for an unscaled copy.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9Grid(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Render a list of triangles, optionally using a texture and indices into the
|
|
* vertex array Color and alpha modulation is done per vertex
|
|
* (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture (optional) The SDL texture to use.
|
|
* \param vertices vertices.
|
|
* \param num_vertices number of vertices.
|
|
* \param indices (optional) An array of integer indices into the 'vertices'
|
|
* array, if NULL all vertices will be rendered in sequential
|
|
* order.
|
|
* \param num_indices number of indices.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderGeometryRaw
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer,
|
|
SDL_Texture *texture,
|
|
const SDL_Vertex *vertices, int num_vertices,
|
|
const int *indices, int num_indices);
|
|
|
|
/**
|
|
* Render a list of triangles, optionally using a texture and indices into the
|
|
* vertex arrays Color and alpha modulation is done per vertex
|
|
* (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture (optional) The SDL texture to use.
|
|
* \param xy vertex positions.
|
|
* \param xy_stride byte size to move from one element to the next element.
|
|
* \param color vertex colors (as SDL_FColor).
|
|
* \param color_stride byte size to move from one element to the next element.
|
|
* \param uv vertex normalized texture coordinates.
|
|
* \param uv_stride byte size to move from one element to the next element.
|
|
* \param num_vertices number of vertices.
|
|
* \param indices (optional) An array of indices into the 'vertices' arrays,
|
|
* if NULL all vertices will be rendered in sequential order.
|
|
* \param num_indices number of indices.
|
|
* \param size_indices index size: 1 (byte), 2 (short), 4 (int).
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_RenderGeometry
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer,
|
|
SDL_Texture *texture,
|
|
const float *xy, int xy_stride,
|
|
const SDL_FColor *color, int color_stride,
|
|
const float *uv, int uv_stride,
|
|
int num_vertices,
|
|
const void *indices, int num_indices, int size_indices);
|
|
|
|
/**
|
|
* Read pixels from the current rendering target.
|
|
*
|
|
* The returned surface should be freed with SDL_DestroySurface()
|
|
*
|
|
* **WARNING**: This is a very slow operation, and should not be used
|
|
* frequently. If you're using this on the main rendering target, it should be
|
|
* called after rendering and before SDL_RenderPresent().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure representing the area in pixels relative
|
|
* to the to current viewport, or NULL for the entire viewport.
|
|
* \returns a new SDL_Surface on success or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Update the screen with any rendering performed since the previous call.
|
|
*
|
|
* SDL's rendering functions operate on a backbuffer; that is, calling a
|
|
* rendering function such as SDL_RenderLine() does not directly put a line on
|
|
* the screen, but rather updates the backbuffer. As such, you compose your
|
|
* entire scene and *present* the composed backbuffer to the screen as a
|
|
* complete picture.
|
|
*
|
|
* Therefore, when using SDL's rendering API, one does all drawing intended
|
|
* for the frame, and then calls this function once per frame to present the
|
|
* final drawing to the user.
|
|
*
|
|
* The backbuffer should be considered invalidated after each present; do not
|
|
* assume that previous contents will exist between frames. You are strongly
|
|
* encouraged to call SDL_RenderClear() to initialize the backbuffer before
|
|
* starting each new frame's drawing, even if you plan to overwrite every
|
|
* pixel.
|
|
*
|
|
* Please note, that in case of rendering to a texture - there is **no need**
|
|
* to call `SDL_RenderPresent` after drawing needed objects to a texture, and
|
|
* should not be done; you are only required to change back the rendering
|
|
* target to default via `SDL_SetRenderTarget(renderer, NULL)` afterwards, as
|
|
* textures by themselves do not have a concept of backbuffers. Calling
|
|
* SDL_RenderPresent while rendering to a texture will still update the screen
|
|
* with any current drawing that has been done _to the window itself_.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_RenderClear
|
|
* \sa SDL_RenderFillRect
|
|
* \sa SDL_RenderFillRects
|
|
* \sa SDL_RenderLine
|
|
* \sa SDL_RenderLines
|
|
* \sa SDL_RenderPoint
|
|
* \sa SDL_RenderPoints
|
|
* \sa SDL_RenderRect
|
|
* \sa SDL_RenderRects
|
|
* \sa SDL_SetRenderDrawBlendMode
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPresent(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Destroy the specified texture.
|
|
*
|
|
* Passing NULL or an otherwise invalid texture will set the SDL error message
|
|
* to "Invalid texture".
|
|
*
|
|
* \param texture the texture to destroy.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Destroy the rendering context for a window and free all associated
|
|
* textures.
|
|
*
|
|
* This should be called before destroying the associated window.
|
|
*
|
|
* \param renderer the rendering context.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Force the rendering context to flush any pending commands and state.
|
|
*
|
|
* You do not need to (and in fact, shouldn't) call this function unless you
|
|
* are planning to call into OpenGL/Direct3D/Metal/whatever directly, in
|
|
* addition to using an SDL_Renderer.
|
|
*
|
|
* This is for a very-specific case: if you are using SDL's render API, and
|
|
* you plan to make OpenGL/D3D/whatever calls in addition to SDL render API
|
|
* calls. If this applies, you should call this function between calls to
|
|
* SDL's render API and the low-level API you're using in cooperation.
|
|
*
|
|
* In all other cases, you can ignore this function.
|
|
*
|
|
* This call makes SDL flush any pending rendering work it was queueing up to
|
|
* do later in a single batch, and marks any internal cached state as invalid,
|
|
* so it'll prepare all its state again later, from scratch.
|
|
*
|
|
* This means you do not need to save state in your rendering code to protect
|
|
* the SDL renderer. However, there lots of arbitrary pieces of Direct3D and
|
|
* OpenGL state that can confuse things; you should use your best judgment and
|
|
* be prepared to make changes if specific state needs to be protected.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_FlushRenderer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the CAMetalLayer associated with the given Metal renderer.
|
|
*
|
|
* This function returns `void *`, so SDL doesn't have to include Metal's
|
|
* headers, but it can be safely cast to a `CAMetalLayer *`.
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a
|
|
* Metal renderer.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderMetalCommandEncoder
|
|
*/
|
|
extern SDL_DECLSPEC void * SDLCALL SDL_GetRenderMetalLayer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the Metal command encoder for the current frame.
|
|
*
|
|
* This function returns `void *`, so SDL doesn't have to include Metal's
|
|
* headers, but it can be safely cast to an `id<MTLRenderCommandEncoder>`.
|
|
*
|
|
* This will return NULL if Metal refuses to give SDL a drawable to render to,
|
|
* which might happen if the window is hidden/minimized/offscreen. This
|
|
* doesn't apply to command encoders for render targets, just the window's
|
|
* backbuffer. Check your return values!
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns an `id<MTLRenderCommandEncoder>` on success, or NULL if the
|
|
* renderer isn't a Metal renderer or there was an error.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderMetalLayer
|
|
*/
|
|
extern SDL_DECLSPEC void * SDLCALL SDL_GetRenderMetalCommandEncoder(SDL_Renderer *renderer);
|
|
|
|
|
|
/**
|
|
* Add a set of synchronization semaphores for the current frame.
|
|
*
|
|
* The Vulkan renderer will wait for `wait_semaphore` before submitting
|
|
* rendering commands and signal `signal_semaphore` after rendering commands
|
|
* are complete for this frame.
|
|
*
|
|
* This should be called each frame that you want semaphore synchronization.
|
|
* The Vulkan renderer may have multiple frames in flight on the GPU, so you
|
|
* should have multiple semaphores that are used for synchronization. Querying
|
|
* SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the
|
|
* maximum number of semaphores you'll need.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param wait_stage_mask the VkPipelineStageFlags for the wait.
|
|
* \param wait_semaphore a VkSempahore to wait on before rendering the current
|
|
* frame, or 0 if not needed.
|
|
* \param signal_semaphore a VkSempahore that SDL will signal when rendering
|
|
* for the current frame is complete, or 0 if not
|
|
* needed.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety It is **NOT** safe to call this function from two threads at
|
|
* once.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_AddVulkanRenderSemaphores(SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore);
|
|
|
|
/**
|
|
* Toggle VSync of the given renderer.
|
|
*
|
|
* When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
|
|
*
|
|
* The `vsync` parameter can be 1 to synchronize present with every vertical
|
|
* refresh, 2 to synchronize present with every second vertical refresh, etc.,
|
|
* SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or
|
|
* SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by
|
|
* every driver, so you should check the return value to see whether the
|
|
* requested setting is supported.
|
|
*
|
|
* \param renderer the renderer to toggle.
|
|
* \param vsync the vertical refresh sync interval.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetRenderVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderVSync(SDL_Renderer *renderer, int vsync);
|
|
|
|
#define SDL_RENDERER_VSYNC_DISABLED 0
|
|
#define SDL_RENDERER_VSYNC_ADAPTIVE (-1)
|
|
|
|
/**
|
|
* Get VSync of the given renderer.
|
|
*
|
|
* \param renderer the renderer to toggle.
|
|
* \param vsync an int filled with the current vertical refresh sync interval.
|
|
* See SDL_SetRenderVSync() for the meaning of the value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetRenderVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderVSync(SDL_Renderer *renderer, int *vsync);
|
|
|
|
/**
|
|
* The size, in pixels, of a single SDL_RenderDebugText() character.
|
|
*
|
|
* The font is monospaced and square, so this applies to all characters.
|
|
*
|
|
* \since This macro is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderDebugText
|
|
*/
|
|
#define SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE 8
|
|
|
|
/**
|
|
* Draw debug text to an SDL_Renderer.
|
|
*
|
|
* This function will render a string of text to an SDL_Renderer. Note that
|
|
* this is a convenience function for debugging, with severe limitations, and
|
|
* not intended to be used for production apps and games.
|
|
*
|
|
* Among these limitations:
|
|
*
|
|
* - It accepts UTF-8 strings, but will only renders ASCII characters.
|
|
* - It has a single, tiny size (8x8 pixels). One can use logical presentation
|
|
* or scaling to adjust it, but it will be blurry.
|
|
* - It uses a simple, hardcoded bitmap font. It does not allow different font
|
|
* selections and it does not support truetype, for proper scaling.
|
|
* - It does no word-wrapping and does not treat newline characters as a line
|
|
* break. If the text goes out of the window, it's gone.
|
|
*
|
|
* For serious text rendering, there are several good options, such as
|
|
* SDL_ttf, stb_truetype, or other external libraries.
|
|
*
|
|
* On first use, this will create an internal texture for rendering glyphs.
|
|
* This texture will live until the renderer is destroyed.
|
|
*
|
|
* The text is drawn in the color specified by SDL_SetRenderDrawColor().
|
|
*
|
|
* \param renderer the renderer which should draw a line of text.
|
|
* \param x the x coordinate where the top-left corner of the text will draw.
|
|
* \param y the y coordinate where the top-left corner of the text will draw.
|
|
* \param str the string to render.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.6.
|
|
*
|
|
* \sa SDL_RenderDebugTextFormat
|
|
* \sa SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugText(SDL_Renderer *renderer, float x, float y, const char *str);
|
|
|
|
/**
|
|
* Draw debug text to an SDL_Renderer.
|
|
*
|
|
* This function will render a printf()-style format string to a renderer.
|
|
* Note that this is a convinence function for debugging, with severe
|
|
* limitations, and is not intended to be used for production apps and games.
|
|
*
|
|
* For the full list of limitations and other useful information, see
|
|
* SDL_RenderDebugText.
|
|
*
|
|
* \param renderer the renderer which should draw the text.
|
|
* \param x the x coordinate where the top-left corner of the text will draw.
|
|
* \param y the y coordinate where the top-left corner of the text will draw.
|
|
* \param fmt the format string to draw.
|
|
* \param ... additional parameters matching % tokens in the `fmt` string, if
|
|
* any.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderDebugText
|
|
* \sa SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugTextFormat(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(4);
|
|
|
|
/* Ends C function definitions when using C++ */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#include <SDL3/SDL_close_code.h>
|
|
|
|
#endif /* SDL_render_h_ */
|