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
3279 lines
129 KiB
C
3279 lines
129 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.
|
|
*/
|
|
|
|
/**
|
|
* # CategoryVideo
|
|
*
|
|
* SDL's video subsystem is largely interested in abstracting window
|
|
* management from the underlying operating system. You can create windows,
|
|
* manage them in various ways, set them fullscreen, and get events when
|
|
* interesting things happen with them, such as the mouse or keyboard
|
|
* interacting with a window.
|
|
*
|
|
* The video subsystem is also interested in abstracting away some
|
|
* platform-specific differences in OpenGL: context creation, swapping
|
|
* buffers, etc. This may be crucial to your app, but also you are not
|
|
* required to use OpenGL at all. In fact, SDL can provide rendering to those
|
|
* windows as well, either with an easy-to-use
|
|
* [2D API](https://wiki.libsdl.org/SDL3/CategoryRender)
|
|
* or with a more-powerful
|
|
* [GPU API](https://wiki.libsdl.org/SDL3/CategoryGPU)
|
|
* . Of course, it can simply get out of your way and give you the window
|
|
* handles you need to use Vulkan, Direct3D, Metal, or whatever else you like
|
|
* directly, too.
|
|
*
|
|
* The video subsystem covers a lot of functionality, out of necessity, so it
|
|
* is worth perusing the list of functions just to see what's available, but
|
|
* most apps can get by with simply creating a window and listening for
|
|
* events, so start with SDL_CreateWindow() and SDL_PollEvent().
|
|
*/
|
|
|
|
#ifndef SDL_video_h_
|
|
#define SDL_video_h_
|
|
|
|
#include <SDL3/SDL_stdinc.h>
|
|
#include <SDL3/SDL_error.h>
|
|
#include <SDL3/SDL_pixels.h>
|
|
#include <SDL3/SDL_properties.h>
|
|
#include <SDL3/SDL_rect.h>
|
|
#include <SDL3/SDL_surface.h>
|
|
|
|
#include <SDL3/SDL_begin_code.h>
|
|
/* Set up for C function definitions, even when using C++ */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* This is a unique ID for a display for the time it is connected to the
|
|
* system, and is never reused for the lifetime of the application.
|
|
*
|
|
* If the display is disconnected and reconnected, it will get a new ID.
|
|
*
|
|
* The value 0 is an invalid ID.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_DisplayID;
|
|
|
|
/**
|
|
* This is a unique ID for a window.
|
|
*
|
|
* The value 0 is an invalid ID.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_WindowID;
|
|
|
|
/* Global video properties... */
|
|
|
|
/**
|
|
* The pointer to the global `wl_display` object used by the Wayland video
|
|
* backend.
|
|
*
|
|
* Can be set before the video subsystem is initialized to import an external
|
|
* `wl_display` object from an application or toolkit for use in SDL, or read
|
|
* after initialization to export the `wl_display` used by the Wayland video
|
|
* backend. Setting this property after the video subsystem has been
|
|
* initialized has no effect, and reading it when the video subsystem is
|
|
* uninitialized will either return the user provided value, if one was set
|
|
* prior to initialization, or NULL. See docs/README-wayland.md for more
|
|
* information.
|
|
*/
|
|
#define SDL_PROP_GLOBAL_VIDEO_WAYLAND_WL_DISPLAY_POINTER "SDL.video.wayland.wl_display"
|
|
|
|
/**
|
|
* System theme.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_SystemTheme
|
|
{
|
|
SDL_SYSTEM_THEME_UNKNOWN, /**< Unknown system theme */
|
|
SDL_SYSTEM_THEME_LIGHT, /**< Light colored system theme */
|
|
SDL_SYSTEM_THEME_DARK /**< Dark colored system theme */
|
|
} SDL_SystemTheme;
|
|
|
|
/**
|
|
* Internal display mode data.
|
|
*
|
|
* This lives as a field in SDL_DisplayMode, as opaque data.
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_DisplayMode
|
|
*/
|
|
typedef struct SDL_DisplayModeData SDL_DisplayModeData;
|
|
|
|
/**
|
|
* The structure that defines a display mode.
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetFullscreenDisplayModes
|
|
* \sa SDL_GetDesktopDisplayMode
|
|
* \sa SDL_GetCurrentDisplayMode
|
|
* \sa SDL_SetWindowFullscreenMode
|
|
* \sa SDL_GetWindowFullscreenMode
|
|
*/
|
|
typedef struct SDL_DisplayMode
|
|
{
|
|
SDL_DisplayID displayID; /**< the display this mode is associated with */
|
|
SDL_PixelFormat format; /**< pixel format */
|
|
int w; /**< width */
|
|
int h; /**< height */
|
|
float pixel_density; /**< scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels) */
|
|
float refresh_rate; /**< refresh rate (or 0.0f for unspecified) */
|
|
int refresh_rate_numerator; /**< precise refresh rate numerator (or 0 for unspecified) */
|
|
int refresh_rate_denominator; /**< precise refresh rate denominator */
|
|
|
|
SDL_DisplayModeData *internal; /**< Private */
|
|
|
|
} SDL_DisplayMode;
|
|
|
|
/**
|
|
* Display orientation values; the way a display is rotated.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_DisplayOrientation
|
|
{
|
|
SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */
|
|
SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */
|
|
SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */
|
|
SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */
|
|
SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */
|
|
} SDL_DisplayOrientation;
|
|
|
|
/**
|
|
* The struct used as an opaque handle to a window.
|
|
*
|
|
* \since This struct is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateWindow
|
|
*/
|
|
typedef struct SDL_Window SDL_Window;
|
|
|
|
/**
|
|
* The flags on a window.
|
|
*
|
|
* These cover a lot of true/false, or on/off, window state. Some of it is
|
|
* immutable after being set through SDL_CreateWindow(), some of it can be
|
|
* changed on existing windows by the app, and some of it might be altered by
|
|
* the user or system outside of the app's control.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetWindowFlags
|
|
*/
|
|
typedef Uint64 SDL_WindowFlags;
|
|
|
|
#define SDL_WINDOW_FULLSCREEN SDL_UINT64_C(0x0000000000000001) /**< window is in fullscreen mode */
|
|
#define SDL_WINDOW_OPENGL SDL_UINT64_C(0x0000000000000002) /**< window usable with OpenGL context */
|
|
#define SDL_WINDOW_OCCLUDED SDL_UINT64_C(0x0000000000000004) /**< window is occluded */
|
|
#define SDL_WINDOW_HIDDEN SDL_UINT64_C(0x0000000000000008) /**< window is neither mapped onto the desktop nor shown in the taskbar/dock/window list; SDL_ShowWindow() is required for it to become visible */
|
|
#define SDL_WINDOW_BORDERLESS SDL_UINT64_C(0x0000000000000010) /**< no window decoration */
|
|
#define SDL_WINDOW_RESIZABLE SDL_UINT64_C(0x0000000000000020) /**< window can be resized */
|
|
#define SDL_WINDOW_MINIMIZED SDL_UINT64_C(0x0000000000000040) /**< window is minimized */
|
|
#define SDL_WINDOW_MAXIMIZED SDL_UINT64_C(0x0000000000000080) /**< window is maximized */
|
|
#define SDL_WINDOW_MOUSE_GRABBED SDL_UINT64_C(0x0000000000000100) /**< window has grabbed mouse input */
|
|
#define SDL_WINDOW_INPUT_FOCUS SDL_UINT64_C(0x0000000000000200) /**< window has input focus */
|
|
#define SDL_WINDOW_MOUSE_FOCUS SDL_UINT64_C(0x0000000000000400) /**< window has mouse focus */
|
|
#define SDL_WINDOW_EXTERNAL SDL_UINT64_C(0x0000000000000800) /**< window not created by SDL */
|
|
#define SDL_WINDOW_MODAL SDL_UINT64_C(0x0000000000001000) /**< window is modal */
|
|
#define SDL_WINDOW_HIGH_PIXEL_DENSITY SDL_UINT64_C(0x0000000000002000) /**< window uses high pixel density back buffer if possible */
|
|
#define SDL_WINDOW_MOUSE_CAPTURE SDL_UINT64_C(0x0000000000004000) /**< window has mouse captured (unrelated to MOUSE_GRABBED) */
|
|
#define SDL_WINDOW_MOUSE_RELATIVE_MODE SDL_UINT64_C(0x0000000000008000) /**< window has relative mode enabled */
|
|
#define SDL_WINDOW_ALWAYS_ON_TOP SDL_UINT64_C(0x0000000000010000) /**< window should always be above others */
|
|
#define SDL_WINDOW_UTILITY SDL_UINT64_C(0x0000000000020000) /**< window should be treated as a utility window, not showing in the task bar and window list */
|
|
#define SDL_WINDOW_TOOLTIP SDL_UINT64_C(0x0000000000040000) /**< window should be treated as a tooltip and does not get mouse or keyboard focus, requires a parent window */
|
|
#define SDL_WINDOW_POPUP_MENU SDL_UINT64_C(0x0000000000080000) /**< window should be treated as a popup menu, requires a parent window */
|
|
#define SDL_WINDOW_KEYBOARD_GRABBED SDL_UINT64_C(0x0000000000100000) /**< window has grabbed keyboard input */
|
|
#define SDL_WINDOW_VULKAN SDL_UINT64_C(0x0000000010000000) /**< window usable for Vulkan surface */
|
|
#define SDL_WINDOW_METAL SDL_UINT64_C(0x0000000020000000) /**< window usable for Metal view */
|
|
#define SDL_WINDOW_TRANSPARENT SDL_UINT64_C(0x0000000040000000) /**< window with transparent buffer */
|
|
#define SDL_WINDOW_NOT_FOCUSABLE SDL_UINT64_C(0x0000000080000000) /**< window should not be focusable */
|
|
|
|
|
|
/**
|
|
* A magic value used with SDL_WINDOWPOS_UNDEFINED.
|
|
*
|
|
* Generally this macro isn't used directly, but rather through
|
|
* SDL_WINDOWPOS_UNDEFINED or SDL_WINDOWPOS_UNDEFINED_DISPLAY.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u
|
|
|
|
/**
|
|
* Used to indicate that you don't care what the window position is.
|
|
*
|
|
* If you _really_ don't care, SDL_WINDOWPOS_UNDEFINED is the same, but always
|
|
* uses the primary display instead of specifying one.
|
|
*
|
|
* \param X the SDL_DisplayID of the display to use.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X))
|
|
|
|
/**
|
|
* Used to indicate that you don't care what the window position/display is.
|
|
*
|
|
* This always uses the primary display.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0)
|
|
|
|
/**
|
|
* A macro to test if the window position is marked as "undefined."
|
|
*
|
|
* \param X the window position value.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_ISUNDEFINED(X) (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK)
|
|
|
|
/**
|
|
* A magic value used with SDL_WINDOWPOS_CENTERED.
|
|
*
|
|
* Generally this macro isn't used directly, but rather through
|
|
* SDL_WINDOWPOS_CENTERED or SDL_WINDOWPOS_CENTERED_DISPLAY.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u
|
|
|
|
/**
|
|
* Used to indicate that the window position should be centered.
|
|
*
|
|
* SDL_WINDOWPOS_CENTERED is the same, but always uses the primary display
|
|
* instead of specifying one.
|
|
*
|
|
* \param X the SDL_DisplayID of the display to use.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X))
|
|
|
|
/**
|
|
* Used to indicate that the window position should be centered.
|
|
*
|
|
* This always uses the primary display.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0)
|
|
|
|
/**
|
|
* A macro to test if the window position is marked as "centered."
|
|
*
|
|
* \param X the window position value.
|
|
*
|
|
* \since This macro is available since SDL 3.1.3.
|
|
*/
|
|
#define SDL_WINDOWPOS_ISCENTERED(X) \
|
|
(((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK)
|
|
|
|
|
|
/**
|
|
* Window flash operation.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_FlashOperation
|
|
{
|
|
SDL_FLASH_CANCEL, /**< Cancel any window flash state */
|
|
SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */
|
|
SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */
|
|
} SDL_FlashOperation;
|
|
|
|
/**
|
|
* An opaque handle to an OpenGL context.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GL_CreateContext
|
|
*/
|
|
typedef struct SDL_GLContextState *SDL_GLContext;
|
|
|
|
/**
|
|
* Opaque type for an EGL display.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef void *SDL_EGLDisplay;
|
|
|
|
/**
|
|
* Opaque type for an EGL config.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef void *SDL_EGLConfig;
|
|
|
|
/**
|
|
* Opaque type for an EGL surface.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef void *SDL_EGLSurface;
|
|
|
|
/**
|
|
* An EGL attribute, used when creating an EGL context.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef intptr_t SDL_EGLAttrib;
|
|
|
|
/**
|
|
* An EGL integer attribute, used when creating an EGL surface.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef int SDL_EGLint;
|
|
|
|
/**
|
|
* EGL platform attribute initialization callback.
|
|
*
|
|
* This is called when SDL is attempting to create an EGL context, to let the
|
|
* app add extra attributes to its eglGetPlatformDisplay() call.
|
|
*
|
|
* The callback should return a pointer to an EGL attribute array terminated
|
|
* with `EGL_NONE`. If this function returns NULL, the SDL_CreateWindow
|
|
* process will fail gracefully.
|
|
*
|
|
* The returned pointer should be allocated with SDL_malloc() and will be
|
|
* passed to SDL_free().
|
|
*
|
|
* The arrays returned by each callback will be appended to the existing
|
|
* attribute arrays defined by SDL.
|
|
*
|
|
* \param userdata an app-controlled pointer that is passed to the callback.
|
|
* \returns a newly-allocated array of attributes, terminated with `EGL_NONE`.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_EGL_SetAttributeCallbacks
|
|
*/
|
|
typedef SDL_EGLAttrib *(SDLCALL *SDL_EGLAttribArrayCallback)(void *userdata);
|
|
|
|
/**
|
|
* EGL surface/context attribute initialization callback types.
|
|
*
|
|
* This is called when SDL is attempting to create an EGL surface, to let the
|
|
* app add extra attributes to its eglCreateWindowSurface() or
|
|
* eglCreateContext calls.
|
|
*
|
|
* For convenience, the EGLDisplay and EGLConfig to use are provided to the
|
|
* callback.
|
|
*
|
|
* The callback should return a pointer to an EGL attribute array terminated
|
|
* with `EGL_NONE`. If this function returns NULL, the SDL_CreateWindow
|
|
* process will fail gracefully.
|
|
*
|
|
* The returned pointer should be allocated with SDL_malloc() and will be
|
|
* passed to SDL_free().
|
|
*
|
|
* The arrays returned by each callback will be appended to the existing
|
|
* attribute arrays defined by SDL.
|
|
*
|
|
* \param userdata an app-controlled pointer that is passed to the callback.
|
|
* \param display the EGL display to be used.
|
|
* \param config the EGL config to be used.
|
|
* \returns a newly-allocated array of attributes, terminated with `EGL_NONE`.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_EGL_SetAttributeCallbacks
|
|
*/
|
|
typedef SDL_EGLint *(SDLCALL *SDL_EGLIntArrayCallback)(void *userdata, SDL_EGLDisplay display, SDL_EGLConfig config);
|
|
|
|
/**
|
|
* An enumeration of OpenGL configuration attributes.
|
|
*
|
|
* While you can set most OpenGL attributes normally, the attributes listed
|
|
* above must be known before SDL creates the window that will be used with
|
|
* the OpenGL context. These attributes are set and read with
|
|
* SDL_GL_SetAttribute() and SDL_GL_GetAttribute().
|
|
*
|
|
* In some cases, these attributes are minimum requests; the GL does not
|
|
* promise to give you exactly what you asked for. It's possible to ask for a
|
|
* 16-bit depth buffer and get a 24-bit one instead, for example, or to ask
|
|
* for no stencil buffer and still have one available. Context creation should
|
|
* fail if the GL can't provide your requested attributes at a minimum, but
|
|
* you should check to see exactly what you got.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*/
|
|
typedef enum SDL_GLAttr
|
|
{
|
|
SDL_GL_RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */
|
|
SDL_GL_GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */
|
|
SDL_GL_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */
|
|
SDL_GL_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */
|
|
SDL_GL_BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */
|
|
SDL_GL_DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */
|
|
SDL_GL_DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */
|
|
SDL_GL_STENCIL_SIZE, /**< the minimum number of bits in the stencil buffer; defaults to 0. */
|
|
SDL_GL_ACCUM_RED_SIZE, /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */
|
|
SDL_GL_ACCUM_GREEN_SIZE, /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */
|
|
SDL_GL_ACCUM_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */
|
|
SDL_GL_ACCUM_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */
|
|
SDL_GL_STEREO, /**< whether the output is stereo 3D; defaults to off. */
|
|
SDL_GL_MULTISAMPLEBUFFERS, /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */
|
|
SDL_GL_MULTISAMPLESAMPLES, /**< the number of samples used around the current pixel used for multisample anti-aliasing. */
|
|
SDL_GL_ACCELERATED_VISUAL, /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */
|
|
SDL_GL_RETAINED_BACKING, /**< not used (deprecated). */
|
|
SDL_GL_CONTEXT_MAJOR_VERSION, /**< OpenGL context major version. */
|
|
SDL_GL_CONTEXT_MINOR_VERSION, /**< OpenGL context minor version. */
|
|
SDL_GL_CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLContextFlag enumeration; defaults to 0. */
|
|
SDL_GL_CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLProfile; default value depends on platform. */
|
|
SDL_GL_SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */
|
|
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. */
|
|
SDL_GL_CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior. See SDL_GLContextReleaseFlag; defaults to FLUSH. */
|
|
SDL_GL_CONTEXT_RESET_NOTIFICATION, /**< set context reset notification. See SDL_GLContextResetNotification; defaults to NO_NOTIFICATION. */
|
|
SDL_GL_CONTEXT_NO_ERROR,
|
|
SDL_GL_FLOATBUFFERS,
|
|
SDL_GL_EGL_PLATFORM
|
|
} SDL_GLAttr;
|
|
|
|
/**
|
|
* Possible values to be set for the SDL_GL_CONTEXT_PROFILE_MASK attribute.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_GLProfile;
|
|
|
|
#define SDL_GL_CONTEXT_PROFILE_CORE 0x0001 /**< OpenGL Core Profile context */
|
|
#define SDL_GL_CONTEXT_PROFILE_COMPATIBILITY 0x0002 /**< OpenGL Compatibility Profile context */
|
|
#define SDL_GL_CONTEXT_PROFILE_ES 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
|
|
|
|
|
|
/**
|
|
* Possible flags to be set for the SDL_GL_CONTEXT_FLAGS attribute.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_GLContextFlag;
|
|
|
|
#define SDL_GL_CONTEXT_DEBUG_FLAG 0x0001
|
|
#define SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG 0x0002
|
|
#define SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG 0x0004
|
|
#define SDL_GL_CONTEXT_RESET_ISOLATION_FLAG 0x0008
|
|
|
|
|
|
/**
|
|
* Possible values to be set for the SDL_GL_CONTEXT_RELEASE_BEHAVIOR
|
|
* attribute.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_GLContextReleaseFlag;
|
|
|
|
#define SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE 0x0000
|
|
#define SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x0001
|
|
|
|
|
|
/**
|
|
* Possible values to be set SDL_GL_CONTEXT_RESET_NOTIFICATION attribute.
|
|
*
|
|
* \since This datatype is available since SDL 3.1.3.
|
|
*/
|
|
typedef Uint32 SDL_GLContextResetNotification;
|
|
|
|
#define SDL_GL_CONTEXT_RESET_NO_NOTIFICATION 0x0000
|
|
#define SDL_GL_CONTEXT_RESET_LOSE_CONTEXT 0x0001
|
|
|
|
|
|
/* Function prototypes */
|
|
|
|
/**
|
|
* Get the number of video drivers compiled into SDL.
|
|
*
|
|
* \returns the number of built in video drivers.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetVideoDriver
|
|
*/
|
|
extern SDL_DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void);
|
|
|
|
/**
|
|
* Get the name of a built in video driver.
|
|
*
|
|
* The video drivers are presented in the order in which they are normally
|
|
* checked during initialization.
|
|
*
|
|
* The names of drivers are all simple, low-ASCII identifiers, like "cocoa",
|
|
* "x11" or "windows". These never have Unicode characters, and are not meant
|
|
* to be proper names.
|
|
*
|
|
* \param index the index of a video driver.
|
|
* \returns the name of the video driver with the given **index**.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetNumVideoDrivers
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetVideoDriver(int index);
|
|
|
|
/**
|
|
* Get the name of the currently initialized video driver.
|
|
*
|
|
* The names of drivers are all simple, low-ASCII identifiers, like "cocoa",
|
|
* "x11" or "windows". These never have Unicode characters, and are not meant
|
|
* to be proper names.
|
|
*
|
|
* \returns the name of the current video driver or NULL if no driver has been
|
|
* initialized.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetNumVideoDrivers
|
|
* \sa SDL_GetVideoDriver
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetCurrentVideoDriver(void);
|
|
|
|
/**
|
|
* Get the current system theme.
|
|
*
|
|
* \returns the current system theme, light, dark, or unknown.
|
|
*
|
|
* \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_SystemTheme SDLCALL SDL_GetSystemTheme(void);
|
|
|
|
/**
|
|
* Get a list of currently connected displays.
|
|
*
|
|
* \param count a pointer filled in with the number of displays returned, may
|
|
* be NULL.
|
|
* \returns a 0 terminated array of display instance IDs or NULL on failure;
|
|
* call SDL_GetError() for more information. This should be freed
|
|
* with SDL_free() when it is no longer needed.
|
|
*
|
|
* \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_DisplayID * SDLCALL SDL_GetDisplays(int *count);
|
|
|
|
/**
|
|
* Return the primary display.
|
|
*
|
|
* \returns the instance ID of the primary display on success or 0 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_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayID SDLCALL SDL_GetPrimaryDisplay(void);
|
|
|
|
/**
|
|
* Get the properties associated with a display.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_DISPLAY_HDR_ENABLED_BOOLEAN`: true if the display has HDR
|
|
* headroom above the SDR white point. This is for informational and
|
|
* diagnostic purposes only, as not all platforms provide this information
|
|
* at the display level.
|
|
*
|
|
* On KMS/DRM:
|
|
*
|
|
* - `SDL_PROP_DISPLAY_KMSDRM_PANEL_ORIENTATION_NUMBER`: the "panel
|
|
* orientation" property for the display in degrees of clockwise rotation.
|
|
* Note that this is provided only as a hint, and the application is
|
|
* responsible for any coordinate transformations needed to conform to the
|
|
* requested display orientation.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns a valid property ID on success or 0 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_PropertiesID SDLCALL SDL_GetDisplayProperties(SDL_DisplayID displayID);
|
|
|
|
#define SDL_PROP_DISPLAY_HDR_ENABLED_BOOLEAN "SDL.display.HDR_enabled"
|
|
#define SDL_PROP_DISPLAY_KMSDRM_PANEL_ORIENTATION_NUMBER "SDL.display.KMSDRM.panel_orientation"
|
|
|
|
/**
|
|
* Get the name of a display in UTF-8 encoding.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns the name of a display 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_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetDisplayName(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get the desktop area represented by a display.
|
|
*
|
|
* The primary display is always located at (0,0).
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \param rect the SDL_Rect structure filled in with the display bounds.
|
|
* \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_GetDisplayUsableBounds
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetDisplayBounds(SDL_DisplayID displayID, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the usable desktop area represented by a display, in screen
|
|
* coordinates.
|
|
*
|
|
* This is the same area as SDL_GetDisplayBounds() reports, but with portions
|
|
* reserved by the system removed. For example, on Apple's macOS, this
|
|
* subtracts the area occupied by the menu bar and dock.
|
|
*
|
|
* Setting a window to be fullscreen generally bypasses these unusable areas,
|
|
* so these are good guidelines for the maximum space available to a
|
|
* non-fullscreen window.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \param rect the SDL_Rect structure filled in with the display bounds.
|
|
* \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_GetDisplayBounds
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetDisplayUsableBounds(SDL_DisplayID displayID, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the orientation of a display when it is unrotated.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns the SDL_DisplayOrientation enum value of the display, or
|
|
* `SDL_ORIENTATION_UNKNOWN` if it isn't available.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetNaturalDisplayOrientation(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get the orientation of a display.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns the SDL_DisplayOrientation enum value of the display, or
|
|
* `SDL_ORIENTATION_UNKNOWN` if it isn't available.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetCurrentDisplayOrientation(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get the content scale of a display.
|
|
*
|
|
* The content scale is the expected scale for content based on the DPI
|
|
* settings of the display. For example, a 4K display might have a 2.0 (200%)
|
|
* display scale, which means that the user expects UI elements to be twice as
|
|
* big on this display, to aid in readability.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns the content scale of the display, or 0.0f 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_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC float SDLCALL SDL_GetDisplayContentScale(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get a list of fullscreen display modes available on a display.
|
|
*
|
|
* The display modes are sorted in this priority:
|
|
*
|
|
* - w -> largest to smallest
|
|
* - h -> largest to smallest
|
|
* - bits per pixel -> more colors to fewer colors
|
|
* - packed pixel layout -> largest to smallest
|
|
* - refresh rate -> highest to lowest
|
|
* - pixel density -> lowest to highest
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \param count a pointer filled in with the number of display modes returned,
|
|
* may be NULL.
|
|
* \returns a NULL terminated array of display mode pointers or NULL on
|
|
* failure; call SDL_GetError() for more information. This is a
|
|
* single allocation that should be freed with SDL_free() when it is
|
|
* no longer needed.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayMode ** SDLCALL SDL_GetFullscreenDisplayModes(SDL_DisplayID displayID, int *count);
|
|
|
|
/**
|
|
* Get the closest match to the requested display mode.
|
|
*
|
|
* The available display modes are scanned and `closest` is filled in with the
|
|
* closest mode matching the requested mode and returned. The mode format and
|
|
* refresh rate default to the desktop mode if they are set to 0. The modes
|
|
* are scanned with size being first priority, format being second priority,
|
|
* and finally checking the refresh rate. If all the available modes are too
|
|
* small, then false is returned.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \param w the width in pixels of the desired display mode.
|
|
* \param h the height in pixels of the desired display mode.
|
|
* \param refresh_rate the refresh rate of the desired display mode, or 0.0f
|
|
* for the desktop refresh rate.
|
|
* \param include_high_density_modes boolean to include high density modes in
|
|
* the search.
|
|
* \param closest a pointer filled in with the closest display mode equal to
|
|
* or larger than the desired 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_GetDisplays
|
|
* \sa SDL_GetFullscreenDisplayModes
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetClosestFullscreenDisplayMode(SDL_DisplayID displayID, int w, int h, float refresh_rate, bool include_high_density_modes, SDL_DisplayMode *closest);
|
|
|
|
/**
|
|
* Get information about the desktop's display mode.
|
|
*
|
|
* There's a difference between this function and SDL_GetCurrentDisplayMode()
|
|
* when SDL runs fullscreen and has changed the resolution. In that case this
|
|
* function will return the previous native display mode, and not the current
|
|
* display mode.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns a pointer to the desktop display mode 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_GetCurrentDisplayMode
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC const SDL_DisplayMode * SDLCALL SDL_GetDesktopDisplayMode(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get information about the current display mode.
|
|
*
|
|
* There's a difference between this function and SDL_GetDesktopDisplayMode()
|
|
* when SDL runs fullscreen and has changed the resolution. In that case this
|
|
* function will return the current display mode, and not the previous native
|
|
* display mode.
|
|
*
|
|
* \param displayID the instance ID of the display to query.
|
|
* \returns a pointer to the desktop display mode 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_GetDesktopDisplayMode
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC const SDL_DisplayMode * SDLCALL SDL_GetCurrentDisplayMode(SDL_DisplayID displayID);
|
|
|
|
/**
|
|
* Get the display containing a point.
|
|
*
|
|
* \param point the point to query.
|
|
* \returns the instance ID of the display containing the point or 0 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_GetDisplayBounds
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayID SDLCALL SDL_GetDisplayForPoint(const SDL_Point *point);
|
|
|
|
/**
|
|
* Get the display primarily containing a rect.
|
|
*
|
|
* \param rect the rect to query.
|
|
* \returns the instance ID of the display entirely containing the rect or
|
|
* closest to the center of the rect on success or 0 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_GetDisplayBounds
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayID SDLCALL SDL_GetDisplayForRect(const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the display associated with a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the instance ID of the display containing the center of the window
|
|
* on success or 0 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_GetDisplayBounds
|
|
* \sa SDL_GetDisplays
|
|
*/
|
|
extern SDL_DECLSPEC SDL_DisplayID SDLCALL SDL_GetDisplayForWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the pixel density of a window.
|
|
*
|
|
* This is a ratio of pixel size to window size. For example, if the window is
|
|
* 1920x1080 and it has a high density back buffer of 3840x2160 pixels, it
|
|
* would have a pixel density of 2.0.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the pixel density or 0.0f 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_GetWindowDisplayScale
|
|
*/
|
|
extern SDL_DECLSPEC float SDLCALL SDL_GetWindowPixelDensity(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the content display scale relative to a window's pixel size.
|
|
*
|
|
* This is a combination of the window pixel density and the display content
|
|
* scale, and is the expected scale for displaying content in this window. For
|
|
* example, if a 3840x2160 window had a display scale of 2.0, the user expects
|
|
* the content to take twice as many pixels and be the same physical size as
|
|
* if it were being displayed in a 1920x1080 window with a display scale of
|
|
* 1.0.
|
|
*
|
|
* Conceptually this value corresponds to the scale display setting, and is
|
|
* updated when that setting is changed, or the window moves to a display with
|
|
* a different scale setting.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the display scale, or 0.0f 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 float SDLCALL SDL_GetWindowDisplayScale(SDL_Window *window);
|
|
|
|
/**
|
|
* Set the display mode to use when a window is visible and fullscreen.
|
|
*
|
|
* This only affects the display mode used when the window is fullscreen. To
|
|
* change the window size when the window is not fullscreen, use
|
|
* SDL_SetWindowSize().
|
|
*
|
|
* If the window is currently in the fullscreen state, this request is
|
|
* asynchronous on some windowing systems and the new mode dimensions may not
|
|
* be applied immediately upon the return of this function. If an immediate
|
|
* change is required, call SDL_SyncWindow() to block until the changes have
|
|
* taken effect.
|
|
*
|
|
* When the new mode takes effect, an SDL_EVENT_WINDOW_RESIZED and/or an
|
|
* SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event will be emitted with the new mode
|
|
* dimensions.
|
|
*
|
|
* \param window the window to affect.
|
|
* \param mode a pointer to the display mode to use, which can be NULL for
|
|
* borderless fullscreen desktop mode, or one of the fullscreen
|
|
* modes returned by SDL_GetFullscreenDisplayModes() to set an
|
|
* exclusive fullscreen 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_GetWindowFullscreenMode
|
|
* \sa SDL_SetWindowFullscreen
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowFullscreenMode(SDL_Window *window, const SDL_DisplayMode *mode);
|
|
|
|
/**
|
|
* Query the display mode to use when a window is visible at fullscreen.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns a pointer to the exclusive fullscreen mode to use or NULL for
|
|
* borderless fullscreen desktop mode.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowFullscreenMode
|
|
* \sa SDL_SetWindowFullscreen
|
|
*/
|
|
extern SDL_DECLSPEC const SDL_DisplayMode * SDLCALL SDL_GetWindowFullscreenMode(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the raw ICC profile data for the screen the window is currently on.
|
|
*
|
|
* \param window the window to query.
|
|
* \param size the size of the ICC profile.
|
|
* \returns the raw ICC profile data on success or NULL on failure; call
|
|
* SDL_GetError() for more information. This should be freed with
|
|
* SDL_free() when it is no longer needed.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC void * SDLCALL SDL_GetWindowICCProfile(SDL_Window *window, size_t *size);
|
|
|
|
/**
|
|
* Get the pixel format associated with the window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the pixel format of the window on success or
|
|
* SDL_PIXELFORMAT_UNKNOWN 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_PixelFormat SDLCALL SDL_GetWindowPixelFormat(SDL_Window *window);
|
|
|
|
/**
|
|
* Get a list of valid windows.
|
|
*
|
|
* \param count a pointer filled in with the number of windows returned, may
|
|
* be NULL.
|
|
* \returns a NULL terminated array of SDL_Window pointers or NULL on failure;
|
|
* call SDL_GetError() for more information. This is a single
|
|
* allocation that should be freed with SDL_free() when it is no
|
|
* longer needed.
|
|
*
|
|
* \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_Window ** SDLCALL SDL_GetWindows(int *count);
|
|
|
|
/**
|
|
* Create a window with the specified dimensions and flags.
|
|
*
|
|
* `flags` may be any of the following OR'd together:
|
|
*
|
|
* - `SDL_WINDOW_FULLSCREEN`: fullscreen window at desktop resolution
|
|
* - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context
|
|
* - `SDL_WINDOW_OCCLUDED`: window partially or completely obscured by another
|
|
* window
|
|
* - `SDL_WINDOW_HIDDEN`: window is not visible
|
|
* - `SDL_WINDOW_BORDERLESS`: no window decoration
|
|
* - `SDL_WINDOW_RESIZABLE`: window can be resized
|
|
* - `SDL_WINDOW_MINIMIZED`: window is minimized
|
|
* - `SDL_WINDOW_MAXIMIZED`: window is maximized
|
|
* - `SDL_WINDOW_MOUSE_GRABBED`: window has grabbed mouse focus
|
|
* - `SDL_WINDOW_INPUT_FOCUS`: window has input focus
|
|
* - `SDL_WINDOW_MOUSE_FOCUS`: window has mouse focus
|
|
* - `SDL_WINDOW_EXTERNAL`: window not created by SDL
|
|
* - `SDL_WINDOW_MODAL`: window is modal
|
|
* - `SDL_WINDOW_HIGH_PIXEL_DENSITY`: window uses high pixel density back
|
|
* buffer if possible
|
|
* - `SDL_WINDOW_MOUSE_CAPTURE`: window has mouse captured (unrelated to
|
|
* MOUSE_GRABBED)
|
|
* - `SDL_WINDOW_ALWAYS_ON_TOP`: window should always be above others
|
|
* - `SDL_WINDOW_UTILITY`: window should be treated as a utility window, not
|
|
* showing in the task bar and window list
|
|
* - `SDL_WINDOW_TOOLTIP`: window should be treated as a tooltip and does not
|
|
* get mouse or keyboard focus, requires a parent window
|
|
* - `SDL_WINDOW_POPUP_MENU`: window should be treated as a popup menu,
|
|
* requires a parent window
|
|
* - `SDL_WINDOW_KEYBOARD_GRABBED`: window has grabbed keyboard input
|
|
* - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance
|
|
* - `SDL_WINDOW_METAL`: window usable with a Metal instance
|
|
* - `SDL_WINDOW_TRANSPARENT`: window with transparent buffer
|
|
* - `SDL_WINDOW_NOT_FOCUSABLE`: window should not be focusable
|
|
*
|
|
* The SDL_Window is implicitly shown if SDL_WINDOW_HIDDEN is not set.
|
|
*
|
|
* On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist
|
|
* property to YES, otherwise you will not receive a High-DPI OpenGL canvas.
|
|
*
|
|
* The window pixel size may differ from its window coordinate size if the
|
|
* window is on a high pixel density display. Use SDL_GetWindowSize() to query
|
|
* the client area's size in window coordinates, and
|
|
* SDL_GetWindowSizeInPixels() or SDL_GetRenderOutputSize() to query the
|
|
* drawable size in pixels. Note that the drawable size can vary after the
|
|
* window is created and should be queried again if you get an
|
|
* SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event.
|
|
*
|
|
* If the window is created with any of the SDL_WINDOW_OPENGL or
|
|
* SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function
|
|
* (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the
|
|
* corresponding UnloadLibrary function is called by SDL_DestroyWindow().
|
|
*
|
|
* If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver,
|
|
* SDL_CreateWindow() will fail, because SDL_Vulkan_LoadLibrary() will fail.
|
|
*
|
|
* If SDL_WINDOW_METAL is specified on an OS that does not support Metal,
|
|
* SDL_CreateWindow() will fail.
|
|
*
|
|
* If you intend to use this window with an SDL_Renderer, you should use
|
|
* SDL_CreateWindowAndRenderer() instead of this function, to avoid window
|
|
* flicker.
|
|
*
|
|
* On non-Apple devices, SDL requires you to either not link to the Vulkan
|
|
* loader or link to a dynamic library version. This limitation may be removed
|
|
* in a future version of SDL.
|
|
*
|
|
* \param title the title of the window, in UTF-8 encoding.
|
|
* \param w the width of the window.
|
|
* \param h the height of the window.
|
|
* \param flags 0, or one or more SDL_WindowFlags OR'd together.
|
|
* \returns the window that was created 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_CreateWindowAndRenderer
|
|
* \sa SDL_CreatePopupWindow
|
|
* \sa SDL_CreateWindowWithProperties
|
|
* \sa SDL_DestroyWindow
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, int w, int h, SDL_WindowFlags flags);
|
|
|
|
/**
|
|
* Create a child popup window of the specified parent window.
|
|
*
|
|
* The flags parameter **must** contain at least one of the following:
|
|
*
|
|
* - `SDL_WINDOW_TOOLTIP`: The popup window is a tooltip and will not pass any
|
|
* input events.
|
|
* - `SDL_WINDOW_POPUP_MENU`: The popup window is a popup menu. The topmost
|
|
* popup menu will implicitly gain the keyboard focus.
|
|
*
|
|
* The following flags are not relevant to popup window creation and will be
|
|
* ignored:
|
|
*
|
|
* - `SDL_WINDOW_MINIMIZED`
|
|
* - `SDL_WINDOW_MAXIMIZED`
|
|
* - `SDL_WINDOW_FULLSCREEN`
|
|
* - `SDL_WINDOW_BORDERLESS`
|
|
*
|
|
* The following flags are incompatible with popup window creation and will
|
|
* cause it to fail:
|
|
*
|
|
* - `SDL_WINDOW_UTILITY`
|
|
* - `SDL_WINDOW_MODAL`
|
|
*
|
|
* The parent parameter **must** be non-null and a valid window. The parent of
|
|
* a popup window can be either a regular, toplevel window, or another popup
|
|
* window.
|
|
*
|
|
* Popup windows cannot be minimized, maximized, made fullscreen, raised,
|
|
* flash, be made a modal window, be the parent of a toplevel window, or grab
|
|
* the mouse and/or keyboard. Attempts to do so will fail.
|
|
*
|
|
* Popup windows implicitly do not have a border/decorations and do not appear
|
|
* on the taskbar/dock or in lists of windows such as alt-tab menus.
|
|
*
|
|
* If a parent window is hidden or destroyed, any child popup windows will be
|
|
* recursively hidden or destroyed as well. Child popup windows not explicitly
|
|
* hidden will be restored when the parent is shown.
|
|
*
|
|
* \param parent the parent of the window, must not be NULL.
|
|
* \param offset_x the x position of the popup window relative to the origin
|
|
* of the parent.
|
|
* \param offset_y the y position of the popup window relative to the origin
|
|
* of the parent window.
|
|
* \param w the width of the window.
|
|
* \param h the height of the window.
|
|
* \param flags SDL_WINDOW_TOOLTIP or SDL_WINDOW_POPUP_MENU, and zero or more
|
|
* additional SDL_WindowFlags OR'd together.
|
|
* \returns the window that was created 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_CreateWindow
|
|
* \sa SDL_CreateWindowWithProperties
|
|
* \sa SDL_DestroyWindow
|
|
* \sa SDL_GetWindowParent
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *parent, int offset_x, int offset_y, int w, int h, SDL_WindowFlags flags);
|
|
|
|
/**
|
|
* Create a window with the specified properties.
|
|
*
|
|
* These are the supported properties:
|
|
*
|
|
* - `SDL_PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN`: true if the window should
|
|
* be always on top
|
|
* - `SDL_PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN`: true if the window has no
|
|
* window decoration
|
|
* - `SDL_PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN`: true if the
|
|
* window will be used with an externally managed graphics context.
|
|
* - `SDL_PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN`: true if the window should
|
|
* accept keyboard input (defaults true)
|
|
* - `SDL_PROP_WINDOW_CREATE_FULLSCREEN_BOOLEAN`: true if the window should
|
|
* start in fullscreen mode at desktop resolution
|
|
* - `SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER`: the height of the window
|
|
* - `SDL_PROP_WINDOW_CREATE_HIDDEN_BOOLEAN`: true if the window should start
|
|
* hidden
|
|
* - `SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN`: true if the window
|
|
* uses a high pixel density buffer if possible
|
|
* - `SDL_PROP_WINDOW_CREATE_MAXIMIZED_BOOLEAN`: true if the window should
|
|
* start maximized
|
|
* - `SDL_PROP_WINDOW_CREATE_MENU_BOOLEAN`: true if the window is a popup menu
|
|
* - `SDL_PROP_WINDOW_CREATE_METAL_BOOLEAN`: true if the window will be used
|
|
* with Metal rendering
|
|
* - `SDL_PROP_WINDOW_CREATE_MINIMIZED_BOOLEAN`: true if the window should
|
|
* start minimized
|
|
* - `SDL_PROP_WINDOW_CREATE_MODAL_BOOLEAN`: true if the window is modal to
|
|
* its parent
|
|
* - `SDL_PROP_WINDOW_CREATE_MOUSE_GRABBED_BOOLEAN`: true if the window starts
|
|
* with grabbed mouse focus
|
|
* - `SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN`: true if the window will be used
|
|
* with OpenGL rendering
|
|
* - `SDL_PROP_WINDOW_CREATE_PARENT_POINTER`: an SDL_Window that will be the
|
|
* parent of this window, required for windows with the "tooltip", "menu",
|
|
* and "modal" properties
|
|
* - `SDL_PROP_WINDOW_CREATE_RESIZABLE_BOOLEAN`: true if the window should be
|
|
* resizable
|
|
* - `SDL_PROP_WINDOW_CREATE_TITLE_STRING`: the title of the window, in UTF-8
|
|
* encoding
|
|
* - `SDL_PROP_WINDOW_CREATE_TRANSPARENT_BOOLEAN`: true if the window show
|
|
* transparent in the areas with alpha of 0
|
|
* - `SDL_PROP_WINDOW_CREATE_TOOLTIP_BOOLEAN`: true if the window is a tooltip
|
|
* - `SDL_PROP_WINDOW_CREATE_UTILITY_BOOLEAN`: true if the window is a utility
|
|
* window, not showing in the task bar and window list
|
|
* - `SDL_PROP_WINDOW_CREATE_VULKAN_BOOLEAN`: true if the window will be used
|
|
* with Vulkan rendering
|
|
* - `SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER`: the width of the window
|
|
* - `SDL_PROP_WINDOW_CREATE_X_NUMBER`: the x position of the window, or
|
|
* `SDL_WINDOWPOS_CENTERED`, defaults to `SDL_WINDOWPOS_UNDEFINED`. This is
|
|
* relative to the parent for windows with the "tooltip" or "menu" property
|
|
* set.
|
|
* - `SDL_PROP_WINDOW_CREATE_Y_NUMBER`: the y position of the window, or
|
|
* `SDL_WINDOWPOS_CENTERED`, defaults to `SDL_WINDOWPOS_UNDEFINED`. This is
|
|
* relative to the parent for windows with the "tooltip" or "menu" property
|
|
* set.
|
|
*
|
|
* These are additional supported properties on macOS:
|
|
*
|
|
* - `SDL_PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER`: the
|
|
* `(__unsafe_unretained)` NSWindow associated with the window, if you want
|
|
* to wrap an existing window.
|
|
* - `SDL_PROP_WINDOW_CREATE_COCOA_VIEW_POINTER`: the `(__unsafe_unretained)`
|
|
* NSView associated with the window, defaults to `[window contentView]`
|
|
*
|
|
* These are additional supported properties on Wayland:
|
|
*
|
|
* - `SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN` - true if
|
|
* the application wants to use the Wayland surface for a custom role and
|
|
* does not want it attached to an XDG toplevel window. See
|
|
* [README/wayland](README/wayland) for more information on using custom
|
|
* surfaces.
|
|
* - `SDL_PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN` - true if the
|
|
* application wants an associated `wl_egl_window` object to be created and
|
|
* attached to the window, even if the window does not have the OpenGL
|
|
* property or `SDL_WINDOW_OPENGL` flag set.
|
|
* - `SDL_PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER` - the wl_surface
|
|
* associated with the window, if you want to wrap an existing window. See
|
|
* [README/wayland](README/wayland) for more information.
|
|
*
|
|
* These are additional supported properties on Windows:
|
|
*
|
|
* - `SDL_PROP_WINDOW_CREATE_WIN32_HWND_POINTER`: the HWND associated with the
|
|
* window, if you want to wrap an existing window.
|
|
* - `SDL_PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER`: optional,
|
|
* another window to share pixel format with, useful for OpenGL windows
|
|
*
|
|
* These are additional supported properties with X11:
|
|
*
|
|
* - `SDL_PROP_WINDOW_CREATE_X11_WINDOW_NUMBER`: the X11 Window associated
|
|
* with the window, if you want to wrap an existing window.
|
|
*
|
|
* The window is implicitly shown if the "hidden" property is not set.
|
|
*
|
|
* Windows with the "tooltip" and "menu" properties are popup windows and have
|
|
* the behaviors and guidelines outlined in SDL_CreatePopupWindow().
|
|
*
|
|
* If this window is being created to be used with an SDL_Renderer, you should
|
|
* not add a graphics API specific property
|
|
* (`SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN`, etc), as SDL will handle that
|
|
* internally when it chooses a renderer. However, SDL might need to recreate
|
|
* your window at that point, which may cause the window to appear briefly,
|
|
* and then flicker as it is recreated. The correct approach to this is to
|
|
* create the window with the `SDL_PROP_WINDOW_CREATE_HIDDEN_BOOLEAN` property
|
|
* set to true, then create the renderer, then show the window with
|
|
* SDL_ShowWindow().
|
|
*
|
|
* \param props the properties to use.
|
|
* \returns the window that was created 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_CreateWindow
|
|
* \sa SDL_DestroyWindow
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowWithProperties(SDL_PropertiesID props);
|
|
|
|
#define SDL_PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN "SDL.window.create.always_on_top"
|
|
#define SDL_PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN "SDL.window.create.borderless"
|
|
#define SDL_PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN "SDL.window.create.focusable"
|
|
#define SDL_PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN "SDL.window.create.external_graphics_context"
|
|
#define SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER "SDL.window.create.flags"
|
|
#define SDL_PROP_WINDOW_CREATE_FULLSCREEN_BOOLEAN "SDL.window.create.fullscreen"
|
|
#define SDL_PROP_WINDOW_CREATE_HEIGHT_NUMBER "SDL.window.create.height"
|
|
#define SDL_PROP_WINDOW_CREATE_HIDDEN_BOOLEAN "SDL.window.create.hidden"
|
|
#define SDL_PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN "SDL.window.create.high_pixel_density"
|
|
#define SDL_PROP_WINDOW_CREATE_MAXIMIZED_BOOLEAN "SDL.window.create.maximized"
|
|
#define SDL_PROP_WINDOW_CREATE_MENU_BOOLEAN "SDL.window.create.menu"
|
|
#define SDL_PROP_WINDOW_CREATE_METAL_BOOLEAN "SDL.window.create.metal"
|
|
#define SDL_PROP_WINDOW_CREATE_MINIMIZED_BOOLEAN "SDL.window.create.minimized"
|
|
#define SDL_PROP_WINDOW_CREATE_MODAL_BOOLEAN "SDL.window.create.modal"
|
|
#define SDL_PROP_WINDOW_CREATE_MOUSE_GRABBED_BOOLEAN "SDL.window.create.mouse_grabbed"
|
|
#define SDL_PROP_WINDOW_CREATE_OPENGL_BOOLEAN "SDL.window.create.opengl"
|
|
#define SDL_PROP_WINDOW_CREATE_PARENT_POINTER "SDL.window.create.parent"
|
|
#define SDL_PROP_WINDOW_CREATE_RESIZABLE_BOOLEAN "SDL.window.create.resizable"
|
|
#define SDL_PROP_WINDOW_CREATE_TITLE_STRING "SDL.window.create.title"
|
|
#define SDL_PROP_WINDOW_CREATE_TRANSPARENT_BOOLEAN "SDL.window.create.transparent"
|
|
#define SDL_PROP_WINDOW_CREATE_TOOLTIP_BOOLEAN "SDL.window.create.tooltip"
|
|
#define SDL_PROP_WINDOW_CREATE_UTILITY_BOOLEAN "SDL.window.create.utility"
|
|
#define SDL_PROP_WINDOW_CREATE_VULKAN_BOOLEAN "SDL.window.create.vulkan"
|
|
#define SDL_PROP_WINDOW_CREATE_WIDTH_NUMBER "SDL.window.create.width"
|
|
#define SDL_PROP_WINDOW_CREATE_X_NUMBER "SDL.window.create.x"
|
|
#define SDL_PROP_WINDOW_CREATE_Y_NUMBER "SDL.window.create.y"
|
|
#define SDL_PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER "SDL.window.create.cocoa.window"
|
|
#define SDL_PROP_WINDOW_CREATE_COCOA_VIEW_POINTER "SDL.window.create.cocoa.view"
|
|
#define SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN "SDL.window.create.wayland.surface_role_custom"
|
|
#define SDL_PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN "SDL.window.create.wayland.create_egl_window"
|
|
#define SDL_PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER "SDL.window.create.wayland.wl_surface"
|
|
#define SDL_PROP_WINDOW_CREATE_WIN32_HWND_POINTER "SDL.window.create.win32.hwnd"
|
|
#define SDL_PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER "SDL.window.create.win32.pixel_format_hwnd"
|
|
#define SDL_PROP_WINDOW_CREATE_X11_WINDOW_NUMBER "SDL.window.create.x11.window"
|
|
|
|
/**
|
|
* Get the numeric ID of a window.
|
|
*
|
|
* The numeric ID is what SDL_WindowEvent references, and is necessary to map
|
|
* these events to specific SDL_Window objects.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the ID of the window on success or 0 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_GetWindowFromID
|
|
*/
|
|
extern SDL_DECLSPEC SDL_WindowID SDLCALL SDL_GetWindowID(SDL_Window *window);
|
|
|
|
/**
|
|
* Get a window from a stored ID.
|
|
*
|
|
* The numeric ID is what SDL_WindowEvent references, and is necessary to map
|
|
* these events to specific SDL_Window objects.
|
|
*
|
|
* \param id the ID of the window.
|
|
* \returns the window associated with `id` or NULL if it doesn't exist; 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_GetWindowID
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(SDL_WindowID id);
|
|
|
|
/**
|
|
* Get parent of a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the parent of the window on success or NULL if the window has no
|
|
* parent.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreatePopupWindow
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowParent(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the properties associated with a window.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_WINDOW_SHAPE_POINTER`: the surface associated with a shaped
|
|
* window
|
|
* - `SDL_PROP_WINDOW_HDR_ENABLED_BOOLEAN`: true if the window has HDR
|
|
* headroom above the SDR white point. This property can change dynamically
|
|
* when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_WINDOW_SDR_WHITE_LEVEL_FLOAT`: the value of SDR white in the
|
|
* SDL_COLORSPACE_SRGB_LINEAR colorspace. On Windows this corresponds to the
|
|
* SDR white level in scRGB colorspace, and on Apple platforms this is
|
|
* always 1.0 for EDR content. This property can change dynamically when
|
|
* SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_WINDOW_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.
|
|
*
|
|
* On Android:
|
|
*
|
|
* - `SDL_PROP_WINDOW_ANDROID_WINDOW_POINTER`: the ANativeWindow associated
|
|
* with the window
|
|
* - `SDL_PROP_WINDOW_ANDROID_SURFACE_POINTER`: the EGLSurface associated with
|
|
* the window
|
|
*
|
|
* On iOS:
|
|
*
|
|
* - `SDL_PROP_WINDOW_UIKIT_WINDOW_POINTER`: the `(__unsafe_unretained)`
|
|
* UIWindow associated with the window
|
|
* - `SDL_PROP_WINDOW_UIKIT_METAL_VIEW_TAG_NUMBER`: the NSInteger tag
|
|
* associated with metal views on the window
|
|
* - `SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER`: the OpenGL view's
|
|
* framebuffer object. It must be bound when rendering to the screen using
|
|
* OpenGL.
|
|
* - `SDL_PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER`: the OpenGL view's
|
|
* renderbuffer object. It must be bound when SDL_GL_SwapWindow is called.
|
|
* - `SDL_PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER`: the OpenGL
|
|
* view's resolve framebuffer, when MSAA is used.
|
|
*
|
|
* On KMS/DRM:
|
|
*
|
|
* - `SDL_PROP_WINDOW_KMSDRM_DEVICE_INDEX_NUMBER`: the device index associated
|
|
* with the window (e.g. the X in /dev/dri/cardX)
|
|
* - `SDL_PROP_WINDOW_KMSDRM_DRM_FD_NUMBER`: the DRM FD associated with the
|
|
* window
|
|
* - `SDL_PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER`: the GBM device associated
|
|
* with the window
|
|
*
|
|
* On macOS:
|
|
*
|
|
* - `SDL_PROP_WINDOW_COCOA_WINDOW_POINTER`: the `(__unsafe_unretained)`
|
|
* NSWindow associated with the window
|
|
* - `SDL_PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER`: the NSInteger tag
|
|
* assocated with metal views on the window
|
|
*
|
|
* On OpenVR:
|
|
*
|
|
* - `SDL_PROP_WINDOW_OPENVR_OVERLAY_ID`: the OpenVR Overlay Handle ID for the
|
|
* associated overlay window.
|
|
*
|
|
* On Vivante:
|
|
*
|
|
* - `SDL_PROP_WINDOW_VIVANTE_DISPLAY_POINTER`: the EGLNativeDisplayType
|
|
* associated with the window
|
|
* - `SDL_PROP_WINDOW_VIVANTE_WINDOW_POINTER`: the EGLNativeWindowType
|
|
* associated with the window
|
|
* - `SDL_PROP_WINDOW_VIVANTE_SURFACE_POINTER`: the EGLSurface associated with
|
|
* the window
|
|
*
|
|
* On Windows:
|
|
*
|
|
* - `SDL_PROP_WINDOW_WIN32_HWND_POINTER`: the HWND associated with the window
|
|
* - `SDL_PROP_WINDOW_WIN32_HDC_POINTER`: the HDC associated with the window
|
|
* - `SDL_PROP_WINDOW_WIN32_INSTANCE_POINTER`: the HINSTANCE associated with
|
|
* the window
|
|
*
|
|
* On Wayland:
|
|
*
|
|
* Note: The `xdg_*` window objects do not internally persist across window
|
|
* show/hide calls. They will be null if the window is hidden and must be
|
|
* queried each time it is shown.
|
|
*
|
|
* - `SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER`: the wl_display associated with
|
|
* the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER`: the wl_surface associated with
|
|
* the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_VIEWPORT_POINTER`: the wp_viewport associated
|
|
* with the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_EGL_WINDOW_POINTER`: the wl_egl_window
|
|
* associated with the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_XDG_SURFACE_POINTER`: the xdg_surface associated
|
|
* with the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_POINTER`: the xdg_toplevel role
|
|
* associated with the window
|
|
* - 'SDL_PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_EXPORT_HANDLE_STRING': the export
|
|
* handle associated with the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_XDG_POPUP_POINTER`: the xdg_popup role
|
|
* associated with the window
|
|
* - `SDL_PROP_WINDOW_WAYLAND_XDG_POSITIONER_POINTER`: the xdg_positioner
|
|
* associated with the window, in popup mode
|
|
*
|
|
* On X11:
|
|
*
|
|
* - `SDL_PROP_WINDOW_X11_DISPLAY_POINTER`: the X11 Display associated with
|
|
* the window
|
|
* - `SDL_PROP_WINDOW_X11_SCREEN_NUMBER`: the screen number associated with
|
|
* the window
|
|
* - `SDL_PROP_WINDOW_X11_WINDOW_NUMBER`: the X11 Window associated with the
|
|
* window
|
|
*
|
|
* \param window the window to query.
|
|
* \returns a valid property ID on success or 0 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_PropertiesID SDLCALL SDL_GetWindowProperties(SDL_Window *window);
|
|
|
|
#define SDL_PROP_WINDOW_SHAPE_POINTER "SDL.window.shape"
|
|
#define SDL_PROP_WINDOW_HDR_ENABLED_BOOLEAN "SDL.window.HDR_enabled"
|
|
#define SDL_PROP_WINDOW_SDR_WHITE_LEVEL_FLOAT "SDL.window.SDR_white_level"
|
|
#define SDL_PROP_WINDOW_HDR_HEADROOM_FLOAT "SDL.window.HDR_headroom"
|
|
#define SDL_PROP_WINDOW_ANDROID_WINDOW_POINTER "SDL.window.android.window"
|
|
#define SDL_PROP_WINDOW_ANDROID_SURFACE_POINTER "SDL.window.android.surface"
|
|
#define SDL_PROP_WINDOW_UIKIT_WINDOW_POINTER "SDL.window.uikit.window"
|
|
#define SDL_PROP_WINDOW_UIKIT_METAL_VIEW_TAG_NUMBER "SDL.window.uikit.metal_view_tag"
|
|
#define SDL_PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER "SDL.window.uikit.opengl.framebuffer"
|
|
#define SDL_PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER "SDL.window.uikit.opengl.renderbuffer"
|
|
#define SDL_PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER "SDL.window.uikit.opengl.resolve_framebuffer"
|
|
#define SDL_PROP_WINDOW_KMSDRM_DEVICE_INDEX_NUMBER "SDL.window.kmsdrm.dev_index"
|
|
#define SDL_PROP_WINDOW_KMSDRM_DRM_FD_NUMBER "SDL.window.kmsdrm.drm_fd"
|
|
#define SDL_PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER "SDL.window.kmsdrm.gbm_dev"
|
|
#define SDL_PROP_WINDOW_COCOA_WINDOW_POINTER "SDL.window.cocoa.window"
|
|
#define SDL_PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER "SDL.window.cocoa.metal_view_tag"
|
|
#define SDL_PROP_WINDOW_OPENVR_OVERLAY_ID "SDL.window.openvr.overlay_id"
|
|
#define SDL_PROP_WINDOW_VIVANTE_DISPLAY_POINTER "SDL.window.vivante.display"
|
|
#define SDL_PROP_WINDOW_VIVANTE_WINDOW_POINTER "SDL.window.vivante.window"
|
|
#define SDL_PROP_WINDOW_VIVANTE_SURFACE_POINTER "SDL.window.vivante.surface"
|
|
#define SDL_PROP_WINDOW_WIN32_HWND_POINTER "SDL.window.win32.hwnd"
|
|
#define SDL_PROP_WINDOW_WIN32_HDC_POINTER "SDL.window.win32.hdc"
|
|
#define SDL_PROP_WINDOW_WIN32_INSTANCE_POINTER "SDL.window.win32.instance"
|
|
#define SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER "SDL.window.wayland.display"
|
|
#define SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER "SDL.window.wayland.surface"
|
|
#define SDL_PROP_WINDOW_WAYLAND_VIEWPORT_POINTER "SDL.window.wayland.viewport"
|
|
#define SDL_PROP_WINDOW_WAYLAND_EGL_WINDOW_POINTER "SDL.window.wayland.egl_window"
|
|
#define SDL_PROP_WINDOW_WAYLAND_XDG_SURFACE_POINTER "SDL.window.wayland.xdg_surface"
|
|
#define SDL_PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_POINTER "SDL.window.wayland.xdg_toplevel"
|
|
#define SDL_PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_EXPORT_HANDLE_STRING "SDL.window.wayland.xdg_toplevel_export_handle"
|
|
#define SDL_PROP_WINDOW_WAYLAND_XDG_POPUP_POINTER "SDL.window.wayland.xdg_popup"
|
|
#define SDL_PROP_WINDOW_WAYLAND_XDG_POSITIONER_POINTER "SDL.window.wayland.xdg_positioner"
|
|
#define SDL_PROP_WINDOW_X11_DISPLAY_POINTER "SDL.window.x11.display"
|
|
#define SDL_PROP_WINDOW_X11_SCREEN_NUMBER "SDL.window.x11.screen"
|
|
#define SDL_PROP_WINDOW_X11_WINDOW_NUMBER "SDL.window.x11.window"
|
|
|
|
/**
|
|
* Get the window flags.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns a mask of the SDL_WindowFlags associated with `window`.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_CreateWindow
|
|
* \sa SDL_HideWindow
|
|
* \sa SDL_MaximizeWindow
|
|
* \sa SDL_MinimizeWindow
|
|
* \sa SDL_SetWindowFullscreen
|
|
* \sa SDL_SetWindowMouseGrab
|
|
* \sa SDL_ShowWindow
|
|
*/
|
|
extern SDL_DECLSPEC SDL_WindowFlags SDLCALL SDL_GetWindowFlags(SDL_Window *window);
|
|
|
|
/**
|
|
* Set the title of a window.
|
|
*
|
|
* This string is expected to be in UTF-8 encoding.
|
|
*
|
|
* \param window the window to change.
|
|
* \param title the desired window title in UTF-8 format.
|
|
* \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_GetWindowTitle
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowTitle(SDL_Window *window, const char *title);
|
|
|
|
/**
|
|
* Get the title of a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the title of the window in UTF-8 format or "" if there is no
|
|
* title.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowTitle
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetWindowTitle(SDL_Window *window);
|
|
|
|
/**
|
|
* Set the icon for a window.
|
|
*
|
|
* If this function is passed a surface with alternate representations, the
|
|
* surface will be interpreted as the content to be used for 100% display
|
|
* scale, and the alternate representations will be used for high DPI
|
|
* situations. For example, if the original surface is 32x32, then on a 2x
|
|
* macOS display or 200% display scale on Windows, a 64x64 version of the
|
|
* image will be used, if available. If a matching version of the image isn't
|
|
* available, the closest larger size image will be downscaled to the
|
|
* appropriate size and be used instead, if available. Otherwise, the closest
|
|
* smaller image will be upscaled and be used instead.
|
|
*
|
|
* \param window the window to change.
|
|
* \param icon an SDL_Surface structure containing the icon for the window.
|
|
* \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_SetWindowIcon(SDL_Window *window, SDL_Surface *icon);
|
|
|
|
/**
|
|
* Request that the window's position be set.
|
|
*
|
|
* If the window is in an exclusive fullscreen or maximized state, this
|
|
* request has no effect.
|
|
*
|
|
* This can be used to reposition fullscreen-desktop windows onto a different
|
|
* display, however, as exclusive fullscreen windows are locked to a specific
|
|
* display, they can only be repositioned programmatically via
|
|
* SDL_SetWindowFullscreenMode().
|
|
*
|
|
* On some windowing systems this request is asynchronous and the new
|
|
* coordinates may not have have been applied immediately upon the return of
|
|
* this function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window position changes, an SDL_EVENT_WINDOW_MOVED event will be
|
|
* emitted with the window's new coordinates. Note that the new coordinates
|
|
* may not match the exact coordinates requested, as some windowing systems
|
|
* can restrict the position of the window in certain scenarios (e.g.
|
|
* constraining the position so the window is always within desktop bounds).
|
|
* Additionally, as this is just a request, it can be denied by the windowing
|
|
* system.
|
|
*
|
|
* \param window the window to reposition.
|
|
* \param x the x coordinate of the window, or `SDL_WINDOWPOS_CENTERED` or
|
|
* `SDL_WINDOWPOS_UNDEFINED`.
|
|
* \param y the y coordinate of the window, or `SDL_WINDOWPOS_CENTERED` or
|
|
* `SDL_WINDOWPOS_UNDEFINED`.
|
|
* \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_GetWindowPosition
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowPosition(SDL_Window *window, int x, int y);
|
|
|
|
/**
|
|
* Get the position of a window.
|
|
*
|
|
* This is the current position of the window as last reported by the
|
|
* windowing system.
|
|
*
|
|
* If you do not need the value for one of the positions a NULL may be passed
|
|
* in the `x` or `y` parameter.
|
|
*
|
|
* \param window the window to query.
|
|
* \param x a pointer filled in with the x position of the window, may be
|
|
* NULL.
|
|
* \param y a pointer filled in with the y position of the window, 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_SetWindowPosition
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowPosition(SDL_Window *window, int *x, int *y);
|
|
|
|
/**
|
|
* Request that the size of a window's client area be set.
|
|
*
|
|
* If the window is in a fullscreen or maximized state, this request has no
|
|
* effect.
|
|
*
|
|
* To change the exclusive fullscreen mode of a window, use
|
|
* SDL_SetWindowFullscreenMode().
|
|
*
|
|
* On some windowing systems, this request is asynchronous and the new window
|
|
* size may not have have been applied immediately upon the return of this
|
|
* function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window size changes, an SDL_EVENT_WINDOW_RESIZED event will be
|
|
* emitted with the new window dimensions. Note that the new dimensions may
|
|
* not match the exact size requested, as some windowing systems can restrict
|
|
* the window size in certain scenarios (e.g. constraining the size of the
|
|
* content area to remain within the usable desktop bounds). Additionally, as
|
|
* this is just a request, it can be denied by the windowing system.
|
|
*
|
|
* \param window the window to change.
|
|
* \param w the width of the window, must be > 0.
|
|
* \param h the height of the window, must be > 0.
|
|
* \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_GetWindowSize
|
|
* \sa SDL_SetWindowFullscreenMode
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowSize(SDL_Window *window, int w, int h);
|
|
|
|
/**
|
|
* Get the size of a window's client area.
|
|
*
|
|
* The window pixel size may differ from its window coordinate size if the
|
|
* window is on a high pixel density display. Use SDL_GetWindowSizeInPixels()
|
|
* or SDL_GetRenderOutputSize() to get the real client area size in pixels.
|
|
*
|
|
* \param window the window to query the width and height from.
|
|
* \param w a pointer filled in with the width of the window, may be NULL.
|
|
* \param h a pointer filled in with the height of the window, 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_GetRenderOutputSize
|
|
* \sa SDL_GetWindowSizeInPixels
|
|
* \sa SDL_SetWindowSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSize(SDL_Window *window, int *w, int *h);
|
|
|
|
/**
|
|
* Get the safe area for this window.
|
|
*
|
|
* 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 window
|
|
* which is safe to have interactable content. You should continue rendering
|
|
* into the rest of the window, but it should not contain visually important
|
|
* or interactible content.
|
|
*
|
|
* \param window the window to query.
|
|
* \param rect a pointer filled in with the client 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_GetWindowSafeArea(SDL_Window *window, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Request that the aspect ratio of a window's client area be set.
|
|
*
|
|
* The aspect ratio is the ratio of width divided by height, e.g. 2560x1600
|
|
* would be 1.6. Larger aspect ratios are wider and smaller aspect ratios are
|
|
* narrower.
|
|
*
|
|
* If, at the time of this request, the window in a fixed-size state, such as
|
|
* maximized or fullscreen, the request will be deferred until the window
|
|
* exits this state and becomes resizable again.
|
|
*
|
|
* On some windowing systems, this request is asynchronous and the new window
|
|
* aspect ratio may not have have been applied immediately upon the return of
|
|
* this function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window size changes, an SDL_EVENT_WINDOW_RESIZED event will be
|
|
* emitted with the new window dimensions. Note that the new dimensions may
|
|
* not match the exact aspect ratio requested, as some windowing systems can
|
|
* restrict the window size in certain scenarios (e.g. constraining the size
|
|
* of the content area to remain within the usable desktop bounds).
|
|
* Additionally, as this is just a request, it can be denied by the windowing
|
|
* system.
|
|
*
|
|
* \param window the window to change.
|
|
* \param min_aspect the minimum aspect ratio of the window, or 0.0f for no
|
|
* limit.
|
|
* \param max_aspect the maximum aspect ratio of the window, or 0.0f for no
|
|
* limit.
|
|
* \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_GetWindowAspectRatio
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowAspectRatio(SDL_Window *window, float min_aspect, float max_aspect);
|
|
|
|
/**
|
|
* Get the size of a window's client area.
|
|
*
|
|
* \param window the window to query the width and height from.
|
|
* \param min_aspect a pointer filled in with the minimum aspect ratio of the
|
|
* window, may be NULL.
|
|
* \param max_aspect a pointer filled in with the maximum aspect ratio of the
|
|
* window, 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_SetWindowAspectRatio
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowAspectRatio(SDL_Window *window, float *min_aspect, float *max_aspect);
|
|
|
|
/**
|
|
* Get the size of a window's borders (decorations) around the client area.
|
|
*
|
|
* Note: If this function fails (returns false), the size values will be
|
|
* initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the
|
|
* window in question was borderless.
|
|
*
|
|
* Note: This function may fail on systems where the window has not yet been
|
|
* decorated by the display server (for example, immediately after calling
|
|
* SDL_CreateWindow). It is recommended that you wait at least until the
|
|
* window has been presented and composited, so that the window system has a
|
|
* chance to decorate the window and provide the border dimensions to SDL.
|
|
*
|
|
* This function also returns false if getting the information is not
|
|
* supported.
|
|
*
|
|
* \param window the window to query the size values of the border
|
|
* (decorations) from.
|
|
* \param top pointer to variable for storing the size of the top border; NULL
|
|
* is permitted.
|
|
* \param left pointer to variable for storing the size of the left border;
|
|
* NULL is permitted.
|
|
* \param bottom pointer to variable for storing the size of the bottom
|
|
* border; NULL is permitted.
|
|
* \param right pointer to variable for storing the size of the right border;
|
|
* NULL is permitted.
|
|
* \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_GetWindowSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowBordersSize(SDL_Window *window, int *top, int *left, int *bottom, int *right);
|
|
|
|
/**
|
|
* Get the size of a window's client area, in pixels.
|
|
*
|
|
* \param window the window from which the drawable size should be queried.
|
|
* \param w a pointer to variable for storing the width in pixels, may be
|
|
* NULL.
|
|
* \param h a pointer to variable for storing the height in pixels, 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_CreateWindow
|
|
* \sa SDL_GetWindowSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSizeInPixels(SDL_Window *window, int *w, int *h);
|
|
|
|
/**
|
|
* Set the minimum size of a window's client area.
|
|
*
|
|
* \param window the window to change.
|
|
* \param min_w the minimum width of the window, or 0 for no limit.
|
|
* \param min_h the minimum height of the window, or 0 for no limit.
|
|
* \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_GetWindowMinimumSize
|
|
* \sa SDL_SetWindowMaximumSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowMinimumSize(SDL_Window *window, int min_w, int min_h);
|
|
|
|
/**
|
|
* Get the minimum size of a window's client area.
|
|
*
|
|
* \param window the window to query.
|
|
* \param w a pointer filled in with the minimum width of the window, may be
|
|
* NULL.
|
|
* \param h a pointer filled in with the minimum height of the window, 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_GetWindowMaximumSize
|
|
* \sa SDL_SetWindowMinimumSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowMinimumSize(SDL_Window *window, int *w, int *h);
|
|
|
|
/**
|
|
* Set the maximum size of a window's client area.
|
|
*
|
|
* \param window the window to change.
|
|
* \param max_w the maximum width of the window, or 0 for no limit.
|
|
* \param max_h the maximum height of the window, or 0 for no limit.
|
|
* \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_GetWindowMaximumSize
|
|
* \sa SDL_SetWindowMinimumSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowMaximumSize(SDL_Window *window, int max_w, int max_h);
|
|
|
|
/**
|
|
* Get the maximum size of a window's client area.
|
|
*
|
|
* \param window the window to query.
|
|
* \param w a pointer filled in with the maximum width of the window, may be
|
|
* NULL.
|
|
* \param h a pointer filled in with the maximum height of the window, 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_GetWindowMinimumSize
|
|
* \sa SDL_SetWindowMaximumSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowMaximumSize(SDL_Window *window, int *w, int *h);
|
|
|
|
/**
|
|
* Set the border state of a window.
|
|
*
|
|
* This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add
|
|
* or remove the border from the actual window. This is a no-op if the
|
|
* window's border already matches the requested state.
|
|
*
|
|
* You can't change the border state of a fullscreen window.
|
|
*
|
|
* \param window the window of which to change the border state.
|
|
* \param bordered false to remove border, true to add border.
|
|
* \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_GetWindowFlags
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowBordered(SDL_Window *window, bool bordered);
|
|
|
|
/**
|
|
* Set the user-resizable state of a window.
|
|
*
|
|
* This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and
|
|
* allow/disallow user resizing of the window. This is a no-op if the window's
|
|
* resizable state already matches the requested state.
|
|
*
|
|
* You can't change the resizable state of a fullscreen window.
|
|
*
|
|
* \param window the window of which to change the resizable state.
|
|
* \param resizable true to allow resizing, false to disallow.
|
|
* \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_GetWindowFlags
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowResizable(SDL_Window *window, bool resizable);
|
|
|
|
/**
|
|
* Set the window to always be above the others.
|
|
*
|
|
* This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This
|
|
* will bring the window to the front and keep the window above the rest.
|
|
*
|
|
* \param window the window of which to change the always on top state.
|
|
* \param on_top true to set the window always on top, false to disable.
|
|
* \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_GetWindowFlags
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window *window, bool on_top);
|
|
|
|
/**
|
|
* Show a window.
|
|
*
|
|
* \param window the window to show.
|
|
* \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_HideWindow
|
|
* \sa SDL_RaiseWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_ShowWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Hide a window.
|
|
*
|
|
* \param window the window to hide.
|
|
* \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_ShowWindow
|
|
* \sa SDL_WINDOW_HIDDEN
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_HideWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Request that a window be raised above other windows and gain the input
|
|
* focus.
|
|
*
|
|
* The result of this request is subject to desktop window manager policy,
|
|
* particularly if raising the requested window would result in stealing focus
|
|
* from another application. If the window is successfully raised and gains
|
|
* input focus, an SDL_EVENT_WINDOW_FOCUS_GAINED event will be emitted, and
|
|
* the window will have the SDL_WINDOW_INPUT_FOCUS flag set.
|
|
*
|
|
* \param window the window to raise.
|
|
* \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_RaiseWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Request that the window be made as large as possible.
|
|
*
|
|
* Non-resizable windows can't be maximized. The window must have the
|
|
* SDL_WINDOW_RESIZABLE flag set, or this will have no effect.
|
|
*
|
|
* On some windowing systems this request is asynchronous and the new window
|
|
* state may not have have been applied immediately upon the return of this
|
|
* function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window state changes, an SDL_EVENT_WINDOW_MAXIMIZED event will be
|
|
* emitted. Note that, as this is just a request, the windowing system can
|
|
* deny the state change.
|
|
*
|
|
* When maximizing a window, whether the constraints set via
|
|
* SDL_SetWindowMaximumSize() are honored depends on the policy of the window
|
|
* manager. Win32 and macOS enforce the constraints when maximizing, while X11
|
|
* and Wayland window managers may vary.
|
|
*
|
|
* \param window the window to maximize.
|
|
* \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_MinimizeWindow
|
|
* \sa SDL_RestoreWindow
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_MaximizeWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Request that the window be minimized to an iconic representation.
|
|
*
|
|
* If the window is in a fullscreen state, this request has no direct effect.
|
|
* It may alter the state the window is returned to when leaving fullscreen.
|
|
*
|
|
* On some windowing systems this request is asynchronous and the new window
|
|
* state may not have been applied immediately upon the return of this
|
|
* function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window state changes, an SDL_EVENT_WINDOW_MINIMIZED event will be
|
|
* emitted. Note that, as this is just a request, the windowing system can
|
|
* deny the state change.
|
|
*
|
|
* \param window the window to minimize.
|
|
* \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_MaximizeWindow
|
|
* \sa SDL_RestoreWindow
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_MinimizeWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Request that the size and position of a minimized or maximized window be
|
|
* restored.
|
|
*
|
|
* If the window is in a fullscreen state, this request has no direct effect.
|
|
* It may alter the state the window is returned to when leaving fullscreen.
|
|
*
|
|
* On some windowing systems this request is asynchronous and the new window
|
|
* state may not have have been applied immediately upon the return of this
|
|
* function. If an immediate change is required, call SDL_SyncWindow() to
|
|
* block until the changes have taken effect.
|
|
*
|
|
* When the window state changes, an SDL_EVENT_WINDOW_RESTORED event will be
|
|
* emitted. Note that, as this is just a request, the windowing system can
|
|
* deny the state change.
|
|
*
|
|
* \param window the window to restore.
|
|
* \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_MaximizeWindow
|
|
* \sa SDL_MinimizeWindow
|
|
* \sa SDL_SyncWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RestoreWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Request that the window's fullscreen state be changed.
|
|
*
|
|
* By default a window in fullscreen state uses borderless fullscreen desktop
|
|
* mode, but a specific exclusive display mode can be set using
|
|
* SDL_SetWindowFullscreenMode().
|
|
*
|
|
* On some windowing systems this request is asynchronous and the new
|
|
* fullscreen state may not have have been applied immediately upon the return
|
|
* of this function. If an immediate change is required, call SDL_SyncWindow()
|
|
* to block until the changes have taken effect.
|
|
*
|
|
* When the window state changes, an SDL_EVENT_WINDOW_ENTER_FULLSCREEN or
|
|
* SDL_EVENT_WINDOW_LEAVE_FULLSCREEN event will be emitted. Note that, as this
|
|
* is just a request, it can be denied by the windowing system.
|
|
*
|
|
* \param window the window to change.
|
|
* \param fullscreen true for fullscreen mode, false for windowed 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_GetWindowFullscreenMode
|
|
* \sa SDL_SetWindowFullscreenMode
|
|
* \sa SDL_SyncWindow
|
|
* \sa SDL_WINDOW_FULLSCREEN
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowFullscreen(SDL_Window *window, bool fullscreen);
|
|
|
|
/**
|
|
* Block until any pending window state is finalized.
|
|
*
|
|
* On asynchronous windowing systems, this acts as a synchronization barrier
|
|
* for pending window state. It will attempt to wait until any pending window
|
|
* state has been applied and is guaranteed to return within finite time. Note
|
|
* that for how long it can potentially block depends on the underlying window
|
|
* system, as window state changes may involve somewhat lengthy animations
|
|
* that must complete before the window is in its final requested state.
|
|
*
|
|
* On windowing systems where changes are immediate, this does nothing.
|
|
*
|
|
* \param window the window for which to wait for the pending state to be
|
|
* applied.
|
|
* \returns true on success or false if the operation timed out before the
|
|
* window was in the requested state.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowSize
|
|
* \sa SDL_SetWindowPosition
|
|
* \sa SDL_SetWindowFullscreen
|
|
* \sa SDL_MinimizeWindow
|
|
* \sa SDL_MaximizeWindow
|
|
* \sa SDL_RestoreWindow
|
|
* \sa SDL_HINT_VIDEO_SYNC_WINDOW_OPERATIONS
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SyncWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Return whether the window has a surface associated with it.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns true if there is a surface associated with the window, or false
|
|
* otherwise.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetWindowSurface
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_WindowHasSurface(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the SDL surface associated with the window.
|
|
*
|
|
* A new surface will be created with the optimal format for the window, if
|
|
* necessary. This surface will be freed when the window is destroyed. Do not
|
|
* free this surface.
|
|
*
|
|
* This surface will be invalidated if the window is resized. After resizing a
|
|
* window this function must be called again to return a valid surface.
|
|
*
|
|
* You may not combine this with 3D or the rendering API on this window.
|
|
*
|
|
* This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the surface associated with the window, 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_DestroyWindowSurface
|
|
* \sa SDL_WindowHasSurface
|
|
* \sa SDL_UpdateWindowSurface
|
|
* \sa SDL_UpdateWindowSurfaceRects
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window *window);
|
|
|
|
/**
|
|
* Toggle VSync for the window surface.
|
|
*
|
|
* When a window surface is created, vsync defaults to
|
|
* SDL_WINDOW_SURFACE_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_WINDOW_SURFACE_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync),
|
|
* or SDL_WINDOW_SURFACE_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 window the window.
|
|
* \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_GetWindowSurfaceVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowSurfaceVSync(SDL_Window *window, int vsync);
|
|
|
|
#define SDL_WINDOW_SURFACE_VSYNC_DISABLED 0
|
|
#define SDL_WINDOW_SURFACE_VSYNC_ADAPTIVE (-1)
|
|
|
|
/**
|
|
* Get VSync for the window surface.
|
|
*
|
|
* \param window the window to query.
|
|
* \param vsync an int filled with the current vertical refresh sync interval.
|
|
* See SDL_SetWindowSurfaceVSync() 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_SetWindowSurfaceVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSurfaceVSync(SDL_Window *window, int *vsync);
|
|
|
|
/**
|
|
* Copy the window surface to the screen.
|
|
*
|
|
* This is the function you use to reflect any changes to the surface on the
|
|
* screen.
|
|
*
|
|
* This function is equivalent to the SDL 1.2 API SDL_Flip().
|
|
*
|
|
* \param window the window to update.
|
|
* \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_GetWindowSurface
|
|
* \sa SDL_UpdateWindowSurfaceRects
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateWindowSurface(SDL_Window *window);
|
|
|
|
/**
|
|
* Copy areas of the window surface to the screen.
|
|
*
|
|
* This is the function you use to reflect changes to portions of the surface
|
|
* on the screen.
|
|
*
|
|
* This function is equivalent to the SDL 1.2 API SDL_UpdateRects().
|
|
*
|
|
* Note that this function will update _at least_ the rectangles specified,
|
|
* but this is only intended as an optimization; in practice, this might
|
|
* update more of the screen (or all of the screen!), depending on what method
|
|
* SDL uses to send pixels to the system.
|
|
*
|
|
* \param window the window to update.
|
|
* \param rects an array of SDL_Rect structures representing areas of the
|
|
* surface to copy, in pixels.
|
|
* \param numrects 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_GetWindowSurface
|
|
* \sa SDL_UpdateWindowSurface
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window *window, const SDL_Rect *rects, int numrects);
|
|
|
|
/**
|
|
* Destroy the surface associated with the window.
|
|
*
|
|
* \param window the window to update.
|
|
* \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_GetWindowSurface
|
|
* \sa SDL_WindowHasSurface
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_DestroyWindowSurface(SDL_Window *window);
|
|
|
|
/**
|
|
* Set a window's keyboard grab mode.
|
|
*
|
|
* Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or
|
|
* the Meta/Super key. Note that not all system keyboard shortcuts can be
|
|
* captured by applications (one example is Ctrl+Alt+Del on Windows).
|
|
*
|
|
* This is primarily intended for specialized applications such as VNC clients
|
|
* or VM frontends. Normal games should not use keyboard grab.
|
|
*
|
|
* When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the
|
|
* window is full-screen to ensure the user is not trapped in your
|
|
* application. If you have a custom keyboard shortcut to exit fullscreen
|
|
* mode, you may suppress this behavior with
|
|
* `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`.
|
|
*
|
|
* If the caller enables a grab while another window is currently grabbed, the
|
|
* other window loses its grab in favor of the caller's window.
|
|
*
|
|
* \param window the window for which the keyboard grab mode should be set.
|
|
* \param grabbed this is true to grab keyboard, and false to release.
|
|
* \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_GetWindowKeyboardGrab
|
|
* \sa SDL_SetWindowMouseGrab
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window *window, bool grabbed);
|
|
|
|
/**
|
|
* Set a window's mouse grab mode.
|
|
*
|
|
* Mouse grab confines the mouse cursor to the window.
|
|
*
|
|
* \param window the window for which the mouse grab mode should be set.
|
|
* \param grabbed this is true to grab mouse, and false to release.
|
|
* \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_GetWindowMouseRect
|
|
* \sa SDL_SetWindowMouseRect
|
|
* \sa SDL_SetWindowMouseGrab
|
|
* \sa SDL_SetWindowKeyboardGrab
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowMouseGrab(SDL_Window *window, bool grabbed);
|
|
|
|
/**
|
|
* Get a window's keyboard grab mode.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns true if keyboard is grabbed, and false otherwise.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowKeyboardGrab
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window *window);
|
|
|
|
/**
|
|
* Get a window's mouse grab mode.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns true if mouse is grabbed, and false otherwise.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GetWindowMouseRect
|
|
* \sa SDL_SetWindowMouseRect
|
|
* \sa SDL_SetWindowMouseGrab
|
|
* \sa SDL_SetWindowKeyboardGrab
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the window that currently has an input grab enabled.
|
|
*
|
|
* \returns the window if input is grabbed or NULL otherwise.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowMouseGrab
|
|
* \sa SDL_SetWindowKeyboardGrab
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void);
|
|
|
|
/**
|
|
* Confines the cursor to the specified area of a window.
|
|
*
|
|
* Note that this does NOT grab the cursor, it only defines the area a cursor
|
|
* is restricted to when the window has mouse focus.
|
|
*
|
|
* \param window the window that will be associated with the barrier.
|
|
* \param rect a rectangle area in window-relative coordinates. If NULL the
|
|
* barrier for the specified window will be destroyed.
|
|
* \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_GetWindowMouseRect
|
|
* \sa SDL_GetWindowMouseGrab
|
|
* \sa SDL_SetWindowMouseGrab
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowMouseRect(SDL_Window *window, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the mouse confinement rectangle of a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns a pointer to the mouse confinement rectangle of a window, or NULL
|
|
* if there isn't one.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_SetWindowMouseRect
|
|
* \sa SDL_GetWindowMouseGrab
|
|
* \sa SDL_SetWindowMouseGrab
|
|
*/
|
|
extern SDL_DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window *window);
|
|
|
|
/**
|
|
* Set the opacity for a window.
|
|
*
|
|
* The parameter `opacity` will be clamped internally between 0.0f
|
|
* (transparent) and 1.0f (opaque).
|
|
*
|
|
* This function also returns false if setting the opacity isn't supported.
|
|
*
|
|
* \param window the window which will be made transparent or opaque.
|
|
* \param opacity the opacity value (0.0f - transparent, 1.0f - opaque).
|
|
* \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_GetWindowOpacity
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowOpacity(SDL_Window *window, float opacity);
|
|
|
|
/**
|
|
* Get the opacity of a window.
|
|
*
|
|
* If transparency isn't supported on this platform, opacity will be returned
|
|
* as 1.0f without error.
|
|
*
|
|
* \param window the window to get the current opacity value from.
|
|
* \returns the opacity, (0.0f - transparent, 1.0f - opaque), or -1.0f 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_SetWindowOpacity
|
|
*/
|
|
extern SDL_DECLSPEC float SDLCALL SDL_GetWindowOpacity(SDL_Window *window);
|
|
|
|
/**
|
|
* Set the window as a child of a parent window.
|
|
*
|
|
* If the window is already the child of an existing window, it will be
|
|
* reparented to the new owner. Setting the parent window to NULL unparents
|
|
* the window and removes child window status.
|
|
*
|
|
* If a parent window is hidden or destroyed, the operation will be
|
|
* recursively applied to child windows. Child windows hidden with the parent
|
|
* that did not have their hidden status explicitly set will be restored when
|
|
* the parent is shown.
|
|
*
|
|
* Attempting to set the parent of a window that is currently in the modal
|
|
* state will fail. Use SDL_SetWindowModal() to cancel the modal status before
|
|
* attempting to change the parent.
|
|
*
|
|
* Popup windows cannot change parents and attempts to do so will fail.
|
|
*
|
|
* Setting a parent window that is currently the sibling or descendent of the
|
|
* child window results in undefined behavior.
|
|
*
|
|
* \param window the window that should become the child of a parent.
|
|
* \param parent the new parent window for the child window.
|
|
* \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_SetWindowModal
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowParent(SDL_Window *window, SDL_Window *parent);
|
|
|
|
/**
|
|
* Toggle the state of the window as modal.
|
|
*
|
|
* To enable modal status on a window, the window must currently be the child
|
|
* window of a parent, or toggling modal status on will fail.
|
|
*
|
|
* \param window the window on which to set the modal state.
|
|
* \param modal true to toggle modal status on, false to toggle it off.
|
|
* \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_SetWindowParent
|
|
* \sa SDL_WINDOW_MODAL
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowModal(SDL_Window *window, bool modal);
|
|
|
|
/**
|
|
* Set whether the window may have input focus.
|
|
*
|
|
* \param window the window to set focusable state.
|
|
* \param focusable true to allow input focus, false to not allow input focus.
|
|
* \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_SetWindowFocusable(SDL_Window *window, bool focusable);
|
|
|
|
|
|
/**
|
|
* Display the system-level window menu.
|
|
*
|
|
* This default window menu is provided by the system and on some platforms
|
|
* provides functionality for setting or changing privileged state on the
|
|
* window, such as moving it between workspaces or displays, or toggling the
|
|
* always-on-top property.
|
|
*
|
|
* On platforms or desktops where this is unsupported, this function does
|
|
* nothing.
|
|
*
|
|
* \param window the window for which the menu will be displayed.
|
|
* \param x the x coordinate of the menu, relative to the origin (top-left) of
|
|
* the client area.
|
|
* \param y the y coordinate of the menu, relative to the origin (top-left) of
|
|
* the client 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.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_ShowWindowSystemMenu(SDL_Window *window, int x, int y);
|
|
|
|
/**
|
|
* Possible return values from the SDL_HitTest callback.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This enum is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_HitTest
|
|
*/
|
|
typedef enum SDL_HitTestResult
|
|
{
|
|
SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */
|
|
SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */
|
|
SDL_HITTEST_RESIZE_TOPLEFT, /**< Region is the resizable top-left corner border. */
|
|
SDL_HITTEST_RESIZE_TOP, /**< Region is the resizable top border. */
|
|
SDL_HITTEST_RESIZE_TOPRIGHT, /**< Region is the resizable top-right corner border. */
|
|
SDL_HITTEST_RESIZE_RIGHT, /**< Region is the resizable right border. */
|
|
SDL_HITTEST_RESIZE_BOTTOMRIGHT, /**< Region is the resizable bottom-right corner border. */
|
|
SDL_HITTEST_RESIZE_BOTTOM, /**< Region is the resizable bottom border. */
|
|
SDL_HITTEST_RESIZE_BOTTOMLEFT, /**< Region is the resizable bottom-left corner border. */
|
|
SDL_HITTEST_RESIZE_LEFT /**< Region is the resizable left border. */
|
|
} SDL_HitTestResult;
|
|
|
|
/**
|
|
* Callback used for hit-testing.
|
|
*
|
|
* \param win the SDL_Window where hit-testing was set on.
|
|
* \param area an SDL_Point which should be hit-tested.
|
|
* \param data what was passed as `callback_data` to SDL_SetWindowHitTest().
|
|
* \returns an SDL_HitTestResult value.
|
|
*
|
|
* \sa SDL_SetWindowHitTest
|
|
*/
|
|
typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win,
|
|
const SDL_Point *area,
|
|
void *data);
|
|
|
|
/**
|
|
* Provide a callback that decides if a window region has special properties.
|
|
*
|
|
* Normally windows are dragged and resized by decorations provided by the
|
|
* system window manager (a title bar, borders, etc), but for some apps, it
|
|
* makes sense to drag them from somewhere else inside the window itself; for
|
|
* example, one might have a borderless window that wants to be draggable from
|
|
* any part, or simulate its own title bar, etc.
|
|
*
|
|
* This function lets the app provide a callback that designates pieces of a
|
|
* given window as special. This callback is run during event processing if we
|
|
* need to tell the OS to treat a region of the window specially; the use of
|
|
* this callback is known as "hit testing."
|
|
*
|
|
* Mouse input may not be delivered to your application if it is within a
|
|
* special area; the OS will often apply that input to moving the window or
|
|
* resizing the window and not deliver it to the application.
|
|
*
|
|
* Specifying NULL for a callback disables hit-testing. Hit-testing is
|
|
* disabled by default.
|
|
*
|
|
* Platforms that don't support this functionality will return false
|
|
* unconditionally, even if you're attempting to disable hit-testing.
|
|
*
|
|
* Your callback may fire at any time, and its firing does not indicate any
|
|
* specific behavior (for example, on Windows, this certainly might fire when
|
|
* the OS is deciding whether to drag your window, but it fires for lots of
|
|
* other reasons, too, some unrelated to anything you probably care about _and
|
|
* when the mouse isn't actually at the location it is testing_). Since this
|
|
* can fire at any time, you should try to keep your callback efficient,
|
|
* devoid of allocations, etc.
|
|
*
|
|
* \param window the window to set hit-testing on.
|
|
* \param callback the function to call when doing a hit-test.
|
|
* \param callback_data an app-defined void pointer passed to **callback**.
|
|
* \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_SetWindowHitTest(SDL_Window *window, SDL_HitTest callback, void *callback_data);
|
|
|
|
/**
|
|
* Set the shape of a transparent window.
|
|
*
|
|
* This sets the alpha channel of a transparent window and any fully
|
|
* transparent areas are also transparent to mouse clicks. If you are using
|
|
* something besides the SDL render API, then you are responsible for drawing
|
|
* the alpha channel of the window to match the shape alpha channel to get
|
|
* consistent cross-platform results.
|
|
*
|
|
* The shape is copied inside this function, so you can free it afterwards. If
|
|
* your shape surface changes, you should call SDL_SetWindowShape() again to
|
|
* update the window. This is an expensive operation, so should be done
|
|
* sparingly.
|
|
*
|
|
* The window must have been created with the SDL_WINDOW_TRANSPARENT flag.
|
|
*
|
|
* \param window the window.
|
|
* \param shape the surface representing the shape of the window, or NULL to
|
|
* remove any current shape.
|
|
* \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_SetWindowShape(SDL_Window *window, SDL_Surface *shape);
|
|
|
|
/**
|
|
* Request a window to demand attention from the user.
|
|
*
|
|
* \param window the window to be flashed.
|
|
* \param operation the operation to perform.
|
|
* \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_FlashWindow(SDL_Window *window, SDL_FlashOperation operation);
|
|
|
|
/**
|
|
* Destroy a window.
|
|
*
|
|
* Any child windows owned by the window will be recursively destroyed as
|
|
* well.
|
|
*
|
|
* Note that on some platforms, the visible window may not actually be removed
|
|
* from the screen until the SDL event loop is pumped again, even though the
|
|
* SDL_Window is no longer valid after this call.
|
|
*
|
|
* \param window the window 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_CreatePopupWindow
|
|
* \sa SDL_CreateWindow
|
|
* \sa SDL_CreateWindowWithProperties
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window *window);
|
|
|
|
|
|
/**
|
|
* Check whether the screensaver is currently enabled.
|
|
*
|
|
* The screensaver is disabled by default.
|
|
*
|
|
* The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`.
|
|
*
|
|
* \returns true if the screensaver is enabled, false if it is disabled.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_DisableScreenSaver
|
|
* \sa SDL_EnableScreenSaver
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_ScreenSaverEnabled(void);
|
|
|
|
/**
|
|
* Allow the screen to be blanked by a screen saver.
|
|
*
|
|
* \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_DisableScreenSaver
|
|
* \sa SDL_ScreenSaverEnabled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_EnableScreenSaver(void);
|
|
|
|
/**
|
|
* Prevent the screen from being blanked by a screen saver.
|
|
*
|
|
* If you disable the screensaver, it is automatically re-enabled when SDL
|
|
* quits.
|
|
*
|
|
* The screensaver is disabled by default, but this may by changed by
|
|
* SDL_HINT_VIDEO_ALLOW_SCREENSAVER.
|
|
*
|
|
* \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_EnableScreenSaver
|
|
* \sa SDL_ScreenSaverEnabled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_DisableScreenSaver(void);
|
|
|
|
|
|
/**
|
|
* \name OpenGL support functions
|
|
*/
|
|
/* @{ */
|
|
|
|
/**
|
|
* Dynamically load an OpenGL library.
|
|
*
|
|
* This should be done after initializing the video driver, but before
|
|
* creating any OpenGL windows. If no OpenGL library is loaded, the default
|
|
* library will be loaded upon creation of the first OpenGL window.
|
|
*
|
|
* If you do this, you need to retrieve all of the GL functions used in your
|
|
* program from the dynamic library using SDL_GL_GetProcAddress().
|
|
*
|
|
* \param path the platform dependent OpenGL library name, or NULL to open the
|
|
* default OpenGL library.
|
|
* \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_GL_GetProcAddress
|
|
* \sa SDL_GL_UnloadLibrary
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_LoadLibrary(const char *path);
|
|
|
|
/**
|
|
* Get an OpenGL function by name.
|
|
*
|
|
* If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all
|
|
* GL functions must be retrieved this way. Usually this is used to retrieve
|
|
* function pointers to OpenGL extensions.
|
|
*
|
|
* There are some quirks to looking up OpenGL functions that require some
|
|
* extra care from the application. If you code carefully, you can handle
|
|
* these quirks without any platform-specific code, though:
|
|
*
|
|
* - On Windows, function pointers are specific to the current GL context;
|
|
* this means you need to have created a GL context and made it current
|
|
* before calling SDL_GL_GetProcAddress(). If you recreate your context or
|
|
* create a second context, you should assume that any existing function
|
|
* pointers aren't valid to use with it. This is (currently) a
|
|
* Windows-specific limitation, and in practice lots of drivers don't suffer
|
|
* this limitation, but it is still the way the wgl API is documented to
|
|
* work and you should expect crashes if you don't respect it. Store a copy
|
|
* of the function pointers that comes and goes with context lifespan.
|
|
* - On X11, function pointers returned by this function are valid for any
|
|
* context, and can even be looked up before a context is created at all.
|
|
* This means that, for at least some common OpenGL implementations, if you
|
|
* look up a function that doesn't exist, you'll get a non-NULL result that
|
|
* is _NOT_ safe to call. You must always make sure the function is actually
|
|
* available for a given GL context before calling it, by checking for the
|
|
* existence of the appropriate extension with SDL_GL_ExtensionSupported(),
|
|
* or verifying that the version of OpenGL you're using offers the function
|
|
* as core functionality.
|
|
* - Some OpenGL drivers, on all platforms, *will* return NULL if a function
|
|
* isn't supported, but you can't count on this behavior. Check for
|
|
* extensions you use, and if you get a NULL anyway, act as if that
|
|
* extension wasn't available. This is probably a bug in the driver, but you
|
|
* can code defensively for this scenario anyhow.
|
|
* - Just because you're on Linux/Unix, don't assume you'll be using X11.
|
|
* Next-gen display servers are waiting to replace it, and may or may not
|
|
* make the same promises about function pointers.
|
|
* - OpenGL function pointers must be declared `APIENTRY` as in the example
|
|
* code. This will ensure the proper calling convention is followed on
|
|
* platforms where this matters (Win32) thereby avoiding stack corruption.
|
|
*
|
|
* \param proc the name of an OpenGL function.
|
|
* \returns a pointer to the named OpenGL function. The returned pointer
|
|
* should be cast to the appropriate function signature.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GL_ExtensionSupported
|
|
* \sa SDL_GL_LoadLibrary
|
|
* \sa SDL_GL_UnloadLibrary
|
|
*/
|
|
extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_GL_GetProcAddress(const char *proc);
|
|
|
|
/**
|
|
* Get an EGL library function by name.
|
|
*
|
|
* If an EGL library is loaded, this function allows applications to get entry
|
|
* points for EGL functions. This is useful to provide to an EGL API and
|
|
* extension loader.
|
|
*
|
|
* \param proc the name of an EGL function.
|
|
* \returns a pointer to the named EGL function. The returned pointer should
|
|
* be cast to the appropriate function signature.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_EGL_GetCurrentDisplay
|
|
*/
|
|
extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_EGL_GetProcAddress(const char *proc);
|
|
|
|
/**
|
|
* Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary().
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GL_LoadLibrary
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void);
|
|
|
|
/**
|
|
* Check if an OpenGL extension is supported for the current context.
|
|
*
|
|
* This function operates on the current GL context; you must have created a
|
|
* context and it must be current before calling this function. Do not assume
|
|
* that all contexts you create will have the same set of extensions
|
|
* available, or that recreating an existing context will offer the same
|
|
* extensions again.
|
|
*
|
|
* While it's probably not a massive overhead, this function is not an O(1)
|
|
* operation. Check the extensions you care about after creating the GL
|
|
* context and save that information somewhere instead of calling the function
|
|
* every time you need to know.
|
|
*
|
|
* \param extension the name of the extension to check.
|
|
* \returns true if the extension is supported, false otherwise.
|
|
*
|
|
* \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_GL_ExtensionSupported(const char *extension);
|
|
|
|
/**
|
|
* Reset all previously set OpenGL context attributes to their default values.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*
|
|
* \sa SDL_GL_GetAttribute
|
|
* \sa SDL_GL_SetAttribute
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);
|
|
|
|
/**
|
|
* Set an OpenGL window attribute before window creation.
|
|
*
|
|
* This function sets the OpenGL attribute `attr` to `value`. The requested
|
|
* attributes should be set before creating an OpenGL window. You should use
|
|
* SDL_GL_GetAttribute() to check the values after creating the OpenGL
|
|
* context, since the values obtained can differ from the requested ones.
|
|
*
|
|
* \param attr an SDL_GLAttr enum value specifying the OpenGL attribute to
|
|
* set.
|
|
* \param value the desired value for the attribute.
|
|
* \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_GL_GetAttribute
|
|
* \sa SDL_GL_ResetAttributes
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_SetAttribute(SDL_GLAttr attr, int value);
|
|
|
|
/**
|
|
* Get the actual value for an attribute from the current context.
|
|
*
|
|
* \param attr an SDL_GLAttr enum value specifying the OpenGL attribute to
|
|
* get.
|
|
* \param value a pointer filled in with the current value of `attr`.
|
|
* \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_GL_ResetAttributes
|
|
* \sa SDL_GL_SetAttribute
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_GetAttribute(SDL_GLAttr attr, int *value);
|
|
|
|
/**
|
|
* Create an OpenGL context for an OpenGL window, and make it current.
|
|
*
|
|
* Windows users new to OpenGL should note that, for historical reasons, GL
|
|
* functions added after OpenGL version 1.1 are not available by default.
|
|
* Those functions must be loaded at run-time, either with an OpenGL
|
|
* extension-handling library or with SDL_GL_GetProcAddress() and its related
|
|
* functions.
|
|
*
|
|
* SDL_GLContext is opaque to the application.
|
|
*
|
|
* \param window the window to associate with the context.
|
|
* \returns the OpenGL context associated with `window` 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_GL_DestroyContext
|
|
* \sa SDL_GL_MakeCurrent
|
|
*/
|
|
extern SDL_DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window *window);
|
|
|
|
/**
|
|
* Set up an OpenGL context for rendering into an OpenGL window.
|
|
*
|
|
* The context must have been created with a compatible window.
|
|
*
|
|
* \param window the window to associate with the context.
|
|
* \param context the OpenGL context to associate with the window.
|
|
* \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_GL_CreateContext
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_MakeCurrent(SDL_Window *window, SDL_GLContext context);
|
|
|
|
/**
|
|
* Get the currently active OpenGL window.
|
|
*
|
|
* \returns the currently active OpenGL window 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_Window * SDLCALL SDL_GL_GetCurrentWindow(void);
|
|
|
|
/**
|
|
* Get the currently active OpenGL context.
|
|
*
|
|
* \returns the currently active OpenGL context 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_GL_MakeCurrent
|
|
*/
|
|
extern SDL_DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void);
|
|
|
|
/**
|
|
* Get the currently active EGL display.
|
|
*
|
|
* \returns the currently active EGL display 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_EGLDisplay SDLCALL SDL_EGL_GetCurrentDisplay(void);
|
|
|
|
/**
|
|
* Get the currently active EGL config.
|
|
*
|
|
* \returns the currently active EGL config 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_EGLConfig SDLCALL SDL_EGL_GetCurrentConfig(void);
|
|
|
|
/**
|
|
* Get the EGL surface associated with the window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the EGLSurface pointer associated with the window, or NULL on
|
|
* failure.
|
|
*
|
|
* \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_EGLSurface SDLCALL SDL_EGL_GetWindowSurface(SDL_Window *window);
|
|
|
|
/**
|
|
* Sets the callbacks for defining custom EGLAttrib arrays for EGL
|
|
* initialization.
|
|
*
|
|
* Callbacks that aren't needed can be set to NULL.
|
|
*
|
|
* NOTE: These callback pointers will be reset after SDL_GL_ResetAttributes.
|
|
*
|
|
* \param platformAttribCallback callback for attributes to pass to
|
|
* eglGetPlatformDisplay. May be NULL.
|
|
* \param surfaceAttribCallback callback for attributes to pass to
|
|
* eglCreateSurface. May be NULL.
|
|
* \param contextAttribCallback callback for attributes to pass to
|
|
* eglCreateContext. May be NULL.
|
|
* \param userdata a pointer that is passed to the callbacks.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.1.3.
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_EGL_SetAttributeCallbacks(SDL_EGLAttribArrayCallback platformAttribCallback,
|
|
SDL_EGLIntArrayCallback surfaceAttribCallback,
|
|
SDL_EGLIntArrayCallback contextAttribCallback, void *userdata);
|
|
|
|
/**
|
|
* Set the swap interval for the current OpenGL context.
|
|
*
|
|
* Some systems allow specifying -1 for the interval, to enable adaptive
|
|
* vsync. Adaptive vsync works the same as vsync, but if you've already missed
|
|
* the vertical retrace for a given frame, it swaps buffers immediately, which
|
|
* might be less jarring for the user during occasional framerate drops. If an
|
|
* application requests adaptive vsync and the system does not support it,
|
|
* this function will fail and return false. In such a case, you should
|
|
* probably retry the call with 1 for the interval.
|
|
*
|
|
* Adaptive vsync is implemented for some glX drivers with
|
|
* GLX_EXT_swap_control_tear, and for some Windows drivers with
|
|
* WGL_EXT_swap_control_tear.
|
|
*
|
|
* Read more on the Khronos wiki:
|
|
* https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync
|
|
*
|
|
* \param interval 0 for immediate updates, 1 for updates synchronized with
|
|
* the vertical retrace, -1 for adaptive vsync.
|
|
* \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_GL_GetSwapInterval
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_SetSwapInterval(int interval);
|
|
|
|
/**
|
|
* Get the swap interval for the current OpenGL context.
|
|
*
|
|
* If the system can't determine the swap interval, or there isn't a valid
|
|
* current context, this function will set *interval to 0 as a safe default.
|
|
*
|
|
* \param interval output interval value. 0 if there is no vertical retrace
|
|
* synchronization, 1 if the buffer swap is synchronized with
|
|
* the vertical retrace, and -1 if late swaps happen
|
|
* immediately instead of waiting for the next retrace.
|
|
* \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_GL_SetSwapInterval
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_GetSwapInterval(int *interval);
|
|
|
|
/**
|
|
* Update a window with OpenGL rendering.
|
|
*
|
|
* This is used with double-buffered OpenGL contexts, which are the default.
|
|
*
|
|
* On macOS, make sure you bind 0 to the draw framebuffer before swapping the
|
|
* window, otherwise nothing will happen. If you aren't using
|
|
* glBindFramebuffer(), this is the default and you won't have to do anything
|
|
* extra.
|
|
*
|
|
* \param window the window to change.
|
|
* \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_GL_SwapWindow(SDL_Window *window);
|
|
|
|
/**
|
|
* Delete an OpenGL context.
|
|
*
|
|
* \param context the OpenGL context to be deleted.
|
|
* \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_GL_CreateContext
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GL_DestroyContext(SDL_GLContext context);
|
|
|
|
/* @} *//* OpenGL support functions */
|
|
|
|
|
|
/* Ends C function definitions when using C++ */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#include <SDL3/SDL_close_code.h>
|
|
|
|
#endif /* SDL_video_h_ */
|