90fd2a3cb Sync SDL3 wiki -> header
edd08771a wayland: Add xdg_toplevel v7 edge constraint support
113475acb wayland: Add multi-seat support
4093e4a19 Fixed process I/O redirection to NUL on Windows
c025fdbb7 Add the CREATE_NO_WINDOW flag for background processes
8a57c83ff Updated to GameInput v1.1
f35a2736b Don't reset the render target when invalidating GPU renderer cache state
47e52ab37 Sync SDL3 wiki -> header
6a3dbe34d Sync SDL3 wiki -> header
d84c000ac Sync SDL3 wiki -> header
98e76d283 Fixed conflict when linking both SDL and hidapi statically
f6db5ba4c Add Turtle Beach VelocityOne
a1016bd06 Allow 01-joystick-polling example to be resizable
60fb1b554 Fix IMU orientations for 8bitdo wireless 2 controller in bluetooth mode
b0860fb0c Disable EGL in Emscripten builds
f303ccca6 Updated the report size for Ultimate 2 Wireless firmware v1.02
0add03780 [Windows]: dialog: Add `OFN_OVERWRITEPROMPT` to save dialogs (#12782)
a390f5716 docs: improve man page generation
93ac1e689 Fixed non-XBox controllers being detected as Series X controllers
d29bb902f Don't treat the Keychron K1 Pro System Control keyboard as a joystick
ab57ef9d7 update sdlgenblit.pl after PR/12769
b0a0d236d fix sdlgenblit.pl so that it actually matches the generated source
0fdfa925f rename local pointer vars 'pixel' to 'pixels'
46c314cc3 Revert "bool is 4 bytes in Apple MacOS X 32 bit PPC ABI"
2abfb92c5 Sync SDL3 wiki -> header
97eddacd7 Use the actual value of EGL_PLATFORM_DEVICE_EXT if it's not defined
4c1a3ccd4 rename local vars 'pixel' to 'pixelvalue'
433704e77 rename 'pixel' params of SDL_GetRGB, SDL_GetRGBA and SDL_LookupRGBAColor
83b261ae8 Remove unused message box includes
cccad933a Updated version documentation to match SDL 3.x practice
adad7dcae x11/wayland: Ignore redundant restore and fullscreen leave requests when showing the window
d7d6d8e28 Sync SDL3 wiki -> header
f7b718883 Add SDL_CreateGPURenderer
5a59b5f32 bool is 4 bytes in Apple MacOS X 32 bit PPC ABI
3b9101768 pulseaudio: cleanup TLS every time we finish a threaded-mainloop callback.
646f1f243 x11: Only enable _NET_WM_SYNC_REQUEST for OpenGL windows
33f90f2e4 GPU Vulkan: Clean up in Submit in headless mode (#12744)
93b06cffd Sync SDL3 wiki -> header
c2c3a930b Add STRING suffix to SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_* string properties
44710a248 gpu: alpha-to-coverage support
d6d2c958a Move global event handlers to SDL_VideoInit
05939909d SDL_gpu.h: SDL_GetGPUDeviceProperties() is thread-safe.
1687bc746 Sync SDL3 wiki -> header
accd952c4 SDL_gpu.h: Another attempt to clean up SDL_GetGPUDeviceProperties() docs.
c5f369f55 Sync SDL3 wiki -> header
0c9eccd0e Sync SDL3 wiki -> header
906c6c751 GPU: Add missing error code to VkErrorMessages()
205c34c62 GPU: The D3D12 blit shaders are DXIL
300013cea GPU: Don't pass null properties to SDL_CopyProperties()
8ad64aba1 GPU: Remove subheadings from SDL_GetGPUDeviceProperties() docs
94ab2b76a Sync SDL3 wiki -> header
85281be78 Re-added text removed by the wiki bridge
b53e7b447 GPU Vulkan: Fix recursive Submit calls causing defrag to fail (#12718)
b1919783c Sync SDL3 wiki -> header
39a3b14df Renamed SDL_GetGPUDeviceDebugProperties() to SDL_GetGPUDeviceProperties()
ca613b9d8 x11: Send a restored event before entering fullscreen
667b706a9 x11: Don't set the hidden flag when minimizing windows
6430aed3d Removed SDL_XInputVersion, which isn't used
40e08ee7a Assume new XBox controllers have a share button
6bb16296b Added special handling for SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY
ebb52973e cmake: make SDL_CPU_xxx variable visible when using CMAKE_OSX_ARCHITECTURES
b4af01cd0 only build static library in some feature tests
756b455d3 Fixed building for Xbox One
25232c077 Sync SDL3 wiki -> header
f78aa4d8e GPU: Expose debug information from devices
008690d01 Sync SDL3 wiki -> header
df3282740 Note that you might get a different size window than you expect
ab34ea5a2 Fixed documentation for SDL_GL_*_SIZE
87d6beb89 Rename cmake/sdltargets.cmake -> cmake/sdlcommands.cmake
208ec1829 Update README-documentation-rules.md
5709466dd Sync SDL3 wiki -> header
b52140086 Note that the Emscripten window properties are strings
82b245d13 Added support for the HORI Taiko No Tatsujin Drum Controller
12ef57ede Sync SDL3 wiki -> header
735b68581 Fixed wiki reformatting
cc8ec6cf1 Handle global mouse state for Emscripten (#12669)
53d053279 Sync SDL3 wiki -> header
cbc26fe2c Add Emscripten window data to window properties
4aefde015 Only send sensor data if sensors are enabled for 8BitDo controllers
6d7827344 Return early in stead of goto
c3ce216c4 Fixed crash at shutdown on Windows
e87a00c07 tests: port failing SDL_Renderer test from pysdl2 to testautomation
10819273b tests: port failing SDL_Renderer test from pysdl2 to testautomation
ffbd434a1 tests: port failing window test from pysdl2 to testautomation
2775e7a78 tests: port failing SDL_Rect tests from pysdl2 to testautomation
39eed1d23 tests: port failing SDL_Hint tests from pysdl2 to testautomation
366a5281b Fixed comment
79a41ca7f Implemented DEBUG_8BITDO_PROTOCOL
5922e2cb7 Corrected comment with 8BitDo controller report sizes
0d9ff082f 8BitDo HIDAPI driver cleanup
e236a48e1 8BitDo
4de396734 More clarification for high DPI support
36fc1c2c9 Fixed texture colorspace when creating a texture from a surface
512485869 fix vulkan vertex buffer indexing
2e494fda3 Clarify high DPI support and best practices
44faac292 Fixed A/B/X/Y buttons on Nintendo 3DS
38c2081ae Temporarily default SDL_HINT_JOYSTICK_HIDAPI_8BITDO off
bcacc37e3 Sync SDL3 wiki -> header
e18c6bd2e 8BitDo (#12661)
6b1d6bfbe wayland: Commit the confinement region upon creation
266ee41c8 wayland: Defer creating cursor confinement regions until the surface is mapped
cb1d79db3 Sync SDL3 wiki -> header
088ad66f7 Update include/SDL3/SDL_power.h
032d69602 Add performance disclaimer in `SDL_GetPowerInfo` documentation
0d04e9ea6 Fixed build
7bb95bde4 Set the alpha opaque when blending to an RGB format
8eb57c5a4 diskaudio: Use SDL_GetAudioFormatName instead of recreating it from scratch.
f05bb7aae diskaudio: Log the raw PCM's format during "device" open.
210b317d8 x11: Popup positions after constraining are in the window-relative space, not global
daa7a5ad7 Updated Visual Studio example projects
f7a89d19c fix missing AVFoundation in CMakeLists.txt
a23f97483 Temporarily disable DwmFlush()
536a1a236 coreaudio: Added some NULL pointer checks.
712c76fdc gamepad: Fix inability to disable SDL_EVENT_GAMEPAD_UPDATE_COMPLETE events
418acf629 Sync SDL3 wiki -> header
633b9f6fb Added SDL_SetRenderTextureAddressMode() and SDL_GetRenderTextureAddressMode()
eb918af3d video: fix surface leak when duplicating mjpeg
567dfd2eb examples/renderer/19-affine-textures: add metadata for examples.libsdl.org.
5ab1aef36 examples/renderer/19-affine-textures: blue background so you can see the cube.
87e6d2250 examples, affine-textures: fix RISC-OS build.
254f34808 examples/renderer/19-affine-textures: Flip coords so SDL logo is right-side up.
391545105 examples/renderer/19-affine-textures: Whole source file was indented one space.
2ebcee203 examples: added examples/renderer/19-affine-textures to CMakeLists.txt.
2207f6bc9 examples/renderer/affine-textures: Fixed compiler warnings.
83eea00d6 Create affine-textures.c
401aaf3d2 video: Revert unnecessary member assignment
eed94cb03 Updated link to PSP Hello World
be2f7f206 Sync SDL3 wiki -> header
0f27c3aab Added SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING
289f5cfdb touch: Don't call ResetTouch() if SDL_GetTouch() can't find a virtual device.
b00b08f83 touch: Keep state correct when removing virtual touch devices during quit.
09fff161e cocoa: Clear pending state on fullscreen switch failures
05d23cae7 cocoa: Re-add sync timeout
2e61b4165 Don't send relative motion while in a modal loop
4c035a1fd audio: Allow PipeWire and PulseAudio streams to migrate to other sinks.
f3d4e6fe5 Sync SDL3 wiki -> header
8e6eaf12a wayland: Expose wl_output objects on video displays
1f917d523 Sync SDL3 wiki -> header
00f316737 Progress bar comment changes
e28974124 Added mappings for the NSO N64/SEGA/SNES controllers
b88200b79 Fixed face buttons for the NSO SNES controller under the HIDAPI driver
f355c7f21 Allow the progress API to be used on all platforms
b45ed98ae Fix spelling mistake in documentation
716e33f10 x11: Send the _XWAYLAND_MAY_GRAB_KEYBOARD message when grabbing the keyboard
a5633ad0f Sync SDL3 wiki -> header
6cc00a31b WindowProgressState API getters and fixes (#12629)
b520cde18 cocoa: Properly set the pending fullscreen spaces state when in a transition
dd9b9d451 Check if GL_OES_EGL_image_external is supported before trying to use it
7ec13a2ea Document SDL_malloc alignment guarantees
ae17b04c0 alsa: Don't start the hardware until the device thread is ready to do work.
41636959d audio: Feed output devices immediately, instead of waiting upfront.
48d4104ec pulseaudio: Fixed typo in commented-out debug logging.
8cb303126 wayland: Fix global mouse position retrieval
d6f137b2b Added a note to tag the wiki when doing feature releases
7f927de1f x11: remove 'args' and 'ret' from SDL_X11_SYM macro
b6ca03611 Fixed mixed trigger and body rumble for Xbox controllers on Windows
c3a3a11db keyboard: Don't check text input on a null window
035d9179a WIN_SetWindowProgressState(): Unsupported parameter error message
c217663fb SDL_SetWindowProgressState(): Add parameter validation check for `state`
3fa1bd81f Fixed previous commit renaming {add,remove}AudioDevice to native{Add,Remove}AudioDevice
b8381b3a2 Sync SDL3 wiki -> header
fa0a86409 Additions to progress bar comments
721476033 SDL_SetWindowProgressValue(): Move value clamp from `WIN_SetWindowProgressValue()` to `SDL_SetWindowProgressValue()`
69ad66b01 Fixed error messages in GetTaskbarList()
a3be7a137 WIN_SetWindowProgressValue(): Fix value clamp
017783835 Native functions renamed: {add,remove}AudioDevice to native{Add,Remove}AudioDevice
6e875397f Proguard: remove onNativePen
027df89ed wayland: Scale accelerated relative pointer coordinates with emulated resolutions
f52f982b1 chore: rename integer mode field names
8407a1625 Sync SDL3 wiki -> header
7a10fcdcc Add progress bar support for Windows (#12530)
6b13d6910 Improve move/resize visual smoothness on Windows
4fcef9074 audio: hold floating point exceptions when using neon
b493e29a8 x11: Fix backwards _NET_WM_SYNC_REQUEST init check
2fbb58329 SDL_ClaimWindowForGPUDevice() should fail for transparent windows
bde49abdb GPU: Support swapchain buffer transparency in Vulkan
79081a178 cocoa: Fix zoom check when leaving fullscreen
03cdd297e video: Fix boolean logic for getting the pending window position
fbdb63797 Fixed build when virtual joysticks are disabled
758eb256b Fixed DebugLogRenderCommands() output
4ceb02434 We need to rebind D3D12 resources after updating them
3538abfb8 Revert "Don't update a texture twice in the same batch on D3D12"
0681d0881 Don't update a texture twice in the same batch on D3D12
ac5b2b610 Don't send text event while ctrl/alt is held on X11/Wayland
365b7837c add private definitions to SDL_build_config.h.cmake
817260c73 Updates SDL_SetEventFilter code snippet to SDL3
3fd61b053 Updated for SDL style
581b61429 Emscripten: Support Custom Message Boxes (#12583)
54f5b7333 emscripten: Don't use legacy JS library functions for assertions
03a53ce0d Always show the on-screen keyboard on Steam Deck
8caeaaacd A Steam Controller might be generating keyboard input
cbb83be89 Show the on-screen keyboard if we don't have active keyboard input
67b4c3a15 Sync SDL3 wiki -> header
10072bb07 asyncio: SDL_LoadFileAsync was not null-terminating the file data.
85435d5a1 SDL_audio.h: Fixed typos in docs.
3ed61f203 Fixed applications that integrate Qt with SDL joystick support
de60a5f39 Revert "Make native functions be public otherwise it fails at run-time."
fe024b8fe Fixed typo in build.gradle
10fae8c34 Fixed Android build warnings
bf7b9b020 Fixed gradle deprecation warnings
ac2870250 Use the android-21 SDK as documented in README-android.md
476e7e54c Don't create surfaces with invalid pixel formats
6f456da63 GPU: Request sampleRateShading feature on Vulkan
4fd4d89b6 Make native functions be public otherwise it fails at run-time. (they are public such as the one in SDLActivity)
f2ed5c7a1 Fix illegal calls to DwmGetWindowAttribute()
96bf12444 Windows allows windows to be resized to zero height.
47b0c7547 Make sure we're getting called for the correct window
3415bc920 Fixed crash if a window couldn't be created on Windows
07e4dea69 The posix4 library has been merged into the libc library
9820f655d android: reduce visiblity as much as possible
c696e9318 GPU Vulkan: Fix render pass race (#12587)
7b93a744c time: Fix compilation on Solaris
14deef997 emscripten: Fix undefined behavior in opengles2 renderer
5283f7374 storage: Declare a private bootstrap for NDA user storage
8b924df48 Use an autoreleasepool in Cocoa_GetDisplayUsableBounds()
82335fd0e Fixed building with SDL_LEAN_AND_MEAN
a551c2a6d Fix Vulkan error check
5985f0a32 Fixed infinite recursion in SDL_IsGamepad()
6d0fb0a2e gpu: Fix MTLLibrary dispatch data destructor
3e5664a5b Fix return type in SDL_CreateGPURenderState
4fc9509ab Fixed raw input device GUIDs changing randomly between runs
0bd70684b GPU: Fix Vulkan backend never checking deallocations (#12567)
715301cef Fixed crash if info->path is NULL
f5eea7efa remove status message for SDL_STATIC_PIC PIC is controlled through CMAKE_POSITION_INDEPENDENT_CODE and not by an SDL option
35c03774f [SDL3] Adding input and FFB support for Logitech G29(PS3) on hidapi (#11598)
d66483dfc video: Send pending coordinates for moved, hidden windows
b9504f247 opengl: pixelart fragment shader uses GLSL version 1.30
05531c5f4 release: use NDK r21e for building Android release artifact
18185e30e Remove breaks under return
80ff0f45f Move default
3b58ad9d4 Add breaks and defaults to switch statements
8b6e9936e Missed a bracket
36ec4cd39 Align spacing
3b90ce499 Fix spacing; tabs to 4 spaces
60857935c Add preliminary joystick support for snake example
aad1e3516 mouse: Allow use of integer coordinates with fractional wheel events
501e71f25 Added unaligned version of SDL_ConvertPixels_SwapNV_std()
ad9f9af4e Removed accidentally enabled debug code
efe122be4 Removed width/height parameters from LoadTexture()
dcb97a5f4 Set a default shader entry point
1a2fccc56 hints: The auto mode switching hint is for 3.4.0
285fa671a Sync SDL3 wiki -> header
0bfe0497f video: Add a hint to disable auto mode switching if an exclusive fullscreen window moves between displays
58f6e9c27 Fix trailing doc comments
f15832c68 Sync SDL3 wiki -> header
17b84dbcf emscripten: add window properties for canvas ID and keyboard element (#12509)
ffe69fc35 Fixed SDL_GPUTextureSupportsSampleCount() documentation
e671bc265 Sync SDL3 wiki -> header
02faa8f75 Rename SDL_SetGPURenderStateFragmentUniformData() to SDL_SetGPURenderStateFragmentUniforms()
96194347b Added an example of fullscreen shader effects with the GPU renderer
2aee105b4 Added support for custom shaders with the GPU renderer
eb56c8af8 Sync SDL3 wiki -> header
1ae4ef65e Fixed incorrect assert
3e9e22f17 Added SDL_SCALEMODE_PIXELART
853375da6 Removed texture_size from the GPU renderer vertex shader
28ec461eb Organize the GPU renderer draw code
af0420d89 Switched GPU renderer shaders to shadercross and HLSL
c318b1f92 SDL_mutex.h: Fixed code example.
0e29c6295 gpu: Clean up unused code in Vulkan and D3D12 drivers
71c4de190 Sync SDL3 wiki -> header
512d97eab cocoa: Set the internal window data before calling methods that may result in referencing the internal data
5e951a230 windows: Fix WIN_SetWindowAlwaysOnTop causing owner window z-order changes when child windows are created or change top-level status
50a397bb4 Removed help for obsolete (and removed) command line option
3235a4eb4 Initialize the padding of aligned allocations to zero
efaafd766 VITA: Remove unused/duplicate headers
7746a9656 Fixup the mingw readme cmakelists
2ce3dfdf1 Fixed Nintendo controller face button layout under Steam
be6ed6e9c Fixed sscanf("026", "%1x%1x%1x", &r, &g, &b)
24339524c Use sized types when fixing undefined behavior
f1d16e9b4 avoid UB (left shift of negative number) in SDL_windowsevents.c
9fcca8351 gpu: Validate that CopyGPUTextureToTexture formats match
f2866418d wayland: Fix enum/boolean comparison and assignment
597bfe6b2 mouse: Add internal integer mouse mode hint for sdl2-compat
65cd2256c emscripten: Fix handling of special HTML targets
5d804a39d Implement SDL_GetSystemRAM and SDL_GetNumLogicalCPUCores for the 3ds (#12494)
99336ea37 Fixed memory leak in memory leak tracking
0306b5a86 Fix n3ds/SDL_syssem.c:SDL_SignalSemaphore (libsdl-org/SDL#12411)
3353b92a9 Fixed pen events on iOS after reinitializing SDL
ad2584813 cocoa: Ignore both clicks and motion on tooltip windows
fe245c6e0 x11: Always synthesize size events for external windows
84d047cc1 wayland: Rollback the round trip when reading data offers
fc3510785 Sync SDL3 wiki -> header
d631a3add Add a link to docs/INTRO-mingw.md
04b4577b5 Added MinGW Intro readme, touched up CMake and Visual Studio readmes. (#12485)
b99ff00a9 Removed logic forcing vsync on if setting it off fails
55695d372 Sync SDL3 wiki -> header
9c7c11f25 wayland: Roundtrip when receiving data offers
c4be7f77a wayland: Add additional MIME types for text drag & drop
e20e27e1f Added SIMD blitters for 8888 -> 8888 format conversion
4c82b5843 Added support for SDL_PIXELFORMAT_MJPG to SDL_DuplicateSurface()
cb099ebd4 Make texture scale mode a part of the 2D renderer draw state
6e2d3c9b5 x11: Enable legacy synchronization for external window resize and move events
bdde07468 Sync SDL3 wiki -> header
49af57694 Disable XTest by default
794ff283e Added support for using XTest to warp the mouse
fae324dac Update XSync code to match SDL3 conventions
f01bcaeb1 Sync SDL3 wiki -> header
fe9bdcf50 Added SDL_HINT_VIDEO_X11_EXTERNAL_WINDOW_INPUT
9f557941f Sync SDL3 wiki -> header
8f40dad46 Document the thread safety of SDL surface functions
aef240b2e Fixed continuous logging if returning to desktop mode fails on X11
e9632c83c Handle XWayland not sending display disconnected events
ca9bc6b16 Revert "Ignore BadRROutput errors from XRRGetOutputInfo()"
0c8ddc1f0 Ignore BadRROutput errors from XRRGetOutputInfo()
80ae3a751 Fixed crash when restoring the desktop mode on macOS
5f07347e4 Fixed crash unplugging a HIDAPI controller
82552e5b7 Make SDL_RegisterEvents() thread-safe
9f9a44282 video: Synthesize fullscreen related moves if the driver does not.
e7abbf158 x11: Synthesize fullscreen size events on Openbox
5d20bbf34 Presenting while drawing to a render target should fail.
debbe1cf7 Fix for Message Box failing to init on X11 (#12455)
4bb46e93c Fixed clip rect when logical presentation is enabled
7df0ffd43 Sync SDL3 wiki -> header
7c29c8b26 Added fullscreen_active to better track fullscreen state
3b9f0dff1 Use _this pointer to reference the video device
0ccf272ee Check the display device before dereferencing
6c347cbf3 video: Handle Cocoa desktop mode switch inhibition in the video layer
24ec2ed78 Don't save temporary mode changes to the desktop mode
d57aa6f7a pipewire: Don't require pw_check_library_version() with Pipewire < 0.3.75
113eb6f01 gpu: Add BC2_RGBA_UNORM_SRGB to GetBlockWidth/Height functions
2c7c3d4d7 Only use VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR on Android
ca3c5fd40 fix build: s/SDL_DetectSandbox/SDL_GetSandbox/
eac63b473 Add the definition for DBUS_TYPE_UNIX_FD to SDL_dbus.h
16f12c0d5 Implement the XDP Camera portal
c3b415641 Sync SDL3 wiki -> header
2a0223487 Sync SDL3 wiki -> header
1a7c20698 Save and restore error messages when rolling back after failed init
2c46c3d5b Updated dynamic API for new functions
5373271a1 forbid transform change while relative mode active
428f0dcd6 add SDL_SetRelativeMouseTransform
67127afe3 Fix from #12118
e25ee2246 Added tiled 9-grid texture rendering function
954675b32 Sync SDL3 wiki -> header
44bca81fd Change default texture scale mode per renderer
b0d2a4f35 gpu: Fix Z offset for D3D12 realigned 3D texture uploads
b69201dae cocoa: Don't overwrite the desktop mode when changing the fullscreen mode
078d737a2 cocoa: Run pending events to completion
b0df1cbbe Updated to version 3.3.0 for development
65864190c Added testpen to the Xcode test project
292e43174 Updated to version 3.2.6 for release
f0cb78e08 Handle XCreateIC() failing when composition UI is enabled
55484ef02 Moved WIN_UpdateMouseCapture() to be with the other mouse functions
020664bd1 Update mouse button state when re-entering a window
b836ad4d4 Fix a root signature mismatch for the D3D12 renderer
a88105784 camera: Delete some failure code that should have been removed before.
f868408a3 Ceil the audio resampling rate to avoid over-estimating output samples.
cbdc93b17 cmake: make sure a SDL3 library is present when not using COMPONENTs
8a7beca12 camera: clear the spec when closing, so re-opening can probe again
ee5f5c917 Sync SDL3 wiki -> header
6e4193b74 Note that the file names are UTF-8 encoded
60c65f9fa SDL_camera.c: fix failure-return in SDL_PrepareCameraSurfaces().
b8c2bc143 Added build dependencies for Arch Linux
7ab1412e2 Sync SDL3 wiki -> header
725af6ad1 camera: Fixed surface formats, etc, for Emscripten backend.
ef23ebfb5 Fixed the cursor clip rect when toggling window borders on macOS
c68259944 GPU_d3d12: Switched the default swapchain scaling mode to none.
ea513fd47 Fixed vulkan gpu backend android orientation behaviour to just work like on iOS.
87b1c9736 Fix pen generated mouse events not having SDL_PEN_MOUSEID (#12392)
a44107540 sysjoystick: don't leak fd on error
9a802797d SDL_pen: fix eraser check
54c7aa9c9 Sync SDL3 wiki -> header
35e8cf8ee render: allow render targets to use logical presentation.
281f0fae1 Include the VID/PID of generic keyboard/mouse devices on Windows
d09bf5681 clipboard: Cleanup coding style
edaf44767 tests: Add showing/setting the primary selection text to testclipboard
7b9036bea wayland: Don't overwrite clipboard data with the primary selection text
f7cadcba8 examples: Use SDL_GetAudioStreamQueued, not SDL_GetAudioStreamAvailable.
b3336c5a7 Match style
2b784b5bf Fix SDL_GlobDirectory
eb89d0c8c Don't put wired Switch Pro controllers into simple report mode
1ea99bc90 Early out if setting a duplicate window title
56e2955b6 Sync SDL3 wiki -> header
cc984c973 Added a mapping for the 8BitDo SN30 Pro+ controller on macOS
ba88b6aa0 Fixed reliability of initializing Switch controllers on macOS
66ecdc69a Don't update the report mode until the related hint is set
fab52b578 wayland: Ensure that color descriptions are always retrieved
9464aaa8a Change D3D12 GPU backend to respect has_depth_stencil_target
cf819ca81 Don't allow further operations on properties while we're destroying them
e01257376 Don't fixup mappings for Joy-Con controllers
34c373495 Fixed opening one Joy-Con when the other is visible but disconnected
049a7a04d Wake the main thread for main function dispatch
f0f593f04 Embed a description about Wayland clipboard instead of a link
bb748ef2d Don't cleanup clipboard in SDL_SendClipboardUpdate on Wayland
38a73a178 Sync SDL3 wiki -> header
85a302550 Set an error message if the rect passed to SDL_RenderReadPixels() is entirely outside the viewport
29df99ee3 Clarified SDL_RenderReadPixels() documentation
2f77558ba fix comment
44f1ec35c GPU: Make Vulkan transfer buffers dedicated allocs
1c2189c7c strings.h isn't available in Windows environments
ffdca343f Sync SDL3 wiki -> header
ac5fca4ae Clarify the expected usage of SDL_StorageReady()
fc365e945 Sync SDL3 wiki -> header
ad840e879 Better document that main functionality is in SDL_main.h
bb8dcf08e Sync SDL3 wiki -> header
698032531 Added support for the "%n" sscanf format specifier
e6a24fcbb fix stbi__parse_png_file() reading too much bytes (thanks @miniupnp!)
db4e6c193 Cocoa metal layers need their size updated before renderer updates
0a592b78c Sync SDL3 wiki -> header
58388e8db Add SDL_HINT_JOYSTICK_HAPTIC_AXES
db817a37f gpu: Fix forward declaration and inclusion of PrivateGPUDriver
a7bc6c5e0 gpu: initialize VkDebugUtilsLabelEXT::color
60b7faa98 gpu: Validate that reserved struct members are unset
2990d142c Map additonal Linux keycodes to SDL scancodes
a0086a5cc Add missing scancode names
35544df83 Changed PULSEAUDIO_FlushRecording() to only flush audio present when called.
deadfe0c9 Sync SDL3 wiki -> header
0815637cf vulkan build fix
ea77472d7 Document/ignore GPU features without universal support
ad11c6988 src/io/SDL_asyncio.c:SDL_AsyncIOFromFile(): Fix null-dereference warning
8bfde6755 Remove unnecessary fcitx's devel package dependency in linux doc
52af81ea1 wayland: Fix mapping borderless windows under libdecor
1a0a94b50 x11: Accommodate the borders when setting the initial window position
52e64f816 Use SDL C runtime functions in OpenVR driver
7224b4040 Fix errors when building stb_image with -DSDL_LIBC=OFF
945da099a pipewire: Fix possible deadlock when opening a device
70f657e52 ci: farewell, clang32 on msys2
e50db698e Disable all camera drivers if SDL_CAMERA_DISABLED is defined
1ddba3ad5 Replace "8BitDo Tech Ltd" with "8BitDo" in the manufacturer string
fdf72d1e4 Use the keyboard/mouse vendor if available
a811e0ef0 Added support for the 8BitDo Micro gamepad
bc85c5535 testcontroller: create window with high pixel density
75bbcbf87 Added support for Motion JPEG pipewire camera capture
5c214e5e9 testcamera: SDL_AppQuit destroys state and SDL
03e00cd34 v4l2: map SDL_PIXELFORMAT_MJPG to V4L2_PIX_FMT_MJPEG
fcd41c1d2 Check desired window area when checking zoom state
b5297de56 Add 'const' to pointer parameters
911e53dec Retain mouse focus as long as we're getting mouse events
3b8cb6228 Make it easier to enable IME debug logs
9a607e886 make start&length represent utf32 indices
9d06145d6 ci: fix type + names of intel compiler artifacts
fa380a400 Update include/SDL3/SDL_assert.h
2a1b617fb Update include/SDL3/SDL_assert.h
69e03094b fallback to defining SDL_TriggerBreakpoint as __builtin_trap in older linux arm64 environments that do not have a __has_builtin facility
c70f54e28 Remove redundant casts
2e346d716 Added 32-bit texture formats to Texture_GetBlockWidth() and Texture_GetBlockHeight()
5d776c070 Refactored SDL_CreateJoystickName() into a general SDL_CreateDeviceName()
3293eb1a1 use hidapi to get mouse/keyboard string
785584230 ci: disable precompiled headers for classic intel compiler
71d1de5d9 ci: add cppflags to CMAKE_(C|CXX)_FLAGS
28f086794 SPA_FALLTHROUGH expands to nothing when using the Intel compiler
8d3db06ff ci: GitHub is retiring Ubuntu 20.04 support
c153f83df ci: enable ccache
52ee0c105 Sync SDL3 wiki -> header
9267930fe Added a fast path for converting the same format and pitch
f24f9d3be Revert "testcamera: added support for Motion JPEG camera frames"
2e89c53eb Added support for decoding MJPG into NV12 textures
06602f4e8 Document that the pitch is the length of the image data for SDL_PIXELFORMAT_MJPG
a792434a3 Added initial MJPG support using stb_image
baf69edfc Revert "cmake: build SDL_uclibc with -fPIC"
fdf8e5a70 ci: build static loongarch libraries with -fPIC
9784414dd cmake: build SDL_uclibc with -fPIC
b48de48ef wayland: Add support for high-DPI icons
6e0264d38 x11: Use the current or last-requested window position when setting the size hint
1a38960ee Call SDL_DiscardAllCommands() for the software renderer as well
8f4c5e15f Finish any drawing when destroying a software renderer
1a853973a thread/windows: fix stack overflow in exception naming
a40b2de94 Fix SDL_emscriptenaudio.c under wasm64
523e6530a SDL_test: fix "'function': different 'const' qualifiers" warning in SDL_test_harness
9e4c657ed wayland: Fix color manager protocol string check
7500a758b Remove usages of `restrict` keyword in SDL_render.c
a7f01cd73 x11: Set the pending window position immediately after mapping
1fd626939 Renamed DreamPort to DreamPicoPort
31f9cb480 Unchecked Return Value in WIN_SuspendScreenSaver (#12316)
057c3602e Removing Double-free Issue
5c79f4cae Incorrect bfOffBits Calculation in WIN_ConvertDIBtoBMP
70d23b234 README-migration: Remove errant reference to SDL_FALSE_
6aef6ae9a AddPulseAudioDevice(): Fix use-after-free
3b4cfc11f wayland: Update copyright dates in added color manager source files
fadb261b6 wayland: Add color manager protocol support
6ef687c86 Simplified and fixed media foundation buffer handling
de12cb92d Fixed crash at shutdown with new hashtable code
a51316890 Fixed Memory/Resource Leaks (#12304)
045a4492f test/testaudio.c: Fix use-after-free warning
da2460f9e test/testautomation_audio.c: Free variables before returning
7ea0ffb74 update
06eb10c51 haiku: check if the returned _SDL_GLView is null or not
dea99e54f Sync SDL3 wiki -> header
175494359 Fixed camera frame acquisition on Windows 7
e3d9f1172 Remove the reference to the thread when it is detached
831fc7092 test/testautomation_intrinsics.c: Free variables before returning
c6a3b5b6e src/test/SDL_test_harness.c: Free variables before returning
84a236c92 hashtable: Redesign the hashtable API.
4a9b57919 joystick: remove dead udev code
ba4525694 Sync SDL3 wiki -> header
fd4e6d294 Don't render 0 sized texture rectangles
6f3b14a6d audio/video: Fix uninitialized field warnings
5b98c4a52 Fixed motion events with TOOL_TYPE_UNKNOWN
8a648dfd9 emscripten: Fixed unregistering of key event handlers
c16b7bcb7 SDL_Get*Driver() functions: Set error message on failure
ed0a03e9b Fixed Cursor Icon State for SYSTEM_CURSOR_PROGRESS
5dce8c748 SDL_GetRelativeMouseState(): Get relative mouse position also when relative mouse mode is disabled
cedf53bbc Sync SDL3 wiki -> header
3de975884 Document the "trace" log priority
b9d018f2a Fixed wayland cursor use-after-free at shutdown
041894a52 Sync SDL3 wiki -> header
3be67ced6 Fix GTK tray icon without menu + lifetime
1354affd2 haiku: Fixed keyboard input.
d2b7a8465 Fixed SDL_GetNumGamepadTouchpads() returning 1 for a NULL gamepad
ca29304ce Fixed continually resetting keyboard and mouse readings
f67c64464 Fixed reporting hat positions for GameInput controllers
1b35ca9c3 Refactored GameInput initialization
706de78a9 audio/video: Skip preferred drivers when loading a driver on demand
715c18739 Added an internal hint "SDL_VIDEO_X11_XINPUT2" for sdl2-compat
ce69e9898 Copy SDL2_SYSWMEVENT data into temporary memory for the event
55fd205ba Add missing integer texture formats to SDL_GPUTextureFormatTexelBlockSize (#12151)
e6029401d Check for non-NULL icon for trays on Unix
b03332b68 updated bytepusher demo to be C++ compatible
5dd249264 updated the snake demo to be C++ compatible
78f816d74 x11: Apply the modifier state from key events
99cf16287 Fixed the name of SDL_SYSWMEVENT
6c3797152 Removed the mapping for the Sanwa Supply JY-P76USV
9b18e8438 [GPU] D3D12 backend debug markers were being cut
0bce19cf1 The 10-bit texture formats have alpha on Direct3D
3cfa476d3 Added support for SDL_PIXELFORMAT_ABGR8888 textures
5ccee7719 testcamera: added support for Motion JPEG camera frames
cf41ccc6c Removed stb_image.h from SDL
9308404e9 Removed functions not used by SDL
5e31bbf05 Remove functions not used when STBI_NO_PNG and STBI_NO_HDR are defined
84b0c13c4 Added support for Motion JPEG camera capture
3bc53b9ad wayland: Don't set libdecor frame visibility before the first commit
c03258626 wayland: Scale-to-display mode requires both viewports and xdg-output for proper functionality
b63d3afc1 Sync SDL3 wiki -> header
0bc1f8712 Added SDL_PROP_SURFACE_HOTSPOT_X_NUMBER and SDL_PROP_SURFACE_HOTSPOT_Y_NUMBER
da464e9e5 win32: Keep the window on the last maximized display when leaving fullscreen
bf01cc8ce Renamed "Dreamcast Controller Usb" to "DreamPort"
ecd089bb6 Don't return short waits from SDL_IOReady()
4fd0b2a85 Fix #12142 - the problem was if the size of the vertex buffer was exceeded, the currentVertexBuffer would be reset to zero and thus we'd leave it pointing to an in-use VB that would get overwritten on the next present before the vkQueueSubmit occurred.
f6126e9ea Centered joystick axis values should be 0
d35bef64e pipewire: Ensure that the correct struct is used for enumeration APIs
9bd6d3647 Added SDL_DEPS_SHARED option to control default dynamic loading of shared libraries (#12215)
78721d720 joystick: Fix PS5 player LED hint change callback name
7aba6c4c7 Proper Resource Cleanup in WIN_UpdateWindowShape
e29ebb9f1 Update geometry renderer example
ca9a044b3 Memory Leak in WIN_CreateHCursor When CreateColorBitmap Fails
69d28027a Fix for 500ms hang after user clicks on the title bar, but before moving (#12217)
a0b6c0fd8 x11: Don't wait for events when the connection errored out (#8392)
864bb65ce Removed crc
006605c3b Corrected alphabetical order
dc035c5ca Added mapping for Dreamcast Controller USB
5d1bbd9b2 Fix SSE 4.2 test
7c12c63f6 Add generic SDL_syscond to N3DS threads source list
2ced6b09f Delete src/thread/n3ds/SDL_syscond.c
7af17f874 Sync SDL3 wiki -> header
982094c85 Updated to version 3.2.5 for development
b5c3eab6b Updated to version 3.2.4 for release
48c00bfe6 Fixed creating a window with both software and hardware renderer attached
3c6e6645f Sync SDL3 wiki -> header
ad8429f1b Let the renderer always see window events
c59ac249d Revert "wayland: Don't send size events while the window is hidden"
6cb3d37a2 Sync SDL3 wiki -> header
80653a42c Remove non-ASCII character from public header SDL_hints.h
a646dc89e Note that SDL_GUIDToString() and SDL_StringToGUID() are thread-safe.
8730f6a56 dynapi: Don't use SDL_getenv; it might malloc before the app sets an allocator.
c9341489c Fix #12197: Force set /utf-8 for msvc compilers (#12198)
8397e1fcc Fix up SDL2 style mappings for HIDAPI controllers
7691cabe4 Removed incorrect HIDAPI gamepad mapping
86691d325 GPU: Remove stencil bit from sampler aspect mask on Vulkan (#12196)
6782cfe2c Don't use the HIDAPI driver for Thrustmaster wheels
1c0e2b7f9 SDL_OpenHapticFromJoystick() returns a valid haptic object
c4550d906 testcontroller: show the gamepad device type
5ad033768 Sync SDL3 wiki -> header
68dabd48c SDL_GetTrayEntries(): Rename parameter `size` to `count`
b99e19c0a Fixed potential double-free
8ba8cca69 Fixed memory leak looking up pen tool names
2cd2834df Fixed memory leak in the pen cleanup
c4c185283 dbus: fix spurious leak reports with SDL_SHUTDOWN_DBUS_ON_QUIT=0
691a6133d Remove #undef __3DS__
33c0654d5 Allow OpenGL initialization on XB1 and XSX.
eb5ab2203 Check nullptr before calling the windows message hook for WM_ENTERSIZEMOVE and WM_ENTERMENULOOP
e7f326a84 bmp: Removed debug printf call.
61b1c25ee x11: SDL_SetWindowPosition on an unmapped window will do the actual move later.
f1b3523c6 Remove redundant parenthesis in SDL_MUSTLOCK macro
8527d042b Remove const from parameter of inline function SDL_RectsEqualEpsilon()
07c22da46 Fixed decoding 4-bit RLE encoded BMP files
8ccf85c59 Formatting spaces around pointer symbol.
94409d350 Added Switch Input-only controller entries for Zuiki MasCon controller for Nintendo Switch.
a8a2874ef Added distinct VID/PIDs for the PS4 vs Xbox eSwap Pro controllers
84bc2abda Corrected the entry for the PXN V900 racing wheel
eac07bda0 Sort the controller lists by VID/PID
6243a0653 Call the windows message hook for WM_ENTERSIZEMOVE and WM_ENTERMENULOOP
ec959a434 Sync SDL3 wiki -> header
8e51b2468 Renamed SDL_SoftStretch() to SDL_StretchSurface()
f40ef62a2 Sync SDL3 wiki -> header
614ae843a Sync SDL3 wiki -> header
8848f8656 Corrected the version where SDL_SoftStretch() was added
a98a4b8a6 Re-added SDL_SoftStretch() to the API
842f85da0 Sync SDL3 wiki -> header
c06172dc1 Track mouse button state by real mouse ID
73a814358 timer, windows: allow building high resolution code with old SDKs.
be991239d Updated to version 3.2.3 for development
2fa1e7258 Updated to version 3.2.2 for release
c92276279 proposed fix: set curr_src.h is to bottom_height before drawing bottom edges / corners in SDL_RenderTexture9Grid, to avoid issue where inadvertently using top height if the npatch existed on a larger texture than the drawn edge would cause too many pixels to be included in the bottom part of the render.
235022fe2 Fixed error C2059: syntax error: '}'
dc13a6ae9 SDL_SaveBMP_IO: Write bitmap header v5 values
fe6bd8e9b Sync SDL3 wiki -> header
bc3264130 Fixed mouse motion events while the mouse is grabbed
69d361dee Ignore SDL_HINT_RENDER_DRIVER set to software when creating a window surface
70a239210 GPU: Describe "readonly storage" images as sampled images on Vulkan backend (#12149)
4c6d949e6 wayland: make sure the desktop mode is in the fullscreen mode list
ab5cb707a Fixed enabling call logging
16f8122a0 Keep the simplest mapping of scancode + modifer for a given keycode
6beda3421 do not build camera drivers if camera support is disabled
0825d07a4 wayland: Don't send size events while the window is hidden
8e766c925 GPU: Resource binding state shadowing (#12138)
43924ec87 Sync SDL3 wiki -> header
8c2682a21 Sync SDL3 wiki -> header
e4fcc7b6e gpu/vulkan/SDL_gpu_vulkan.c: fix type redefinition error
14edb21ae check for backslashes as well as the forward slash
50b8c6cdf Sync SDL3 wiki -> header
943c4abcb pipewire: Report correct device default formats instead of hardcoding Float32.
943579a54 Fix inverted pen Y tilt on macOS and add tilt display to example - Negate tilt.y in Cocoa pen handling to correct inverted Y tilt axis - Update drawing example to display X/Y tilt values for visualization - see 0f128fd7c5/src/plugins/platforms/cocoa/qnsview_tablet.mm (L63) - see https://source.chromium.org/chromium/chromium/src/+/main:components/input/web_input_event_builders_mac.mm;drc=0af5ffa1e4cc4cc4f818725f8fee93ec57855e4b;l=421
31364477f Rename parameter of type SDL_CameraID from devid to instance_id
36758d70c Rename parameters of type SDL_AudioDeviceID from dev to devid
2abc7735a Free XIDeviceInfo in X11_MaybeAddPenByDeviceID
8298d60e4 Dynamically load CreateWaitableTimerExW and SetWaitableTimerEx
409f3ade8 Removed SDF test program
4176e188b Enable testgles2 on all platforms
cf249b0cb fix -Wformat problem in 32 bit builds
11dbff246 Sync SDL3 wiki -> header
ccd5fcef1 audio: Fix potential NULL dereference in AudioStream gain adjustment.
48f555065 wayland: Don't send keyboard and mouse added events during initialization
2a946e91b android: updated release build SDK to match documented requirements
44edbf713 Use templates for the package support files
1c008d8ed Change DBUS introspection timer from INFINITE -> DEFAULT when introspecting available dialog services
c21bc48a7 Fix undefined behavior in SDL_windowsmouse.c
1c7cc6028 Skip IsRegularFileOrPipe() check on Emscripten
8f958953f audio: Fix audio stream gain going wrong in certain scenarios.
3b3af7105 audio: Fix a minor code style thing.
725ee7665 Documentation: fixed typos around floats precision
6f098a920 Avoid a crash when a tray without a menu is clicked on Windows.
09f900f66 audio: Remove resampling limits.
5f8e0ebf5 Fixed memory leak at shutdown
913e0a5e5 SDL_migration.cocci: handle more renamed event fields
628130ec8 SDL_migration.cocci: fix incorrect SDL3 API name
fa8c0f055 Sync SDL3 wiki -> header
17c4bdd75 Sync SDL3 wiki -> header
ad8a09000 Sync SDL3 wiki -> header
8df17c97d GPU: Add notes about shader resource requirements to documentation
303fd5ed5 release: rename resources/cmake -> resources/CMake in dmg
fdf33f904 xcode+cmake: Use SDL3.framework/SDL3 as IMPORTED_LOCATION
cb3d6dc46 .wikiheaders-options: Removed wikipreamble setting.
84c4ff2f1 Sync SDL3 wiki -> header
2e381a717 Fix possible integer overflow of size + 1
129ebc77b Sync SDL3 wiki -> header
a336b62d8 Remove newlines from error messages
d0ae09368 x11: Don't force position windows with an undefined position
72a3eae0d Fix buffer overrun in ConvertAudio with different src/dst channel count
983cfe8b1 Remove even more newlines from log messages
718034f5f Remove newlines from log messages
17625e20d Removed redundant step in Visual Studio instructions
c806c271c Tweaked emscripten introduction
74536243d Emscripten works well using the normal CMake workflow
98c447802 ci: bump to NetBSD 10.1
a437dbc7e Improve log documentation
1c21a72bd Sync SDL3 wiki -> header
73fc2b03a Copy pen handling code from `SDLSurface` to `SDLControllerManager`
6f3d0b3cd Fixed build when using an older Xcode SDK
cb3cc2880 emscripten: pass --no-sandbox to the chrome web driver
df3cfbc79 Sync SDL3 wiki -> header
799093799 GPU: Note buffer alignment requirements
5bf077f1f Sync SDL3 wiki -> header
5d6a78045 Sync SDL3 wiki -> header
77b520e93 Updated to version 3.2.1 for development
bb3c5b4f3 Fix multiple occurences of typo "an simple" to "a simple"
efa6e7aec android: add style to test apk's
535d80bad Include the README and related files in the SDL framework
ed2920afe All SDL 3.0 release symbols are at version 3.2.0
7a5604cf0 Sync SDL3 wiki -> headers.
7e130e27b fnsince.pl: Remove prerelease version tapdancing.
b775135b4 Removed temporary debug code
a52fc209b Updated to version 3.2.0 for release
f16c67115 Sync SDL3 wiki -> header
90bda6548 video: Don't let SDL_CreateWindowTexture use the software renderer.
c45c4a5e5 render: SDL_HINT_RENDER_DRIVER now accepts a comma-separated list.
670a7d812 Sync SDL3 wiki -> header
8a67896d9 docs: Note the preferred function for getting the content scale of a window
852686856 dialog: cleaned up D-Bus portal implementation
071bebf23 coreaudio: Add a note about why this uses 3 buffers instead of 2.
c0a9d220b vulkan: Fixes for swapchain resize crash on X11.
ea9880b76 Sync SDL3 wiki -> header
bcf7ead6e documentation typo: SFLOAT -> FLOAT
6d5815db5 vulkan: Deal with VK_ERROR_OUT_OF_DATE_KHR returns from vkAcquireNextImageKHR.
6b7dad7d8 vulkan: move temporary pointer to its own field to prevent a bad dereference.
3e530c6db cmake: remove superfluous cmake_minimum_required
7bff36e4b ci: add ubuntu arm job
37140aa9f cmake: expand libunwind
abe6d9db9 Automatically detect SDL_main_private.h
10c9fbf41 Use proper polar direction when creating FF_RUMBLE effect
c6c746970 Translate conditional effect direction instead of hardcoding it to 0
b476695e6 Call the windows message hook while inside a modal message loop
b6d0bc043 coreaudio: Use three buffers for the audioqueue, not two.
aa10e51c7 audio: Added some minor missing comments in struct SDL_AudioDevice.
10a5b388d win32: Retain the WS_MAXIMIZEDBOX style while in fullscreen
6449339ae win32: Restore the base size of a window when leaving fullscreen
075c0337c Removed debug print statement
a036aeda3 The Vulkan renderer doesn't actually support RGB texture formats
9b454a762 Revert "testautomation: don't validate alpha values on XRGB formats"
dcadd23ba render: Prevent division by zero if logical presentation is 0 pixels.
adb91fd3d process: Don't use vfork() on Apple platforms.
819628c6b testautomation: Remove Win32 borderless resizable hint
759e01bd6 testautomation: don't validate alpha values on XRGB formats
c698c61f0 renderer: initialize the surface colorspace correctly
c975f77b0 Update joysticks and so forth during live resize
362f96a6c testcontroller: use SDL_MAIN_USE_CALLBACKS so updates happen during live resizing
f8040b2e0 Use UIKeyboardTypeDecimalPad for number fields on iOS
90b2e2527 include: Added a tiny bit to SDL_sensor.h's category documentation.
2be749b23 include: More category documentation.
642262e30 cocoa: Fix mousegrab when going fullscreen.
d5766bc4b include: More category documentation.
b809da52f assert: Try using __builtin_trap() for SDL_TriggerBreakpoint().
c4c0bfdfb Sync SDL3 wiki -> header
7133969e3 Feature add hint to remap option as alt key (#12021)
53a535029 Sync SDL3 wiki -> header
5f2dd5f04 tray: fixed multi-threading issues with GTk implementation
dfdc12026 tray: document thread-safety
d4cda5105 tray: renamed SDL_HasNoActiveTrays() to SDL_HasActiveTrays()
a974888aa tray: fixed icon colors on Windows
7570ab106 tray: improved error checking
b716eeefe testtray: minor cleanup
3afd1e7ea windows: use WIN_UTF8ToStringW() for dialog titles
78023500f Sync SDL3 wiki -> header
34c12d0db include: Add category documentation to SDL_timer.h.
b088e8919 Sync SDL3 wiki -> header
0851322fb include: Add category documentation to SDL_power.h.
43b54b3d7 Fix Windows dialog folder titles
32965b4bf pen: Send virtual mouse motion without a button press when a pen is hovering.
5da9d4ecc cocoa: Slightly better display hotplugging detection.
19f42094b Fix Windows fie dialog args freeing
721fc7de0 Correct spacing of pointers ('a* b;' -> 'a *b;')
cd269730e Fix Windows dialog memory management
049a8f0e5 Use SDL_calloc() instead of SDL_malloc()
354d2c390 Initialize invalid parent_{tray,entry} to NULL
b79ada6aa Windows trays: Fix ParentEntry & Enabling
ba95c54f9 macOS: get the correct display name on macOS 10.15+
42e0fb10f wayland: Set the mouse state before calling the hit test callback
cd0db8d35 Added Linux evdev mappings for the Wireless HORIPAD For Steam
1d7a681e4 Revert "emscripten: resizable windows take whole page, resize with browser window."
e054f3c08 Sync SDL3 wiki -> header
75317dae5 include: Added category docs for SDL_mouse.h
c7d1fd90e Added support for the 8BitDo Ultimate 2C Wireless in Bluetooth mode
dbe3baeb0 release: document using the xcframework with CMake
ad3c7b92f xcode+cmake: use SDL3.framework folder as IMPORTED_LOCATION
0401b07ee Fixed typo
08e74d29b Fixed typo
923123a52 emscripten: Let SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT accept "#none"
c603a9c94 Moved flag documentation
90b7174a7 Respect the SDL_BORDERLESS_RESIZABLE_STYLE hint, but default it to true.
6a72d32d4 emscripten: Let SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT accept "".
f3a39074b windows: use WS_THICKFRAME style on borderless windows.
842f6dc40 Fixed wrong type of `phase` (#12014)
b95989d14 Fixed sine wave distortion over time.
010f27dc7 storage: enumerate and glob on storage can accept a NULL path.
a6a8598b9 storage: deal with paths with Windows '\\' path separators appended.
7c6adc1ca gpu renderer: removed unused sampler slots
feeea6a77 Sync SDL3 wiki -> headers.
e9f7f11f1 fnsince.pl: Fix script once bump to 3.1.10 exposed a bug.
d2fc394a2 Sync SDL3 wiki -> header
d317fc9c0 emscripten: resizable windows take whole page, resize with browser window.
ee469c6af Sync SDL3 wiki -> header
d4d22dd8d GPU: Add remarks about point topology
59ea078ee x11: check to see if displays moved when connected/disconnected
1848ce680 win32: Use the window coordinates to get the monitor when de-minimizing a maximized window
656c519cc Fixed warning C6313: Incorrect operator. Use an equality test to check for zero-valued flags.
9ed96f392 Sync SDL3 wiki -> header
ae8df1dcb Note that the primary monitor isn't always at 0,0
4b429b9fa Updated README-platforms.md
616ae9906 Removed README-git.md
c2dac95f5 Revert "Add CategoryAPICategory to the complete API index"
dd4f5df82 release: support android-X-ext-Y directories
cdc5483cf Vita: Fix off-by-one error for synthetic mouse events
07a5c144c Sync SDL3 wiki -> header
eb168e410 Updated to version 3.1.11 for development
b96bb152c wayland: Don't redundantly set the border state when showing a window
5a564a718 wayland: Add a dummy function for the libdecor dismiss popup callback
9f6eeb109 wayland: Set the border state before the initial configure
274bc95df Sync SDL3 wiki -> header
07f7c4046 Sync SDL3 wiki -> header
22d8e7353 include: filled in category documentation for SDL_messagebox.h.
21a42d2b0 Add CategoryAPICategory to the complete API index
1006236aa ci: add summary to release.yml
326ce9bb8 gpu: D3D12 buildfix for Xbox
c95b842b3 video: Xbox does not use CreateIconFromSurface
d8e1ad0eb release: skip extended Android SDK versions
7ee2ab383 wayland: Fix return value check from int-to-bool conversion
1dd8fadca Updated to version 3.1.10 for the release candidate
9225a421b Sync SDL3 wiki -> header
3ffb1a8cb storage: generic title storage allows override paths without '/' appended.
874c07f8d storage: Don't allow "." and ".." paths, enforce '/' dir separators.
67664a042 testfilesystem: test some Storage APIs, too.
eb793dede filesystem: SDL_GetCurrentDirectory() should add a path separator at the end.
87e1b0eb8 filesystem: SDL_EnumerateDirectory() gives dirs with path seperators appended.
e98ee9bb0 Adjust testgl.c to test gl_release_behavior
3424ec948 video: SDL_GL_GetAttribute gets correct SDL_GL_CONTEXT_RELEASE_BEHAVIOR value.
05877f2ce cmake: Add the IoRing async i/o code to the Windows build.
4d63a2b88 io: Renamed src/file to src/io
ea642fe9f cocoa: clear mouse focus based on NSEventTypeMouseExited events (#11991)
5f4696ce6 Updating documentation for the 3.2.0 release
2c7b7d1d3 Keep the lifecycle observer active while there are windows active
355f69ebf GPU: Ensure thread safety of Vulkan resource creation
c9d602307 cocoa: Only process hit tests on left clicks
dd0bdc256 win32: Pass through non-left mouse button presses when over draggable areas
84d35587e filesystem: SDL_SYS_EnumerateDirectory inexplicably takes the same arg twice.
fc9b2478d windows: don't set focus click pending if SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH is set
18d21b36f windows: use the initial rect to anchor fixed aspect ratio resizing
199547192 cocoa: fixed resizing windows with fixed aspect ratio
67382e9c8 Fixed detection of function keys on Emscripten
23410debf SDL_GetKeyboardNameForID(): Set an error message for invalid keyboard IDs
8ce176b59 SDL_GetMouseNameForID(): Set an error message for invalid mouse IDs.
51fa076fd Don't send normal keyboard events if no application window has focus
a446381ea Tooltips and unfocusable windows can't become main windows
ebb24eedc mouse: Clean up virtual touch devices as appropriate.
dabc93a63 pen: Send virtual mouse and touch events for pen input.
169c8d514 Fix incorrect hotspot calculation for cursor positioning
8e9c44bc3 Fixed accidental removal of optional delegate interface check
4dd585fb6 coreaudio: convert MPEG channel layout to WAVE channel layout
81e57147f Child windows shouldn't take focus if the parent window is in relative mouse mode
3bea84531 Sync SDL3 wiki -> header
9ed23a4b7 Updated SDL_SetEventFilter() documentation
e19a56f4d Don't send fake key events while processing real ones on Android
1ab61635a Use SDL_Log() for keyboard debugging.
29c684c62 Removed debug logging
0eaa6197c Removed unnecessary __builtin_available check
ffe194c52 Fixed build when SDL_JOYSTICK_MFI isn't enabled
a4547fe77 Updated weak framework dependencies for new deployment targets
49dd24e19 Fixed potentially overlapping memcpy() to use memmove()
191a6417d events: use SDL_memmove instead of SDL_memcpy for overlapping memory
bf793bf43 Sync SDL3 wiki -> header
9e60a8994 audio: Allow streams to change the device-side channels maps.
b2793a2ce Removed obsolete Raspberry Pi documentation
04e3b6770 Removed outdated Visual Studio instructions
a41f93bd1 Added https://github.com/Ravbug/sdl3-sample as a more complete Android example
5ca735b40 Only use WAVE surround sound channel layouts on macOS 10.15+
cdde6dd7b Bumped deployment requirements for Apple platforms
8f8af918b Removed CMakeLists.txt example that says you shouldn't use it
8feb21a1d Updated README-cmake.md with build instructions for several platforms
4294c0683 GPU: Check texture format support in pipeline creation
31dd4fe81 Sync SDL3 wiki -> header
417ed7f35 Fix references in docs
0aa319e4f Added support for custom tray icon on Windows via SDL hints.
581537220 minor update to mingw-w64 build instructions.
5d079c9a2 GPU: Remove bogus property from header docs
d590e1f12 GPU: Align D3D12 clear properties to naming convention
7098e525d Sync SDL3 wiki -> header
fb6df9338 GPU: Add name properties to resources (#11946)
a2b0ddcca Sync SDL3 wiki -> header
d28e95322 Added thread safety documentation for SDL_iostream.h
f731741ea Sync SDL3 wiki -> header
0eaa8c6d8 Added INTRO-emscripten.md
21b433536 Scale up the text for large displays
6bc7e88ca Added INTRO-androidstudio.md
e4e76ac72 Added INTRO-xcode.md
1b30a01b4 Added INTRO-visualstudio.md
191b9d502 Added INTRO-cmake.md
7d2a1c5f8 Mention the tests in INSTALL.md
b6b939044 Simplified INSTALL.md
55e094f7a Updated INSTALL.md with simple intro breadcrumbs
584c1d579 Tweaking the README
995a6a033 Minor readability improvement for README-contributing.md
86b46c678 Removed README-git.md
96414fa56 Removed obsolete Raspberry Pi documentation
670db4d24 Made the README links in INSTALL.md markdown links
b08d04581 Added a Discord link to BUGS.txt
2ad0f1e1f Updated the credits for SDL 3.0
41d48db4a Removed the runtime README
922b73195 Simplified the README
5e4a2974a Removed obsolete warnings about MIT licensed SIMD code
3766a3940 emscripten: double the audio buffer size.
e10e42c81 Sync SDL3 wiki -> header
2b8fb0bdd wikiheaders: Maybe fix perl warning.
efaf3739c Sync SDL3 wiki -> header
4bddf521d emscripten: Override emscripten's fullscreen button with SDL's implementation.
569de8490 better numerical precision for playback example
e5a4f0936 Call SDL_UDEV_Quit() if we don't end up using it
7d7a76c07 Sync SDL3 wiki -> header
66408308b Added documentation for mouse handling in relative mode
438075a83 Sync SDL3 wiki -> header
b4562c024 cocoa: Add a hint to control menu visibility in fullscreen spaces windows
611f132fd Don't use a hint callback for SDL_HINT_ANDROID_ALLOW_RECREATE_ACTIVITY
03a3c19c2 examples: use doubles to generate sine waves and avoid distortion
307e6f2ca emscripten: simulate mouse autocapture.
f79083d9b release: don't add test directory to mingw release archives
4ba4f0a10 release: add Android aar to devel zip archive
c4f2f7b35 Removed redundant information in example pages
949ec0c50 Sync SDL3 wiki -> header
839227b4b Sync SDL3 wiki -> header
c04b739df GPU: Note that resource naming functions are not thread safe.
3df0767e3 gpu: Initialize Metal stencil format even if stencil test is disabled
307dac97a testcontroller.c: fix build errors due to -Wformat after commit b524af1
21cc1878f Reset enhanced mode state when closing a controller
b524af1b4 testcontroller: log the ID of gamepads as they are added and removed
9a83fa026 apply multiplier scale after system scale
ea859fba3 Sync SDL3 wiki -> header
551510c0e SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE can be combined with SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE
95c158438 README-migration: note SDL2 brightness/gamma ramp APIs that have been removed.
f0af6c348 emscripten: Add SDL_EVENT_DISPLAY_ORIENTATION support.
3ad9c38a4 emscripten: Don't set OpenGL swap intervals until first PumpEvents.
d42b4ed96 Leave SDL_TriggerBreakpoint undefined on unknown platforms
9a7cfbc2d Add onNativePen to proguard-rules.pro
82125ec1d x11: Be more aggressive about finding _any_ usable messagebox font.
423184879 Revert "Separate android initialization from Activity (#11891)"
61f13b94d add a fallback SDL_TriggerBreakpoint() for MSVC after commit ebaa30d3.
d14c93c4b Separate android initialization from Activity (#11891)
c64197be1 Sync SDL3 wiki -> header
042898995 Added SDL_ClickTrayEntry()
fb0f6a119 cocoa: Display mode changes set Desktop display mode, not current.
38176bfe9 cocoa: Implemented display hotplugging support.
0e2ca934b events: Remove unused function declaration
715897aea Added support for displaying XIM composition strings
a8a65b6fc Use XIM for IME input on X11
1f3b40797 Sync SDL3 wiki -> header
fb94a79f8 stdinc: define SDL_NOLONGLONG for old Visual Studios, document the symbol.
bda90c3cb cmake: rename SDL_DISABLE_* CMake options to SDL_xxx
90aff306c gpu: Show a debug error when pipelines are not given the right shader stages
00b23a012 Sync SDL3 wiki -> header
6b776a998 keyboard: Add some SDL keycodes for common Xkb keys
e5966bbdb x11: Add support for Mod3 and more esoteric Xkb configurations
73ee99978 wayland: Add support for Mod3 and more esoteric Xkb configurations
ebaa30d33 __debugbreak was introduced in Microsoft Visual Studio 2003
c8f3f1b46 _BitScanReverse was introduced in Microsoft Visual Studio 2005
a78104a47 Disable long long support in the headers with SDL_NOLONGLONG
6cdde10ed gpu: Metal depth write should behave like Vulkan/D3D12
dd0dc64d5 Sync SDL3 wiki -> header
c688853a8 Sync SDL3 wiki -> header
507593f48 wikiheaders: Allow symbols to be filtered from manpage generation by regex.
7acf78ba9 storage: Trim the title storage root from enumerated paths
037cd25a2 win32: Use the pending size during NCCALCSIZE
e8916b260 pipewire: Use byte order pixel format aliases
d2090d1c8 Sync SDL3 wiki -> header
3f7f632e1 audio: Added SDL_AudioDeviceStreamPaused.
f61860fa9 testautomation: fixed incorrect test.
4bb3c2a1c render: Some cleanups.
61bdbacda render: SDL_RenderTextureTiled shouldn't try to drop draw calls, either.
f044a3d6c Revert "render: GetRenderViewportSize shouldn't use scale, just logical presentation."
fa7a52991 render: GetRenderViewportSize shouldn't scale viewport dimensions.
163600951 Sync SDL3 wiki -> header
bf8532094 render: Don't try to drop draws outside of the viewport.
f2f04e825 tests: Fix get/set window size test being skipped
cbdbd66e1 Sync SDL3 wiki -> header
ef1fdf11b tray: Create tray icons for libappindicator securely
e6bb50a71 Updated to version 3.1.9 for development
6b34c9fe7 Sync SDL3 wiki -> header
22422f774 Fixed ABI compatibility with 3.1.6
d7b10d05b Updated to version 3.1.8 for the preview release
4290fc8bd tray: Load GTK and libappindicator by versioned names, except on OpenBSD
6b38d250a tray: Don't try to use GTK 2 versions of libappindicator
bba066c44 tray: Don't call g_object_unref(NULL)
0bc370dfb Android doc cleanup
6934c910b opengl: use GL_UNSIGNED_BYTE instead of GL_UNSIGNED_INT_8_8_8_8_REV.
0176a19ae Fixed platform define condition for Windows phone
0180ca541 windows: Catch WM_POINTERCAPTURECHANGED events.
git-subtree-dir: external/SDL
git-subtree-split: 90fd2a3cbee5b7ead1f0517d7cc0eba1f3059207
2937 lines
121 KiB
C
2937 lines
121 KiB
C
/*
|
|
Simple DirectMedia Layer
|
|
Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
warranty. In no event will the authors be held liable for any damages
|
|
arising from the use of this software.
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
including commercial applications, and to alter it and redistribute it
|
|
freely, subject to the following restrictions:
|
|
|
|
1. The origin of this software must not be misrepresented; you must not
|
|
claim that you wrote the original software. If you use this software
|
|
in a product, an acknowledgment in the product documentation would be
|
|
appreciated but is not required.
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
misrepresented as being the original software.
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
*/
|
|
|
|
/**
|
|
* # CategoryRender
|
|
*
|
|
* Header file for SDL 2D rendering functions.
|
|
*
|
|
* This API supports the following features:
|
|
*
|
|
* - single pixel points
|
|
* - single pixel lines
|
|
* - filled rectangles
|
|
* - texture images
|
|
* - 2D polygons
|
|
*
|
|
* The primitives may be drawn in opaque, blended, or additive modes.
|
|
*
|
|
* The texture images may be drawn in opaque, blended, or additive modes. They
|
|
* can have an additional color tint or alpha modulation applied to them, and
|
|
* may also be stretched with linear interpolation.
|
|
*
|
|
* This API is designed to accelerate simple 2D operations. You may want more
|
|
* functionality such as polygons and particle effects and in that case you
|
|
* should use SDL's OpenGL/Direct3D support, the SDL3 GPU API, or one of the
|
|
* many good 3D engines.
|
|
*
|
|
* These functions must be called from the main thread. See this bug for
|
|
* details: https://github.com/libsdl-org/SDL/issues/986
|
|
*/
|
|
|
|
#ifndef SDL_render_h_
|
|
#define SDL_render_h_
|
|
|
|
#include <SDL3/SDL_stdinc.h>
|
|
#include <SDL3/SDL_blendmode.h>
|
|
#include <SDL3/SDL_error.h>
|
|
#include <SDL3/SDL_events.h>
|
|
#include <SDL3/SDL_pixels.h>
|
|
#include <SDL3/SDL_properties.h>
|
|
#include <SDL3/SDL_rect.h>
|
|
#include <SDL3/SDL_surface.h>
|
|
#include <SDL3/SDL_video.h>
|
|
#include <SDL3/SDL_gpu.h>
|
|
|
|
#include <SDL3/SDL_begin_code.h>
|
|
/* Set up for C function definitions, even when using C++ */
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* The name of the software renderer.
|
|
*
|
|
* \since This macro is available since SDL 3.2.0.
|
|
*/
|
|
#define SDL_SOFTWARE_RENDERER "software"
|
|
|
|
/**
|
|
* Vertex structure.
|
|
*
|
|
* \since This struct is available since SDL 3.2.0.
|
|
*/
|
|
typedef struct SDL_Vertex
|
|
{
|
|
SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */
|
|
SDL_FColor color; /**< Vertex color */
|
|
SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */
|
|
} SDL_Vertex;
|
|
|
|
/**
|
|
* The access pattern allowed for a texture.
|
|
*
|
|
* \since This enum is available since SDL 3.2.0.
|
|
*/
|
|
typedef enum SDL_TextureAccess
|
|
{
|
|
SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */
|
|
SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */
|
|
SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */
|
|
} SDL_TextureAccess;
|
|
|
|
/**
|
|
* The addressing mode for a texture when used in SDL_RenderGeometry().
|
|
*
|
|
* This affects how texture coordinates are interpreted outside of [0, 1]
|
|
*
|
|
* \since This enum is available since SDL 3.4.0.
|
|
*/
|
|
typedef enum SDL_TextureAddressMode
|
|
{
|
|
SDL_TEXTURE_ADDRESS_INVALID = -1,
|
|
SDL_TEXTURE_ADDRESS_AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */
|
|
SDL_TEXTURE_ADDRESS_CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */
|
|
SDL_TEXTURE_ADDRESS_WRAP, /**< The texture is repeated (tiled) */
|
|
} SDL_TextureAddressMode;
|
|
|
|
/**
|
|
* How the logical size is mapped to the output.
|
|
*
|
|
* \since This enum is available since SDL 3.2.0.
|
|
*/
|
|
typedef enum SDL_RendererLogicalPresentation
|
|
{
|
|
SDL_LOGICAL_PRESENTATION_DISABLED, /**< There is no logical size in effect */
|
|
SDL_LOGICAL_PRESENTATION_STRETCH, /**< The rendered content is stretched to the output resolution */
|
|
SDL_LOGICAL_PRESENTATION_LETTERBOX, /**< The rendered content is fit to the largest dimension and the other dimension is letterboxed with black bars */
|
|
SDL_LOGICAL_PRESENTATION_OVERSCAN, /**< The rendered content is fit to the smallest dimension and the other dimension extends beyond the output bounds */
|
|
SDL_LOGICAL_PRESENTATION_INTEGER_SCALE /**< The rendered content is scaled up by integer multiples to fit the output resolution */
|
|
} SDL_RendererLogicalPresentation;
|
|
|
|
/**
|
|
* A structure representing rendering state
|
|
*
|
|
* \since This struct is available since SDL 3.2.0.
|
|
*/
|
|
typedef struct SDL_Renderer SDL_Renderer;
|
|
|
|
#ifndef SDL_INTERNAL
|
|
|
|
/**
|
|
* An efficient driver-specific representation of pixel data
|
|
*
|
|
* \since This struct is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
*/
|
|
struct SDL_Texture
|
|
{
|
|
SDL_PixelFormat format; /**< The format of the texture, read-only */
|
|
int w; /**< The width of the texture, read-only. */
|
|
int h; /**< The height of the texture, read-only. */
|
|
|
|
int refcount; /**< Application reference count, used when freeing texture */
|
|
};
|
|
#endif /* !SDL_INTERNAL */
|
|
|
|
typedef struct SDL_Texture SDL_Texture;
|
|
|
|
/* Function prototypes */
|
|
|
|
/**
|
|
* Get the number of 2D rendering drivers available for the current display.
|
|
*
|
|
* A render driver is a set of code that handles rendering and texture
|
|
* management on a particular display. Normally there is only one, but some
|
|
* drivers may have several available with different capabilities.
|
|
*
|
|
* There may be none if SDL was compiled without render support.
|
|
*
|
|
* \returns the number of built in render drivers.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_GetRenderDriver
|
|
*/
|
|
extern SDL_DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void);
|
|
|
|
/**
|
|
* Use this function to get the name of a built in 2D rendering driver.
|
|
*
|
|
* The list of rendering drivers is given in the order that they are normally
|
|
* initialized by default; the drivers that seem more reasonable to choose
|
|
* first (as far as the SDL developers believe) are earlier in the list.
|
|
*
|
|
* The names of drivers are all simple, low-ASCII identifiers, like "opengl",
|
|
* "direct3d12" or "metal". These never have Unicode characters, and are not
|
|
* meant to be proper names.
|
|
*
|
|
* \param index the index of the rendering driver; the value ranges from 0 to
|
|
* SDL_GetNumRenderDrivers() - 1.
|
|
* \returns the name of the rendering driver at the requested index, or NULL
|
|
* if an invalid index was specified.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetNumRenderDrivers
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetRenderDriver(int index);
|
|
|
|
/**
|
|
* Create a window and default renderer.
|
|
*
|
|
* \param title the title of the window, in UTF-8 encoding.
|
|
* \param width the width of the window.
|
|
* \param height the height of the window.
|
|
* \param window_flags the flags used to create the window (see
|
|
* SDL_CreateWindow()).
|
|
* \param window a pointer filled with the window, or NULL on error.
|
|
* \param renderer a pointer filled with the renderer, or NULL on error.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer);
|
|
|
|
/**
|
|
* Create a 2D rendering context for a window.
|
|
*
|
|
* If you want a specific renderer, you can specify its name here. A list of
|
|
* available renderers can be obtained by calling SDL_GetRenderDriver()
|
|
* multiple times, with indices from 0 to SDL_GetNumRenderDrivers()-1. If you
|
|
* don't need a specific renderer, specify NULL and SDL will attempt to choose
|
|
* the best option for you, based on what is available on the user's system.
|
|
*
|
|
* If `name` is a comma-separated list, SDL will try each name, in the order
|
|
* listed, until one succeeds or all of them fail.
|
|
*
|
|
* By default the rendering size matches the window size in pixels, but you
|
|
* can call SDL_SetRenderLogicalPresentation() to change the content size and
|
|
* scaling options.
|
|
*
|
|
* \param window the window where rendering is displayed.
|
|
* \param name the name of the rendering driver to initialize, or NULL to let
|
|
* SDL choose one.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRendererWithProperties
|
|
* \sa SDL_CreateSoftwareRenderer
|
|
* \sa SDL_DestroyRenderer
|
|
* \sa SDL_GetNumRenderDrivers
|
|
* \sa SDL_GetRenderDriver
|
|
* \sa SDL_GetRendererName
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window *window, const char *name);
|
|
|
|
/**
|
|
* Create a 2D rendering context for a window, with the specified properties.
|
|
*
|
|
* These are the supported properties:
|
|
*
|
|
* - `SDL_PROP_RENDERER_CREATE_NAME_STRING`: the name of the rendering driver
|
|
* to use, if a specific one is desired
|
|
* - `SDL_PROP_RENDERER_CREATE_WINDOW_POINTER`: the window where rendering is
|
|
* displayed, required if this isn't a software renderer using a surface
|
|
* - `SDL_PROP_RENDERER_CREATE_SURFACE_POINTER`: the surface where rendering
|
|
* is displayed, if you want a software renderer without a window
|
|
* - `SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER`: an SDL_Colorspace
|
|
* value describing the colorspace for output to the display, defaults to
|
|
* SDL_COLORSPACE_SRGB. The direct3d11, direct3d12, and metal renderers
|
|
* support SDL_COLORSPACE_SRGB_LINEAR, which is a linear color space and
|
|
* supports HDR output. If you select SDL_COLORSPACE_SRGB_LINEAR, drawing
|
|
* still uses the sRGB colorspace, but values can go beyond 1.0 and float
|
|
* (linear) format textures can be used for HDR content.
|
|
* - `SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER`: non-zero if you want
|
|
* present synchronized with the refresh rate. This property can take any
|
|
* value that is supported by SDL_SetRenderVSync() for the renderer.
|
|
*
|
|
* With the SDL GPU renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN`: the app is able to
|
|
* provide SPIR-V shaders to SDL_GPURenderState, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN`: the app is able to
|
|
* provide DXIL shaders to SDL_GPURenderState, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN`: the app is able to
|
|
* provide MSL shaders to SDL_GPURenderState, optional.
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER`: the VkInstance to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER`: the VkSurfaceKHR to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER`: the
|
|
* VkPhysicalDevice to use with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER`: the VkDevice to use
|
|
* with the renderer, optional.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER`: the
|
|
* queue family index used for rendering.
|
|
* - `SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER`: the
|
|
* queue family index used for presentation.
|
|
*
|
|
* \param props the properties to use.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateProperties
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateSoftwareRenderer
|
|
* \sa SDL_DestroyRenderer
|
|
* \sa SDL_GetRendererName
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties(SDL_PropertiesID props);
|
|
|
|
#define SDL_PROP_RENDERER_CREATE_NAME_STRING "SDL.renderer.create.name"
|
|
#define SDL_PROP_RENDERER_CREATE_WINDOW_POINTER "SDL.renderer.create.window"
|
|
#define SDL_PROP_RENDERER_CREATE_SURFACE_POINTER "SDL.renderer.create.surface"
|
|
#define SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.create.output_colorspace"
|
|
#define SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER "SDL.renderer.create.present_vsync"
|
|
#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN "SDL.renderer.create.gpu.shaders_spirv"
|
|
#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN "SDL.renderer.create.gpu.shaders_dxil"
|
|
#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN "SDL.renderer.create.gpu.shaders_msl"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER "SDL.renderer.create.vulkan.instance"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER "SDL.renderer.create.vulkan.surface"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER "SDL.renderer.create.vulkan.physical_device"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_DEVICE_POINTER "SDL.renderer.create.vulkan.device"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.graphics_queue_family_index"
|
|
#define SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.present_queue_family_index"
|
|
|
|
/**
|
|
* Create a 2D GPU rendering context for a window, with support for the
|
|
* specified shader format.
|
|
*
|
|
* This is a convenience function to create a SDL GPU backed renderer,
|
|
* intended to be used with SDL_GPURenderState. The resulting renderer will
|
|
* support shaders in one of the specified shader formats.
|
|
*
|
|
* If no available GPU driver supports any of the specified shader formats,
|
|
* this function will fail.
|
|
*
|
|
* \param window the window where rendering is displayed.
|
|
* \param format_flags a bitflag indicating which shader formats the app is
|
|
* able to provide.
|
|
* \param device a pointer filled with the associated GPU device, or NULL on
|
|
* error.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_CreateRendererWithProperties
|
|
* \sa SDL_GetGPUShaderFormats
|
|
* \sa SDL_CreateGPUShader
|
|
* \sa SDL_CreateGPURenderState
|
|
* \sa SDL_SetRenderGPUState
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateGPURenderer(SDL_Window *window, SDL_GPUShaderFormat format_flags, SDL_GPUDevice **device);
|
|
|
|
/**
|
|
* Create a 2D software rendering context for a surface.
|
|
*
|
|
* Two other API which can be used to create SDL_Renderer:
|
|
* SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_
|
|
* create a software renderer, but they are intended to be used with an
|
|
* SDL_Window as the final destination and not an SDL_Surface.
|
|
*
|
|
* \param surface the SDL_Surface structure representing the surface where
|
|
* rendering is done.
|
|
* \returns a valid rendering context or NULL if there was an error; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_DestroyRenderer
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface *surface);
|
|
|
|
/**
|
|
* Get the renderer associated with a window.
|
|
*
|
|
* \param window the window to query.
|
|
* \returns the rendering context on success or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window *window);
|
|
|
|
/**
|
|
* Get the window associated with a renderer.
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns the window on success or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetRenderWindow(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the name of a renderer.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns the name of the selected renderer, or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_CreateRendererWithProperties
|
|
*/
|
|
extern SDL_DECLSPEC const char * SDLCALL SDL_GetRendererName(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the properties associated with a renderer.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_RENDERER_NAME_STRING`: the name of the rendering driver
|
|
* - `SDL_PROP_RENDERER_WINDOW_POINTER`: the window where rendering is
|
|
* displayed, if any
|
|
* - `SDL_PROP_RENDERER_SURFACE_POINTER`: the surface where rendering is
|
|
* displayed, if this is a software renderer without a window
|
|
* - `SDL_PROP_RENDERER_VSYNC_NUMBER`: the current vsync setting
|
|
* - `SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER`: the maximum texture width
|
|
* and height
|
|
* - `SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER`: a (const SDL_PixelFormat *)
|
|
* array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN,
|
|
* representing the available texture formats for this renderer.
|
|
* - `SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER`: an SDL_Colorspace value
|
|
* describing the colorspace for output to the display, defaults to
|
|
* SDL_COLORSPACE_SRGB.
|
|
* - `SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN`: true if the output colorspace is
|
|
* SDL_COLORSPACE_SRGB_LINEAR and the renderer is showing on a display with
|
|
* HDR enabled. This property can change dynamically when
|
|
* SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT`: the value of SDR white in the
|
|
* SDL_COLORSPACE_SRGB_LINEAR colorspace. When HDR is enabled, this value is
|
|
* automatically multiplied into the color scale. This property can change
|
|
* dynamically when SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
* - `SDL_PROP_RENDERER_HDR_HEADROOM_FLOAT`: the additional high dynamic range
|
|
* that can be displayed, in terms of the SDR white point. When HDR is not
|
|
* enabled, this will be 1.0. This property can change dynamically when
|
|
* SDL_EVENT_WINDOW_HDR_STATE_CHANGED is sent.
|
|
*
|
|
* With the direct3d renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D9_DEVICE_POINTER`: the IDirect3DDevice9 associated
|
|
* with the renderer
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D11_DEVICE_POINTER`: the ID3D11Device associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER`: the IDXGISwapChain1
|
|
* associated with the renderer. This may change when the window is resized.
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_D3D12_DEVICE_POINTER`: the ID3D12Device associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER`: the IDXGISwapChain4
|
|
* associated with the renderer.
|
|
* - `SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER`: the ID3D12CommandQueue
|
|
* associated with the renderer
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER`: the VkInstance associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER`: the VkSurfaceKHR associated
|
|
* with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER`: the VkPhysicalDevice
|
|
* associated with the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_DEVICE_POINTER`: the VkDevice associated with
|
|
* the renderer
|
|
* - `SDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER`: the queue
|
|
* family index used for rendering
|
|
* - `SDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER`: the queue
|
|
* family index used for presentation
|
|
* - `SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER`: the number of
|
|
* swapchain images, or potential frames in flight, used by the Vulkan
|
|
* renderer
|
|
*
|
|
* With the gpu renderer:
|
|
*
|
|
* - `SDL_PROP_RENDERER_GPU_DEVICE_POINTER`: the SDL_GPUDevice associated with
|
|
* the renderer
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns a valid property ID on success or 0 on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetRendererProperties(SDL_Renderer *renderer);
|
|
|
|
#define SDL_PROP_RENDERER_NAME_STRING "SDL.renderer.name"
|
|
#define SDL_PROP_RENDERER_WINDOW_POINTER "SDL.renderer.window"
|
|
#define SDL_PROP_RENDERER_SURFACE_POINTER "SDL.renderer.surface"
|
|
#define SDL_PROP_RENDERER_VSYNC_NUMBER "SDL.renderer.vsync"
|
|
#define SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER "SDL.renderer.max_texture_size"
|
|
#define SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER "SDL.renderer.texture_formats"
|
|
#define SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.output_colorspace"
|
|
#define SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN "SDL.renderer.HDR_enabled"
|
|
#define SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT "SDL.renderer.SDR_white_point"
|
|
#define SDL_PROP_RENDERER_HDR_HEADROOM_FLOAT "SDL.renderer.HDR_headroom"
|
|
#define SDL_PROP_RENDERER_D3D9_DEVICE_POINTER "SDL.renderer.d3d9.device"
|
|
#define SDL_PROP_RENDERER_D3D11_DEVICE_POINTER "SDL.renderer.d3d11.device"
|
|
#define SDL_PROP_RENDERER_D3D11_SWAPCHAIN_POINTER "SDL.renderer.d3d11.swap_chain"
|
|
#define SDL_PROP_RENDERER_D3D12_DEVICE_POINTER "SDL.renderer.d3d12.device"
|
|
#define SDL_PROP_RENDERER_D3D12_SWAPCHAIN_POINTER "SDL.renderer.d3d12.swap_chain"
|
|
#define SDL_PROP_RENDERER_D3D12_COMMAND_QUEUE_POINTER "SDL.renderer.d3d12.command_queue"
|
|
#define SDL_PROP_RENDERER_VULKAN_INSTANCE_POINTER "SDL.renderer.vulkan.instance"
|
|
#define SDL_PROP_RENDERER_VULKAN_SURFACE_NUMBER "SDL.renderer.vulkan.surface"
|
|
#define SDL_PROP_RENDERER_VULKAN_PHYSICAL_DEVICE_POINTER "SDL.renderer.vulkan.physical_device"
|
|
#define SDL_PROP_RENDERER_VULKAN_DEVICE_POINTER "SDL.renderer.vulkan.device"
|
|
#define SDL_PROP_RENDERER_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.vulkan.graphics_queue_family_index"
|
|
#define SDL_PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.vulkan.present_queue_family_index"
|
|
#define SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER "SDL.renderer.vulkan.swapchain_image_count"
|
|
#define SDL_PROP_RENDERER_GPU_DEVICE_POINTER "SDL.renderer.gpu.device"
|
|
|
|
/**
|
|
* Get the output size in pixels of a rendering context.
|
|
*
|
|
* This returns the true output size in pixels, ignoring any render targets or
|
|
* logical size and presentation.
|
|
*
|
|
* For the output size of the current rendering target, with logical size
|
|
* adjustments, use SDL_GetCurrentRenderOutputSize() instead.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w a pointer filled in with the width in pixels.
|
|
* \param h a pointer filled in with the height in pixels.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetCurrentRenderOutputSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderOutputSize(SDL_Renderer *renderer, int *w, int *h);
|
|
|
|
/**
|
|
* Get the current output size in pixels of a rendering context.
|
|
*
|
|
* If a rendering target is active, this will return the size of the rendering
|
|
* target in pixels, otherwise return the value of SDL_GetRenderOutputSize().
|
|
*
|
|
* Rendering target or not, the output will be adjusted by the current logical
|
|
* presentation state, dictated by SDL_SetRenderLogicalPresentation().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w a pointer filled in with the current width.
|
|
* \param h a pointer filled in with the current height.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderOutputSize
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetCurrentRenderOutputSize(SDL_Renderer *renderer, int *w, int *h);
|
|
|
|
/**
|
|
* Create a texture for a rendering context.
|
|
*
|
|
* The contents of a texture when first created are not defined.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param format one of the enumerated values in SDL_PixelFormat.
|
|
* \param access one of the enumerated values in SDL_TextureAccess.
|
|
* \param w the width of the texture in pixels.
|
|
* \param h the height of the texture in pixels.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
* \sa SDL_GetTextureSize
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer *renderer, SDL_PixelFormat format, SDL_TextureAccess access, int w, int h);
|
|
|
|
/**
|
|
* Create a texture from an existing surface.
|
|
*
|
|
* The surface is not modified or freed by this function.
|
|
*
|
|
* The SDL_TextureAccess hint for the created texture is
|
|
* `SDL_TEXTUREACCESS_STATIC`.
|
|
*
|
|
* The pixel format of the created texture may be different from the pixel
|
|
* format of the surface, and can be queried using the
|
|
* SDL_PROP_TEXTURE_FORMAT_NUMBER property.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param surface the SDL_Surface structure containing pixel data used to fill
|
|
* the texture.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureWithProperties
|
|
* \sa SDL_DestroyTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer *renderer, SDL_Surface *surface);
|
|
|
|
/**
|
|
* Create a texture for a rendering context with the specified properties.
|
|
*
|
|
* These are the supported properties:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER`: an SDL_Colorspace value
|
|
* describing the texture colorspace, defaults to SDL_COLORSPACE_SRGB_LINEAR
|
|
* for floating point textures, SDL_COLORSPACE_HDR10 for 10-bit textures,
|
|
* SDL_COLORSPACE_SRGB for other RGB textures and SDL_COLORSPACE_JPEG for
|
|
* YUV textures.
|
|
* - `SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER`: one of the enumerated values in
|
|
* SDL_PixelFormat, defaults to the best RGBA format for the renderer
|
|
* - `SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER`: one of the enumerated values in
|
|
* SDL_TextureAccess, defaults to SDL_TEXTUREACCESS_STATIC
|
|
* - `SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER`: the width of the texture in
|
|
* pixels, required
|
|
* - `SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER`: the height of the texture in
|
|
* pixels, required
|
|
* - `SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT`: for HDR10 and floating
|
|
* point textures, this defines the value of 100% diffuse white, with higher
|
|
* values being displayed in the High Dynamic Range headroom. This defaults
|
|
* to 100 for HDR10 textures and 1.0 for floating point textures.
|
|
* - `SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT`: for HDR10 and floating
|
|
* point textures, this defines the maximum dynamic range used by the
|
|
* content, in terms of the SDR white point. This would be equivalent to
|
|
* maxCLL / SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT for HDR10 content.
|
|
* If this is defined, any values outside the range supported by the display
|
|
* will be scaled into the available HDR headroom, otherwise they are
|
|
* clipped.
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER`: the ID3D11Texture2D
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER`: the ID3D11Texture2D
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER`: the ID3D11Texture2D
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER`: the ID3D12Resource
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER`: the ID3D12Resource
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER`: the ID3D12Resource
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the metal renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER`: the CVPixelBufferRef
|
|
* associated with the texture, if you want to create a texture from an
|
|
* existing pixel buffer.
|
|
*
|
|
* With the opengl renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the opengles2 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture, if you want to wrap an existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
* - `SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture, if you want to wrap an
|
|
* existing texture.
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage with layout
|
|
* VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL associated with the texture, if
|
|
* you want to wrap an existing texture.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param props the properties to use.
|
|
* \returns the created texture or NULL on failure; call SDL_GetError() for
|
|
* more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateProperties
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
* \sa SDL_DestroyTexture
|
|
* \sa SDL_GetTextureSize
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props);
|
|
|
|
#define SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER "SDL.texture.create.colorspace"
|
|
#define SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER "SDL.texture.create.format"
|
|
#define SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER "SDL.texture.create.access"
|
|
#define SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER "SDL.texture.create.width"
|
|
#define SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER "SDL.texture.create.height"
|
|
#define SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT "SDL.texture.create.SDR_white_point"
|
|
#define SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT "SDL.texture.create.HDR_headroom"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER "SDL.texture.create.d3d11.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER "SDL.texture.create.d3d11.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER "SDL.texture.create.d3d11.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER "SDL.texture.create.d3d12.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER "SDL.texture.create.d3d12.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER "SDL.texture.create.d3d12.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER "SDL.texture.create.metal.pixelbuffer"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER "SDL.texture.create.opengl.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.create.opengl.texture_uv"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.create.opengl.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.create.opengl.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.create.opengles2.texture"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.create.opengles2.texture_uv"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.create.opengles2.texture_u"
|
|
#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.create.opengles2.texture_v"
|
|
#define SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER "SDL.texture.create.vulkan.texture"
|
|
|
|
/**
|
|
* Get the properties associated with a texture.
|
|
*
|
|
* The following read-only properties are provided by SDL:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_COLORSPACE_NUMBER`: an SDL_Colorspace value describing
|
|
* the texture colorspace.
|
|
* - `SDL_PROP_TEXTURE_FORMAT_NUMBER`: one of the enumerated values in
|
|
* SDL_PixelFormat.
|
|
* - `SDL_PROP_TEXTURE_ACCESS_NUMBER`: one of the enumerated values in
|
|
* SDL_TextureAccess.
|
|
* - `SDL_PROP_TEXTURE_WIDTH_NUMBER`: the width of the texture in pixels.
|
|
* - `SDL_PROP_TEXTURE_HEIGHT_NUMBER`: the height of the texture in pixels.
|
|
* - `SDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT`: for HDR10 and floating point
|
|
* textures, this defines the value of 100% diffuse white, with higher
|
|
* values being displayed in the High Dynamic Range headroom. This defaults
|
|
* to 100 for HDR10 textures and 1.0 for other textures.
|
|
* - `SDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT`: for HDR10 and floating point
|
|
* textures, this defines the maximum dynamic range used by the content, in
|
|
* terms of the SDR white point. If this is defined, any values outside the
|
|
* range supported by the display will be scaled into the available HDR
|
|
* headroom, otherwise they are clipped. This defaults to 1.0 for SDR
|
|
* textures, 4.0 for HDR10 textures, and no default for floating point
|
|
* textures.
|
|
*
|
|
* With the direct3d11 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER`: the ID3D11Texture2D associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER`: the ID3D11Texture2D
|
|
* associated with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER`: the ID3D11Texture2D
|
|
* associated with the V plane of a YUV texture
|
|
*
|
|
* With the direct3d12 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER`: the ID3D12Resource associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER`: the ID3D12Resource associated
|
|
* with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER`: the ID3D12Resource associated
|
|
* with the V plane of a YUV texture
|
|
*
|
|
* With the vulkan renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER`: the VkImage associated with the
|
|
* texture
|
|
*
|
|
* With the opengl renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER`: the GLuint texture associated
|
|
* with the texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER`: the GLuint texture associated
|
|
* with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER`: the GLuint texture associated
|
|
* with the V plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER`: the GLenum for the
|
|
* texture target (`GL_TEXTURE_2D`, `GL_TEXTURE_RECTANGLE_ARB`, etc)
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT`: the texture coordinate width of
|
|
* the texture (0.0 - 1.0)
|
|
* - `SDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT`: the texture coordinate height of
|
|
* the texture (0.0 - 1.0)
|
|
*
|
|
* With the opengles2 renderer:
|
|
*
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER`: the GLuint texture
|
|
* associated with the texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER`: the GLuint texture
|
|
* associated with the UV plane of an NV12 texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER`: the GLuint texture
|
|
* associated with the U plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER`: the GLuint texture
|
|
* associated with the V plane of a YUV texture
|
|
* - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER`: the GLenum for the
|
|
* texture target (`GL_TEXTURE_2D`, `GL_TEXTURE_EXTERNAL_OES`, etc)
|
|
*
|
|
* \param texture the texture to query.
|
|
* \returns a valid property ID on success or 0 on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetTextureProperties(SDL_Texture *texture);
|
|
|
|
#define SDL_PROP_TEXTURE_COLORSPACE_NUMBER "SDL.texture.colorspace"
|
|
#define SDL_PROP_TEXTURE_FORMAT_NUMBER "SDL.texture.format"
|
|
#define SDL_PROP_TEXTURE_ACCESS_NUMBER "SDL.texture.access"
|
|
#define SDL_PROP_TEXTURE_WIDTH_NUMBER "SDL.texture.width"
|
|
#define SDL_PROP_TEXTURE_HEIGHT_NUMBER "SDL.texture.height"
|
|
#define SDL_PROP_TEXTURE_SDR_WHITE_POINT_FLOAT "SDL.texture.SDR_white_point"
|
|
#define SDL_PROP_TEXTURE_HDR_HEADROOM_FLOAT "SDL.texture.HDR_headroom"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_POINTER "SDL.texture.d3d11.texture"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_U_POINTER "SDL.texture.d3d11.texture_u"
|
|
#define SDL_PROP_TEXTURE_D3D11_TEXTURE_V_POINTER "SDL.texture.d3d11.texture_v"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_POINTER "SDL.texture.d3d12.texture"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_U_POINTER "SDL.texture.d3d12.texture_u"
|
|
#define SDL_PROP_TEXTURE_D3D12_TEXTURE_V_POINTER "SDL.texture.d3d12.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_NUMBER "SDL.texture.opengl.texture"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.opengl.texture_uv"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.opengl.texture_u"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.opengl.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEXTURE_TARGET_NUMBER "SDL.texture.opengl.target"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEX_W_FLOAT "SDL.texture.opengl.tex_w"
|
|
#define SDL_PROP_TEXTURE_OPENGL_TEX_H_FLOAT "SDL.texture.opengl.tex_h"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.opengles2.texture"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.opengles2.texture_uv"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.opengles2.texture_u"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.opengles2.texture_v"
|
|
#define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER "SDL.texture.opengles2.target"
|
|
#define SDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER "SDL.texture.vulkan.texture"
|
|
|
|
/**
|
|
* Get the renderer that created an SDL_Texture.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \returns a pointer to the SDL_Renderer that created the texture, or NULL on
|
|
* failure; call SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety It is safe to call this function from any thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_GetRendererFromTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Get the size of a texture, as floating point values.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param w a pointer filled in with the width of the texture in pixels. This
|
|
* argument can be NULL if you don't need this information.
|
|
* \param h a pointer filled in with the height of the texture in pixels. This
|
|
* argument can be NULL if you don't need this information.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureSize(SDL_Texture *texture, float *w, float *h);
|
|
|
|
/**
|
|
* Set an additional color value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation each source color
|
|
* channel is modulated by the appropriate color value according to the
|
|
* following formula:
|
|
*
|
|
* `srcC = srcC * (color / 255)`
|
|
*
|
|
* Color modulation is not always supported by the renderer; it will return
|
|
* false if color modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param r the red color value multiplied into copy operations.
|
|
* \param g the green color value multiplied into copy operations.
|
|
* \param b the blue color value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureAlphaMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureColorMod(SDL_Texture *texture, Uint8 r, Uint8 g, Uint8 b);
|
|
|
|
|
|
/**
|
|
* Set an additional color value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation each source color
|
|
* channel is modulated by the appropriate color value according to the
|
|
* following formula:
|
|
*
|
|
* `srcC = srcC * color`
|
|
*
|
|
* Color modulation is not always supported by the renderer; it will return
|
|
* false if color modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param r the red color value multiplied into copy operations.
|
|
* \param g the green color value multiplied into copy operations.
|
|
* \param b the blue color value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureColorModFloat(SDL_Texture *texture, float r, float g, float b);
|
|
|
|
|
|
/**
|
|
* Get the additional color value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param r a pointer filled in with the current red color value.
|
|
* \param g a pointer filled in with the current green color value.
|
|
* \param b a pointer filled in with the current blue color value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureColorMod(SDL_Texture *texture, Uint8 *r, Uint8 *g, Uint8 *b);
|
|
|
|
/**
|
|
* Get the additional color value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param r a pointer filled in with the current red color value.
|
|
* \param g a pointer filled in with the current green color value.
|
|
* \param b a pointer filled in with the current blue color value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureColorModFloat(SDL_Texture *texture, float *r, float *g, float *b);
|
|
|
|
/**
|
|
* Set an additional alpha value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation the source alpha
|
|
* value is modulated by this alpha value according to the following formula:
|
|
*
|
|
* `srcA = srcA * (alpha / 255)`
|
|
*
|
|
* Alpha modulation is not always supported by the renderer; it will return
|
|
* false if alpha modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param alpha the source alpha value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureColorMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureAlphaMod(SDL_Texture *texture, Uint8 alpha);
|
|
|
|
/**
|
|
* Set an additional alpha value multiplied into render copy operations.
|
|
*
|
|
* When this texture is rendered, during the copy operation the source alpha
|
|
* value is modulated by this alpha value according to the following formula:
|
|
*
|
|
* `srcA = srcA * alpha`
|
|
*
|
|
* Alpha modulation is not always supported by the renderer; it will return
|
|
* false if alpha modulation is not supported.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param alpha the source alpha value multiplied into copy operations.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_SetTextureAlphaMod
|
|
* \sa SDL_SetTextureColorModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureAlphaModFloat(SDL_Texture *texture, float alpha);
|
|
|
|
/**
|
|
* Get the additional alpha value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param alpha a pointer filled in with the current alpha value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaModFloat
|
|
* \sa SDL_GetTextureColorMod
|
|
* \sa SDL_SetTextureAlphaMod
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureAlphaMod(SDL_Texture *texture, Uint8 *alpha);
|
|
|
|
/**
|
|
* Get the additional alpha value multiplied into render copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param alpha a pointer filled in with the current alpha value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureAlphaMod
|
|
* \sa SDL_GetTextureColorModFloat
|
|
* \sa SDL_SetTextureAlphaModFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureAlphaModFloat(SDL_Texture *texture, float *alpha);
|
|
|
|
/**
|
|
* Set the blend mode for a texture, used by SDL_RenderTexture().
|
|
*
|
|
* If the blend mode is not supported, the closest supported mode is chosen
|
|
* and this function returns false.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param blendMode the SDL_BlendMode to use for texture blending.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode blendMode);
|
|
|
|
/**
|
|
* Get the blend mode used for texture copy operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param blendMode a pointer filled in with the current SDL_BlendMode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetTextureBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureBlendMode(SDL_Texture *texture, SDL_BlendMode *blendMode);
|
|
|
|
/**
|
|
* Set the scale mode used for texture scale operations.
|
|
*
|
|
* The default texture scale mode is SDL_SCALEMODE_LINEAR.
|
|
*
|
|
* If the scale mode is not supported, the closest supported mode is chosen.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param scaleMode the SDL_ScaleMode to use for texture scaling.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode scaleMode);
|
|
|
|
/**
|
|
* Get the scale mode used for texture scale operations.
|
|
*
|
|
* \param texture the texture to query.
|
|
* \param scaleMode a pointer filled in with the current scale mode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureScaleMode(SDL_Texture *texture, SDL_ScaleMode *scaleMode);
|
|
|
|
/**
|
|
* Update the given texture rectangle with new pixel data.
|
|
*
|
|
* The pixel data must be in the pixel format of the texture, which can be
|
|
* queried using the SDL_PROP_TEXTURE_FORMAT_NUMBER property.
|
|
*
|
|
* This is a fairly slow function, intended for use with static textures that
|
|
* do not change often.
|
|
*
|
|
* If the texture is intended to be updated often, it is preferred to create
|
|
* the texture as streaming and use the locking functions referenced below.
|
|
* While this function will work with streaming textures, for optimization
|
|
* reasons you may not get the pixels back if you lock the texture afterward.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect an SDL_Rect structure representing the area to update, or NULL
|
|
* to update the entire texture.
|
|
* \param pixels the raw pixel data in the format of the texture.
|
|
* \param pitch the number of bytes in a row of pixel data, including padding
|
|
* between lines.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
* \sa SDL_UnlockTexture
|
|
* \sa SDL_UpdateNVTexture
|
|
* \sa SDL_UpdateYUVTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateTexture(SDL_Texture *texture, const SDL_Rect *rect, const void *pixels, int pitch);
|
|
|
|
/**
|
|
* Update a rectangle within a planar YV12 or IYUV texture with new pixel
|
|
* data.
|
|
*
|
|
* You can use SDL_UpdateTexture() as long as your pixel data is a contiguous
|
|
* block of Y and U/V planes in the proper order, but this function is
|
|
* available if your pixel data is not contiguous.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect a pointer to the rectangle of pixels to update, or NULL to
|
|
* update the entire texture.
|
|
* \param Yplane the raw pixel data for the Y plane.
|
|
* \param Ypitch the number of bytes between rows of pixel data for the Y
|
|
* plane.
|
|
* \param Uplane the raw pixel data for the U plane.
|
|
* \param Upitch the number of bytes between rows of pixel data for the U
|
|
* plane.
|
|
* \param Vplane the raw pixel data for the V plane.
|
|
* \param Vpitch the number of bytes between rows of pixel data for the V
|
|
* plane.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_UpdateNVTexture
|
|
* \sa SDL_UpdateTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateYUVTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
const Uint8 *Yplane, int Ypitch,
|
|
const Uint8 *Uplane, int Upitch,
|
|
const Uint8 *Vplane, int Vpitch);
|
|
|
|
/**
|
|
* Update a rectangle within a planar NV12 or NV21 texture with new pixels.
|
|
*
|
|
* You can use SDL_UpdateTexture() as long as your pixel data is a contiguous
|
|
* block of NV12/21 planes in the proper order, but this function is available
|
|
* if your pixel data is not contiguous.
|
|
*
|
|
* \param texture the texture to update.
|
|
* \param rect a pointer to the rectangle of pixels to update, or NULL to
|
|
* update the entire texture.
|
|
* \param Yplane the raw pixel data for the Y plane.
|
|
* \param Ypitch the number of bytes between rows of pixel data for the Y
|
|
* plane.
|
|
* \param UVplane the raw pixel data for the UV plane.
|
|
* \param UVpitch the number of bytes between rows of pixel data for the UV
|
|
* plane.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_UpdateTexture
|
|
* \sa SDL_UpdateYUVTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_UpdateNVTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
const Uint8 *Yplane, int Ypitch,
|
|
const Uint8 *UVplane, int UVpitch);
|
|
|
|
/**
|
|
* Lock a portion of the texture for **write-only** pixel access.
|
|
*
|
|
* As an optimization, the pixels made available for editing don't necessarily
|
|
* contain the old texture data. This is a write-only operation, and if you
|
|
* need to keep a copy of the texture data you should do that at the
|
|
* application level.
|
|
*
|
|
* You must use SDL_UnlockTexture() to unlock the pixels and apply any
|
|
* changes.
|
|
*
|
|
* \param texture the texture to lock for access, which was created with
|
|
* `SDL_TEXTUREACCESS_STREAMING`.
|
|
* \param rect an SDL_Rect structure representing the area to lock for access;
|
|
* NULL to lock the entire texture.
|
|
* \param pixels this is filled in with a pointer to the locked pixels,
|
|
* appropriately offset by the locked area.
|
|
* \param pitch this is filled in with the pitch of the locked pixels; the
|
|
* pitch is the length of one row in bytes.
|
|
* \returns true on success or false if the texture is not valid or was not
|
|
* created with `SDL_TEXTUREACCESS_STREAMING`; call SDL_GetError()
|
|
* for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_LockTextureToSurface
|
|
* \sa SDL_UnlockTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_LockTexture(SDL_Texture *texture,
|
|
const SDL_Rect *rect,
|
|
void **pixels, int *pitch);
|
|
|
|
/**
|
|
* Lock a portion of the texture for **write-only** pixel access, and expose
|
|
* it as a SDL surface.
|
|
*
|
|
* Besides providing an SDL_Surface instead of raw pixel data, this function
|
|
* operates like SDL_LockTexture.
|
|
*
|
|
* As an optimization, the pixels made available for editing don't necessarily
|
|
* contain the old texture data. This is a write-only operation, and if you
|
|
* need to keep a copy of the texture data you should do that at the
|
|
* application level.
|
|
*
|
|
* You must use SDL_UnlockTexture() to unlock the pixels and apply any
|
|
* changes.
|
|
*
|
|
* The returned surface is freed internally after calling SDL_UnlockTexture()
|
|
* or SDL_DestroyTexture(). The caller should not free it.
|
|
*
|
|
* \param texture the texture to lock for access, which must be created with
|
|
* `SDL_TEXTUREACCESS_STREAMING`.
|
|
* \param rect a pointer to the rectangle to lock for access. If the rect is
|
|
* NULL, the entire texture will be locked.
|
|
* \param surface a pointer to an SDL surface of size **rect**. Don't assume
|
|
* any specific pixel 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.2.0.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
* \sa SDL_UnlockTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, const SDL_Rect *rect, SDL_Surface **surface);
|
|
|
|
/**
|
|
* Unlock a texture, uploading the changes to video memory, if needed.
|
|
*
|
|
* **Warning**: Please note that SDL_LockTexture() is intended to be
|
|
* write-only; it will not guarantee the previous contents of the texture will
|
|
* be provided. You must fully initialize any area of a texture that you lock
|
|
* before unlocking it, as the pixels might otherwise be uninitialized memory.
|
|
*
|
|
* Which is to say: locking and immediately unlocking a texture can result in
|
|
* corrupted textures, depending on the renderer in use.
|
|
*
|
|
* \param texture a texture locked by SDL_LockTexture().
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_LockTexture
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Set a texture as the current rendering target.
|
|
*
|
|
* The default render target is the window for which the renderer was created.
|
|
* To stop rendering to a texture and render to the window again, call this
|
|
* function with a NULL `texture`.
|
|
*
|
|
* Viewport, cliprect, scale, and logical presentation are unique to each
|
|
* render target. Get and set functions for these states apply to the current
|
|
* render target set by this function, and those states persist on each target
|
|
* when the current render target changes.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture the targeted texture, which must be created with the
|
|
* `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the
|
|
* window instead of a texture.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderTarget
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture);
|
|
|
|
/**
|
|
* Get the current render target.
|
|
*
|
|
* The default render target is the window for which the renderer was created,
|
|
* and is reported a NULL here.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns the current render target or NULL for the default render target.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderTarget
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Set a device-independent resolution and presentation mode for rendering.
|
|
*
|
|
* This function sets the width and height of the logical rendering output.
|
|
* The renderer will act as if the current render target is always the
|
|
* requested dimensions, scaling to the actual resolution as necessary.
|
|
*
|
|
* This can be useful for games that expect a fixed size, but would like to
|
|
* scale the output to whatever is available, regardless of how a user resizes
|
|
* a window, or if the display is high DPI.
|
|
*
|
|
* Logical presentation can be used with both render target textures and the
|
|
* renderer's window; the state is unique to each render target, and this
|
|
* function sets the state for the current render target. It might be useful
|
|
* to draw to a texture that matches the window dimensions with logical
|
|
* presentation enabled, and then draw that texture across the entire window
|
|
* with logical presentation disabled. Be careful not to render both with
|
|
* logical presentation enabled, however, as this could produce
|
|
* double-letterboxing, etc.
|
|
*
|
|
* You can disable logical coordinates by setting the mode to
|
|
* SDL_LOGICAL_PRESENTATION_DISABLED, and in that case you get the full pixel
|
|
* resolution of the render target; it is safe to toggle logical presentation
|
|
* during the rendering of a frame: perhaps most of the rendering is done to
|
|
* specific dimensions but to make fonts look sharp, the app turns off logical
|
|
* presentation while drawing text, for example.
|
|
*
|
|
* For the renderer's window, letterboxing is drawn into the framebuffer if
|
|
* logical presentation is enabled during SDL_RenderPresent; be sure to
|
|
* reenable it before presenting if you were toggling it, otherwise the
|
|
* letterbox areas might have artifacts from previous frames (or artifacts
|
|
* from external overlays, etc). Letterboxing is never drawn into texture
|
|
* render targets; be sure to call SDL_RenderClear() before drawing into the
|
|
* texture so the letterboxing areas are cleared, if appropriate.
|
|
*
|
|
* You can convert coordinates in an event into rendering coordinates using
|
|
* SDL_ConvertEventToRenderCoordinates().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w the width of the logical resolution.
|
|
* \param h the height of the logical resolution.
|
|
* \param mode the presentation mode used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_ConvertEventToRenderCoordinates
|
|
* \sa SDL_GetRenderLogicalPresentation
|
|
* \sa SDL_GetRenderLogicalPresentationRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderLogicalPresentation(SDL_Renderer *renderer, int w, int h, SDL_RendererLogicalPresentation mode);
|
|
|
|
/**
|
|
* Get device independent resolution and presentation mode for rendering.
|
|
*
|
|
* This function gets the width and height of the logical rendering output, or
|
|
* the output size in pixels if a logical resolution is not enabled.
|
|
*
|
|
* Each render target has its own logical presentation state. This function
|
|
* gets the state for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param w an int to be filled with the width.
|
|
* \param h an int to be filled with the height.
|
|
* \param mode the presentation mode used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderLogicalPresentation(SDL_Renderer *renderer, int *w, int *h, SDL_RendererLogicalPresentation *mode);
|
|
|
|
/**
|
|
* Get the final presentation rectangle for rendering.
|
|
*
|
|
* This function returns the calculated rectangle used for logical
|
|
* presentation, based on the presentation mode and output size. If logical
|
|
* presentation is disabled, it will fill the rectangle with the output size,
|
|
* in pixels.
|
|
*
|
|
* Each render target has its own logical presentation state. This function
|
|
* gets the rectangle for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect a pointer filled in with the final presentation rectangle, may
|
|
* be NULL.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderLogicalPresentationRect(SDL_Renderer *renderer, SDL_FRect *rect);
|
|
|
|
/**
|
|
* Get a point in render coordinates when given a point in window coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param window_x the x coordinate in window coordinates.
|
|
* \param window_y the y coordinate in window coordinates.
|
|
* \param x a pointer filled with the x coordinate in render coordinates.
|
|
* \param y a pointer filled with the y coordinate in render coordinates.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
* \sa SDL_SetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderCoordinatesFromWindow(SDL_Renderer *renderer, float window_x, float window_y, float *x, float *y);
|
|
|
|
/**
|
|
* Get a point in window coordinates when given a point in render coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param x the x coordinate in render coordinates.
|
|
* \param y the y coordinate in render coordinates.
|
|
* \param window_x a pointer filled with the x coordinate in window
|
|
* coordinates.
|
|
* \param window_y a pointer filled with the y coordinate in window
|
|
* coordinates.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderLogicalPresentation
|
|
* \sa SDL_SetRenderScale
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderCoordinatesToWindow(SDL_Renderer *renderer, float x, float y, float *window_x, float *window_y);
|
|
|
|
/**
|
|
* Convert the coordinates in an event to render coordinates.
|
|
*
|
|
* This takes into account several states:
|
|
*
|
|
* - The window dimensions.
|
|
* - The logical presentation settings (SDL_SetRenderLogicalPresentation)
|
|
* - The scale (SDL_SetRenderScale)
|
|
* - The viewport (SDL_SetRenderViewport)
|
|
*
|
|
* Various event types are converted with this function: mouse, touch, pen,
|
|
* etc.
|
|
*
|
|
* Touch coordinates are converted from normalized coordinates in the window
|
|
* to non-normalized rendering coordinates.
|
|
*
|
|
* Relative mouse coordinates (xrel and yrel event fields) are _also_
|
|
* converted. Applications that do not want these fields converted should use
|
|
* SDL_RenderCoordinatesFromWindow() on the specific event fields instead of
|
|
* converting the entire event structure.
|
|
*
|
|
* Once converted, coordinates may be outside the rendering area.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param event the event to modify.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderCoordinatesFromWindow
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_ConvertEventToRenderCoordinates(SDL_Renderer *renderer, SDL_Event *event);
|
|
|
|
/**
|
|
* Set the drawing area for rendering on the current target.
|
|
*
|
|
* Drawing will clip to this area (separately from any clipping done with
|
|
* SDL_SetRenderClipRect), and the top left of the area will become coordinate
|
|
* (0, 0) for future drawing commands.
|
|
*
|
|
* The area's width and height must be >= 0.
|
|
*
|
|
* Each render target has its own viewport. This function sets the viewport
|
|
* for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect the SDL_Rect structure representing the drawing area, or NULL
|
|
* to set the viewport to the entire target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderViewport
|
|
* \sa SDL_RenderViewportSet
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderViewport(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the drawing area for the current target.
|
|
*
|
|
* Each render target has its own viewport. This function gets the viewport
|
|
* for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure filled in with the current drawing area.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderViewportSet
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderViewport(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Return whether an explicit rectangle was set as the viewport.
|
|
*
|
|
* This is useful if you're saving and restoring the viewport and want to know
|
|
* whether you should restore a specific rectangle or NULL. Note that the
|
|
* viewport is always reset when changing rendering targets.
|
|
*
|
|
* Each render target has its own viewport. This function checks the viewport
|
|
* for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true if the viewport was set to a specific rectangle, or false if
|
|
* it was set to NULL (the entire target).
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderViewport
|
|
* \sa SDL_SetRenderViewport
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderViewportSet(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the safe area for rendering within the current viewport.
|
|
*
|
|
* Some devices have portions of the screen which are partially obscured or
|
|
* not interactive, possibly due to on-screen controls, curved edges, camera
|
|
* notches, TV overscan, etc. This function provides the area of the current
|
|
* viewport which is safe to have interactible content. You should continue
|
|
* rendering into the rest of the render target, but it should not contain
|
|
* visually important or interactible content.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect a pointer filled in with the area that is safe for interactive
|
|
* content.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderSafeArea(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Set the clip rectangle for rendering on the specified target.
|
|
*
|
|
* Each render target has its own clip rectangle. This function sets the
|
|
* cliprect for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure representing the clip area, relative to
|
|
* the viewport, or NULL to disable clipping.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderClipRect
|
|
* \sa SDL_RenderClipEnabled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderClipRect(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get the clip rectangle for the current target.
|
|
*
|
|
* Each render target has its own clip rectangle. This function gets the
|
|
* cliprect for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure filled in with the current clipping area
|
|
* or an empty rectangle if clipping is disabled.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderClipEnabled
|
|
* \sa SDL_SetRenderClipRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderClipRect(SDL_Renderer *renderer, SDL_Rect *rect);
|
|
|
|
/**
|
|
* Get whether clipping is enabled on the given render target.
|
|
*
|
|
* Each render target has its own clip rectangle. This function checks the
|
|
* cliprect for the current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true if clipping is enabled or false if not; call SDL_GetError()
|
|
* for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderClipRect
|
|
* \sa SDL_SetRenderClipRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderClipEnabled(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Set the drawing scale for rendering on the current target.
|
|
*
|
|
* The drawing coordinates are scaled by the x/y scaling factors before they
|
|
* are used by the renderer. This allows resolution independent drawing with a
|
|
* single coordinate system.
|
|
*
|
|
* If this results in scaling or subpixel drawing by the rendering backend, it
|
|
* will be handled using the appropriate quality hints. For best results use
|
|
* integer scaling factors.
|
|
*
|
|
* Each render target has its own scale. This function sets the scale for the
|
|
* current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scaleX the horizontal scaling factor.
|
|
* \param scaleY the vertical scaling factor.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderScale(SDL_Renderer *renderer, float scaleX, float scaleY);
|
|
|
|
/**
|
|
* Get the drawing scale for the current target.
|
|
*
|
|
* Each render target has its own scale. This function gets the scale for the
|
|
* current render target.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scaleX a pointer filled in with the horizontal scaling factor.
|
|
* \param scaleY a pointer filled in with the vertical scaling factor.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderScale(SDL_Renderer *renderer, float *scaleX, float *scaleY);
|
|
|
|
/**
|
|
* Set the color used for drawing operations.
|
|
*
|
|
* Set the color for drawing or filling rectangles, lines, and points, and for
|
|
* SDL_RenderClear().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r the red value used to draw on the rendering target.
|
|
* \param g the green value used to draw on the rendering target.
|
|
* \param b the blue value used to draw on the rendering target.
|
|
* \param a the alpha value used to draw on the rendering target; usually
|
|
* `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to
|
|
* specify how the alpha channel is used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderDrawColor
|
|
* \sa SDL_SetRenderDrawColorFloat
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawColor(SDL_Renderer *renderer, Uint8 r, Uint8 g, Uint8 b, Uint8 a);
|
|
|
|
/**
|
|
* Set the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* Set the color for drawing or filling rectangles, lines, and points, and for
|
|
* SDL_RenderClear().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r the red value used to draw on the rendering target.
|
|
* \param g the green value used to draw on the rendering target.
|
|
* \param b the blue value used to draw on the rendering target.
|
|
* \param a the alpha value used to draw on the rendering target. Use
|
|
* SDL_SetRenderDrawBlendMode to specify how the alpha channel is
|
|
* used.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderDrawColorFloat
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawColorFloat(SDL_Renderer *renderer, float r, float g, float b, float a);
|
|
|
|
/**
|
|
* Get the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r a pointer filled in with the red value used to draw on the
|
|
* rendering target.
|
|
* \param g a pointer filled in with the green value used to draw on the
|
|
* rendering target.
|
|
* \param b a pointer filled in with the blue value used to draw on the
|
|
* rendering target.
|
|
* \param a a pointer filled in with the alpha value used to draw on the
|
|
* rendering target; usually `SDL_ALPHA_OPAQUE` (255).
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderDrawColorFloat
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawColor(SDL_Renderer *renderer, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a);
|
|
|
|
/**
|
|
* Get the color used for drawing operations (Rect, Line and Clear).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param r a pointer filled in with the red value used to draw on the
|
|
* rendering target.
|
|
* \param g a pointer filled in with the green value used to draw on the
|
|
* rendering target.
|
|
* \param b a pointer filled in with the blue value used to draw on the
|
|
* rendering target.
|
|
* \param a a pointer filled in with the alpha value used to draw on the
|
|
* rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderDrawColorFloat
|
|
* \sa SDL_GetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawColorFloat(SDL_Renderer *renderer, float *r, float *g, float *b, float *a);
|
|
|
|
/**
|
|
* Set the color scale used for render operations.
|
|
*
|
|
* The color scale is an additional scale multiplied into the pixel color
|
|
* value while rendering. This can be used to adjust the brightness of colors
|
|
* during HDR rendering, or changing HDR video brightness when playing on an
|
|
* SDR display.
|
|
*
|
|
* The color scale does not affect the alpha channel, only the color
|
|
* brightness.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scale the color scale value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderColorScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderColorScale(SDL_Renderer *renderer, float scale);
|
|
|
|
/**
|
|
* Get the color scale used for render operations.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param scale a pointer filled in with the current color scale value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderColorScale
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderColorScale(SDL_Renderer *renderer, float *scale);
|
|
|
|
/**
|
|
* Set the blend mode used for drawing operations (Fill and Line).
|
|
*
|
|
* If the blend mode is not supported, the closest supported mode is chosen.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param blendMode the SDL_BlendMode to use for blending.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderDrawBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode blendMode);
|
|
|
|
/**
|
|
* Get the blend mode used for drawing operations.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param blendMode a pointer filled in with the current SDL_BlendMode.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderDrawBlendMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer *renderer, SDL_BlendMode *blendMode);
|
|
|
|
/**
|
|
* Clear the current rendering target with the drawing color.
|
|
*
|
|
* This function clears the entire rendering target, ignoring the viewport and
|
|
* the clip rectangle. Note, that clearing will also set/fill all pixels of
|
|
* the rendering target to current renderer draw color, so make sure to invoke
|
|
* SDL_SetRenderDrawColor() when needed.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderClear(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Draw a point on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a point.
|
|
* \param x the x coordinate of the point.
|
|
* \param y the y coordinate of the point.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderPoints
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPoint(SDL_Renderer *renderer, float x, float y);
|
|
|
|
/**
|
|
* Draw multiple points on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple points.
|
|
* \param points the points to draw.
|
|
* \param count the number of points to draw.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderPoint
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPoints(SDL_Renderer *renderer, const SDL_FPoint *points, int count);
|
|
|
|
/**
|
|
* Draw a line on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a line.
|
|
* \param x1 the x coordinate of the start point.
|
|
* \param y1 the y coordinate of the start point.
|
|
* \param x2 the x coordinate of the end point.
|
|
* \param y2 the y coordinate of the end point.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderLines
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderLine(SDL_Renderer *renderer, float x1, float y1, float x2, float y2);
|
|
|
|
/**
|
|
* Draw a series of connected lines on the current rendering target at
|
|
* subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple lines.
|
|
* \param points the points along the lines.
|
|
* \param count the number of points, drawing count-1 lines.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderLine
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderLines(SDL_Renderer *renderer, const SDL_FPoint *points, int count);
|
|
|
|
/**
|
|
* Draw a rectangle on the current rendering target at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should draw a rectangle.
|
|
* \param rect a pointer to the destination rectangle, or NULL to outline the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderRects
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderRect(SDL_Renderer *renderer, const SDL_FRect *rect);
|
|
|
|
/**
|
|
* Draw some number of rectangles on the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* \param renderer the renderer which should draw multiple rectangles.
|
|
* \param rects a pointer to an array of destination rectangles.
|
|
* \param count the number of rectangles.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count);
|
|
|
|
/**
|
|
* Fill a rectangle on the current rendering target with the drawing color at
|
|
* subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should fill a rectangle.
|
|
* \param rect a pointer to the destination rectangle, or NULL for the entire
|
|
* rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderFillRects
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderFillRect(SDL_Renderer *renderer, const SDL_FRect *rect);
|
|
|
|
/**
|
|
* Fill some number of rectangles on the current rendering target with the
|
|
* drawing color at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should fill multiple rectangles.
|
|
* \param rects a pointer to an array of destination rectangles.
|
|
* \param count the number of rectangles.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderFillRect
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderFillRects(SDL_Renderer *renderer, const SDL_FRect *rects, int count);
|
|
|
|
/**
|
|
* Copy a portion of the texture to the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTextureRotated
|
|
* \sa SDL_RenderTextureTiled
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Copy a portion of the source texture to the current rendering target, with
|
|
* rotation and flipping, at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \param angle an angle in degrees that indicates the rotation that will be
|
|
* applied to dstrect, rotating it in a clockwise direction.
|
|
* \param center a pointer to a point indicating the point around which
|
|
* dstrect will be rotated (if NULL, rotation will be done
|
|
* around dstrect.w/2, dstrect.h/2).
|
|
* \param flip an SDL_FlipMode value stating which flipping actions should be
|
|
* performed on the texture.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureRotated(SDL_Renderer *renderer, SDL_Texture *texture,
|
|
const SDL_FRect *srcrect, const SDL_FRect *dstrect,
|
|
double angle, const SDL_FPoint *center,
|
|
SDL_FlipMode flip);
|
|
|
|
/**
|
|
* Copy a portion of the source texture to the current rendering target, with
|
|
* affine transform, at subpixel precision.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param origin a pointer to a point indicating where the top-left corner of
|
|
* srcrect should be mapped to, or NULL for the rendering
|
|
* target's origin.
|
|
* \param right a pointer to a point indicating where the top-right corner of
|
|
* srcrect should be mapped to, or NULL for the rendering
|
|
* target's top-right corner.
|
|
* \param down a pointer to a point indicating where the bottom-left corner of
|
|
* srcrect should be mapped to, or NULL for the rendering target's
|
|
* bottom-left corner.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety You may only call this function from the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture,
|
|
const SDL_FRect *srcrect, const SDL_FPoint *origin,
|
|
const SDL_FPoint *right, const SDL_FPoint *down);
|
|
|
|
/**
|
|
* Tile a portion of the texture to the current rendering target at subpixel
|
|
* precision.
|
|
*
|
|
* The pixels in `srcrect` will be repeated as many times as needed to
|
|
* completely fill `dstrect`.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect a pointer to the source rectangle, or NULL for the entire
|
|
* texture.
|
|
* \param scale the scale used to transform srcrect into the destination
|
|
* rectangle, e.g. a 32x32 texture with a scale of 2 would fill
|
|
* 64x64 tiles.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float scale, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Perform a scaled copy using the 9-grid algorithm to the current rendering
|
|
* target at subpixel precision.
|
|
*
|
|
* The pixels in the texture are split into a 3x3 grid, using the different
|
|
* corner sizes for each corner, and the sides and center making up the
|
|
* remaining pixels. The corners are then scaled using `scale` and fit into
|
|
* the corners of the destination rectangle. The sides and center are then
|
|
* stretched into place to cover the remaining destination rectangle.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect the SDL_Rect structure representing the rectangle to be used
|
|
* for the 9-grid, or NULL to use the entire texture.
|
|
* \param left_width the width, in pixels, of the left corners in `srcrect`.
|
|
* \param right_width the width, in pixels, of the right corners in `srcrect`.
|
|
* \param top_height the height, in pixels, of the top corners in `srcrect`.
|
|
* \param bottom_height the height, in pixels, of the bottom corners in
|
|
* `srcrect`.
|
|
* \param scale the scale used to transform the corner of `srcrect` into the
|
|
* corner of `dstrect`, or 0.0f for an unscaled copy.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9Grid(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect);
|
|
|
|
/**
|
|
* Perform a scaled copy using the 9-grid algorithm to the current rendering
|
|
* target at subpixel precision.
|
|
*
|
|
* The pixels in the texture are split into a 3x3 grid, using the different
|
|
* corner sizes for each corner, and the sides and center making up the
|
|
* remaining pixels. The corners are then scaled using `scale` and fit into
|
|
* the corners of the destination rectangle. The sides and center are then
|
|
* tiled into place to cover the remaining destination rectangle.
|
|
*
|
|
* \param renderer the renderer which should copy parts of a texture.
|
|
* \param texture the source texture.
|
|
* \param srcrect the SDL_Rect structure representing the rectangle to be used
|
|
* for the 9-grid, or NULL to use the entire texture.
|
|
* \param left_width the width, in pixels, of the left corners in `srcrect`.
|
|
* \param right_width the width, in pixels, of the right corners in `srcrect`.
|
|
* \param top_height the height, in pixels, of the top corners in `srcrect`.
|
|
* \param bottom_height the height, in pixels, of the bottom corners in
|
|
* `srcrect`.
|
|
* \param scale the scale used to transform the corner of `srcrect` into the
|
|
* corner of `dstrect`, or 0.0f for an unscaled copy.
|
|
* \param dstrect a pointer to the destination rectangle, or NULL for the
|
|
* entire rendering target.
|
|
* \param tileScale the scale used to transform the borders and center of
|
|
* `srcrect` into the borders and middle of `dstrect`, or
|
|
* 1.0f for an unscaled copy.
|
|
* \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.4.0.
|
|
*
|
|
* \sa SDL_RenderTexture
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9GridTiled(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect, float tileScale);
|
|
|
|
/**
|
|
* Render a list of triangles, optionally using a texture and indices into the
|
|
* vertex array Color and alpha modulation is done per vertex
|
|
* (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture (optional) The SDL texture to use.
|
|
* \param vertices vertices.
|
|
* \param num_vertices number of vertices.
|
|
* \param indices (optional) An array of integer indices into the 'vertices'
|
|
* array, if NULL all vertices will be rendered in sequential
|
|
* order.
|
|
* \param num_indices number of indices.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderGeometryRaw
|
|
* \sa SDL_SetRenderTextureAddressMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer,
|
|
SDL_Texture *texture,
|
|
const SDL_Vertex *vertices, int num_vertices,
|
|
const int *indices, int num_indices);
|
|
|
|
/**
|
|
* Render a list of triangles, optionally using a texture and indices into the
|
|
* vertex arrays Color and alpha modulation is done per vertex
|
|
* (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored).
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param texture (optional) The SDL texture to use.
|
|
* \param xy vertex positions.
|
|
* \param xy_stride byte size to move from one element to the next element.
|
|
* \param color vertex colors (as SDL_FColor).
|
|
* \param color_stride byte size to move from one element to the next element.
|
|
* \param uv vertex normalized texture coordinates.
|
|
* \param uv_stride byte size to move from one element to the next element.
|
|
* \param num_vertices number of vertices.
|
|
* \param indices (optional) An array of indices into the 'vertices' arrays,
|
|
* if NULL all vertices will be rendered in sequential order.
|
|
* \param num_indices number of indices.
|
|
* \param size_indices index size: 1 (byte), 2 (short), 4 (int).
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderGeometry
|
|
* \sa SDL_SetRenderTextureAddressMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer,
|
|
SDL_Texture *texture,
|
|
const float *xy, int xy_stride,
|
|
const SDL_FColor *color, int color_stride,
|
|
const float *uv, int uv_stride,
|
|
int num_vertices,
|
|
const void *indices, int num_indices, int size_indices);
|
|
|
|
/**
|
|
* Set the texture addressing mode used in SDL_RenderGeometry().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param u_mode the SDL_TextureAddressMode to use for horizontal texture
|
|
* coordinates in SDL_RenderGeometry().
|
|
* \param v_mode the SDL_TextureAddressMode to use for vertical texture
|
|
* coordinates in SDL_RenderGeometry().
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_RenderGeometry
|
|
* \sa SDL_RenderGeometryRaw
|
|
* \sa SDL_GetRenderTextureAddressMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressMode u_mode, SDL_TextureAddressMode v_mode);
|
|
|
|
/**
|
|
* Get the texture addressing mode used in SDL_RenderGeometry().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param u_mode a pointer filled in with the SDL_TextureAddressMode to use
|
|
* for horizontal texture coordinates in SDL_RenderGeometry(),
|
|
* may be NULL.
|
|
* \param v_mode a pointer filled in with the SDL_TextureAddressMode to use
|
|
* for vertical texture coordinates in SDL_RenderGeometry(), may
|
|
* be NULL.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_SetRenderTextureAddressMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressMode *u_mode, SDL_TextureAddressMode *v_mode);
|
|
|
|
/**
|
|
* Read pixels from the current rendering target.
|
|
*
|
|
* The returned surface contains pixels inside the desired area clipped to the
|
|
* current viewport, and should be freed with SDL_DestroySurface().
|
|
*
|
|
* Note that this returns the actual pixels on the screen, so if you are using
|
|
* logical presentation you should use SDL_GetRenderLogicalPresentationRect()
|
|
* to get the area containing your content.
|
|
*
|
|
* **WARNING**: This is a very slow operation, and should not be used
|
|
* frequently. If you're using this on the main rendering target, it should be
|
|
* called after rendering and before SDL_RenderPresent().
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param rect an SDL_Rect structure representing the area to read, which will
|
|
* be clipped to the current viewport, or NULL for the entire
|
|
* viewport.
|
|
* \returns a new SDL_Surface on success or NULL on failure; call
|
|
* SDL_GetError() for more information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect);
|
|
|
|
/**
|
|
* Update the screen with any rendering performed since the previous call.
|
|
*
|
|
* SDL's rendering functions operate on a backbuffer; that is, calling a
|
|
* rendering function such as SDL_RenderLine() does not directly put a line on
|
|
* the screen, but rather updates the backbuffer. As such, you compose your
|
|
* entire scene and *present* the composed backbuffer to the screen as a
|
|
* complete picture.
|
|
*
|
|
* Therefore, when using SDL's rendering API, one does all drawing intended
|
|
* for the frame, and then calls this function once per frame to present the
|
|
* final drawing to the user.
|
|
*
|
|
* The backbuffer should be considered invalidated after each present; do not
|
|
* assume that previous contents will exist between frames. You are strongly
|
|
* encouraged to call SDL_RenderClear() to initialize the backbuffer before
|
|
* starting each new frame's drawing, even if you plan to overwrite every
|
|
* pixel.
|
|
*
|
|
* Please note, that in case of rendering to a texture - there is **no need**
|
|
* to call `SDL_RenderPresent` after drawing needed objects to a texture, and
|
|
* should not be done; you are only required to change back the rendering
|
|
* target to default via `SDL_SetRenderTarget(renderer, NULL)` afterwards, as
|
|
* textures by themselves do not have a concept of backbuffers. Calling
|
|
* SDL_RenderPresent while rendering to a texture will fail.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
* \sa SDL_RenderClear
|
|
* \sa SDL_RenderFillRect
|
|
* \sa SDL_RenderFillRects
|
|
* \sa SDL_RenderLine
|
|
* \sa SDL_RenderLines
|
|
* \sa SDL_RenderPoint
|
|
* \sa SDL_RenderPoints
|
|
* \sa SDL_RenderRect
|
|
* \sa SDL_RenderRects
|
|
* \sa SDL_SetRenderDrawBlendMode
|
|
* \sa SDL_SetRenderDrawColor
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderPresent(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Destroy the specified texture.
|
|
*
|
|
* Passing NULL or an otherwise invalid texture will set the SDL error message
|
|
* to "Invalid texture".
|
|
*
|
|
* \param texture the texture to destroy.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateTexture
|
|
* \sa SDL_CreateTextureFromSurface
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture *texture);
|
|
|
|
/**
|
|
* Destroy the rendering context for a window and free all associated
|
|
* textures.
|
|
*
|
|
* This should be called before destroying the associated window.
|
|
*
|
|
* \param renderer the rendering context.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_CreateRenderer
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Force the rendering context to flush any pending commands and state.
|
|
*
|
|
* You do not need to (and in fact, shouldn't) call this function unless you
|
|
* are planning to call into OpenGL/Direct3D/Metal/whatever directly, in
|
|
* addition to using an SDL_Renderer.
|
|
*
|
|
* This is for a very-specific case: if you are using SDL's render API, and
|
|
* you plan to make OpenGL/D3D/whatever calls in addition to SDL render API
|
|
* calls. If this applies, you should call this function between calls to
|
|
* SDL's render API and the low-level API you're using in cooperation.
|
|
*
|
|
* In all other cases, you can ignore this function.
|
|
*
|
|
* This call makes SDL flush any pending rendering work it was queueing up to
|
|
* do later in a single batch, and marks any internal cached state as invalid,
|
|
* so it'll prepare all its state again later, from scratch.
|
|
*
|
|
* This means you do not need to save state in your rendering code to protect
|
|
* the SDL renderer. However, there lots of arbitrary pieces of Direct3D and
|
|
* OpenGL state that can confuse things; you should use your best judgment and
|
|
* be prepared to make changes if specific state needs to be protected.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_FlushRenderer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the CAMetalLayer associated with the given Metal renderer.
|
|
*
|
|
* This function returns `void *`, so SDL doesn't have to include Metal's
|
|
* headers, but it can be safely cast to a `CAMetalLayer *`.
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a
|
|
* Metal renderer.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderMetalCommandEncoder
|
|
*/
|
|
extern SDL_DECLSPEC void * SDLCALL SDL_GetRenderMetalLayer(SDL_Renderer *renderer);
|
|
|
|
/**
|
|
* Get the Metal command encoder for the current frame.
|
|
*
|
|
* This function returns `void *`, so SDL doesn't have to include Metal's
|
|
* headers, but it can be safely cast to an `id<MTLRenderCommandEncoder>`.
|
|
*
|
|
* This will return NULL if Metal refuses to give SDL a drawable to render to,
|
|
* which might happen if the window is hidden/minimized/offscreen. This
|
|
* doesn't apply to command encoders for render targets, just the window's
|
|
* backbuffer. Check your return values!
|
|
*
|
|
* \param renderer the renderer to query.
|
|
* \returns an `id<MTLRenderCommandEncoder>` on success, or NULL if the
|
|
* renderer isn't a Metal renderer or there was an error.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderMetalLayer
|
|
*/
|
|
extern SDL_DECLSPEC void * SDLCALL SDL_GetRenderMetalCommandEncoder(SDL_Renderer *renderer);
|
|
|
|
|
|
/**
|
|
* Add a set of synchronization semaphores for the current frame.
|
|
*
|
|
* The Vulkan renderer will wait for `wait_semaphore` before submitting
|
|
* rendering commands and signal `signal_semaphore` after rendering commands
|
|
* are complete for this frame.
|
|
*
|
|
* This should be called each frame that you want semaphore synchronization.
|
|
* The Vulkan renderer may have multiple frames in flight on the GPU, so you
|
|
* should have multiple semaphores that are used for synchronization. Querying
|
|
* SDL_PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER will give you the
|
|
* maximum number of semaphores you'll need.
|
|
*
|
|
* \param renderer the rendering context.
|
|
* \param wait_stage_mask the VkPipelineStageFlags for the wait.
|
|
* \param wait_semaphore a VkSempahore to wait on before rendering the current
|
|
* frame, or 0 if not needed.
|
|
* \param signal_semaphore a VkSempahore that SDL will signal when rendering
|
|
* for the current frame is complete, or 0 if not
|
|
* needed.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety It is **NOT** safe to call this function from two threads at
|
|
* once.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_AddVulkanRenderSemaphores(SDL_Renderer *renderer, Uint32 wait_stage_mask, Sint64 wait_semaphore, Sint64 signal_semaphore);
|
|
|
|
/**
|
|
* Toggle VSync of the given renderer.
|
|
*
|
|
* When a renderer is created, vsync defaults to SDL_RENDERER_VSYNC_DISABLED.
|
|
*
|
|
* The `vsync` parameter can be 1 to synchronize present with every vertical
|
|
* refresh, 2 to synchronize present with every second vertical refresh, etc.,
|
|
* SDL_RENDERER_VSYNC_ADAPTIVE for late swap tearing (adaptive vsync), or
|
|
* SDL_RENDERER_VSYNC_DISABLED to disable. Not every value is supported by
|
|
* every driver, so you should check the return value to see whether the
|
|
* requested setting is supported.
|
|
*
|
|
* \param renderer the renderer to toggle.
|
|
* \param vsync the vertical refresh sync interval.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_GetRenderVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderVSync(SDL_Renderer *renderer, int vsync);
|
|
|
|
#define SDL_RENDERER_VSYNC_DISABLED 0
|
|
#define SDL_RENDERER_VSYNC_ADAPTIVE (-1)
|
|
|
|
/**
|
|
* Get VSync of the given renderer.
|
|
*
|
|
* \param renderer the renderer to toggle.
|
|
* \param vsync an int filled with the current vertical refresh sync interval.
|
|
* See SDL_SetRenderVSync() for the meaning of the value.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_SetRenderVSync
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderVSync(SDL_Renderer *renderer, int *vsync);
|
|
|
|
/**
|
|
* The size, in pixels, of a single SDL_RenderDebugText() character.
|
|
*
|
|
* The font is monospaced and square, so this applies to all characters.
|
|
*
|
|
* \since This macro is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderDebugText
|
|
*/
|
|
#define SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE 8
|
|
|
|
/**
|
|
* Draw debug text to an SDL_Renderer.
|
|
*
|
|
* This function will render a string of text to an SDL_Renderer. Note that
|
|
* this is a convenience function for debugging, with severe limitations, and
|
|
* not intended to be used for production apps and games.
|
|
*
|
|
* Among these limitations:
|
|
*
|
|
* - It accepts UTF-8 strings, but will only renders ASCII characters.
|
|
* - It has a single, tiny size (8x8 pixels). One can use logical presentation
|
|
* or scaling to adjust it, but it will be blurry.
|
|
* - It uses a simple, hardcoded bitmap font. It does not allow different font
|
|
* selections and it does not support truetype, for proper scaling.
|
|
* - It does no word-wrapping and does not treat newline characters as a line
|
|
* break. If the text goes out of the window, it's gone.
|
|
*
|
|
* For serious text rendering, there are several good options, such as
|
|
* SDL_ttf, stb_truetype, or other external libraries.
|
|
*
|
|
* On first use, this will create an internal texture for rendering glyphs.
|
|
* This texture will live until the renderer is destroyed.
|
|
*
|
|
* The text is drawn in the color specified by SDL_SetRenderDrawColor().
|
|
*
|
|
* \param renderer the renderer which should draw a line of text.
|
|
* \param x the x coordinate where the top-left corner of the text will draw.
|
|
* \param y the y coordinate where the top-left corner of the text will draw.
|
|
* \param str the string to render.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderDebugTextFormat
|
|
* \sa SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugText(SDL_Renderer *renderer, float x, float y, const char *str);
|
|
|
|
/**
|
|
* Draw debug text to an SDL_Renderer.
|
|
*
|
|
* This function will render a printf()-style format string to a renderer.
|
|
* Note that this is a convinence function for debugging, with severe
|
|
* limitations, and is not intended to be used for production apps and games.
|
|
*
|
|
* For the full list of limitations and other useful information, see
|
|
* SDL_RenderDebugText.
|
|
*
|
|
* \param renderer the renderer which should draw the text.
|
|
* \param x the x coordinate where the top-left corner of the text will draw.
|
|
* \param y the y coordinate where the top-left corner of the text will draw.
|
|
* \param fmt the format string to draw.
|
|
* \param ... additional parameters matching % tokens in the `fmt` string, if
|
|
* any.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should only be called on the main thread.
|
|
*
|
|
* \since This function is available since SDL 3.2.0.
|
|
*
|
|
* \sa SDL_RenderDebugText
|
|
* \sa SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugTextFormat(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(4);
|
|
|
|
/**
|
|
* Set default scale mode for new textures for given renderer.
|
|
*
|
|
* When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR.
|
|
*
|
|
* \param renderer the renderer to update.
|
|
* \param scale_mode the scale mode to change to for new textures.
|
|
* \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.4.0.
|
|
*
|
|
* \sa SDL_GetDefaultTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetDefaultTextureScaleMode(SDL_Renderer *renderer, SDL_ScaleMode scale_mode);
|
|
|
|
/**
|
|
* Get default texture scale mode of the given renderer.
|
|
*
|
|
* \param renderer the renderer to get data from.
|
|
* \param scale_mode a SDL_ScaleMode filled with current default scale mode.
|
|
* See SDL_SetDefaultTextureScaleMode() 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.4.0.
|
|
*
|
|
* \sa SDL_SetDefaultTextureScaleMode
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_GetDefaultTextureScaleMode(SDL_Renderer *renderer, SDL_ScaleMode *scale_mode);
|
|
|
|
/**
|
|
* GPU render state description.
|
|
*
|
|
* This structure should be initialized using SDL_INIT_INTERFACE().
|
|
*
|
|
* \since This struct is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_CreateGPURenderState
|
|
*/
|
|
typedef struct SDL_GPURenderStateDesc
|
|
{
|
|
Uint32 version; /**< the version of this interface */
|
|
|
|
SDL_GPUShader *fragment_shader; /**< The fragment shader to use when this render state is active */
|
|
|
|
Sint32 num_sampler_bindings; /**< The number of additional fragment samplers to bind when this render state is active */
|
|
const SDL_GPUTextureSamplerBinding *sampler_bindings; /**< Additional fragment samplers to bind when this render state is active */
|
|
|
|
Sint32 num_storage_textures; /**< The number of storage textures to bind when this render state is active */
|
|
SDL_GPUTexture *const *storage_textures; /**< Storage textures to bind when this render state is active */
|
|
|
|
Sint32 num_storage_buffers; /**< The number of storage buffers to bind when this render state is active */
|
|
SDL_GPUBuffer *const *storage_buffers; /**< Storage buffers to bind when this render state is active */
|
|
} SDL_GPURenderStateDesc;
|
|
|
|
/* Check the size of SDL_GPURenderStateDesc
|
|
*
|
|
* If this assert fails, either the compiler is padding to an unexpected size,
|
|
* or the interface has been updated and this should be updated to match and
|
|
* the code using this interface should be updated to handle the old version.
|
|
*/
|
|
SDL_COMPILE_TIME_ASSERT(SDL_GPURenderStateDesc_SIZE,
|
|
(sizeof(void *) == 4 && sizeof(SDL_GPURenderStateDesc) == 32) ||
|
|
(sizeof(void *) == 8 && sizeof(SDL_GPURenderStateDesc) == 64));
|
|
|
|
/**
|
|
* A custom GPU render state.
|
|
*
|
|
* \since This struct is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_CreateGPURenderState
|
|
* \sa SDL_SetGPURenderStateFragmentUniforms
|
|
* \sa SDL_SetRenderGPUState
|
|
* \sa SDL_DestroyGPURenderState
|
|
*/
|
|
typedef struct SDL_GPURenderState SDL_GPURenderState;
|
|
|
|
/**
|
|
* Create custom GPU render state.
|
|
*
|
|
* \param renderer the renderer to use.
|
|
* \param desc GPU render state description, initialized using
|
|
* SDL_INIT_INTERFACE().
|
|
* \returns a custom GPU render state or NULL on failure; call SDL_GetError()
|
|
* for more information.
|
|
*
|
|
* \threadsafety This function should be called on the thread that created the
|
|
* renderer.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_SetGPURenderStateFragmentUniforms
|
|
* \sa SDL_SetRenderGPUState
|
|
* \sa SDL_DestroyGPURenderState
|
|
*/
|
|
extern SDL_DECLSPEC SDL_GPURenderState * SDLCALL SDL_CreateGPURenderState(SDL_Renderer *renderer, SDL_GPURenderStateDesc *desc);
|
|
|
|
/**
|
|
* Set fragment shader uniform variables in a custom GPU render state.
|
|
*
|
|
* The data is copied and will be pushed using
|
|
* SDL_PushGPUFragmentUniformData() during draw call execution.
|
|
*
|
|
* \param state the state to modify.
|
|
* \param slot_index the fragment uniform slot to push data to.
|
|
* \param data client data to write.
|
|
* \param length the length of the data to write.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should be called on the thread that created the
|
|
* renderer.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetGPURenderStateFragmentUniforms(SDL_GPURenderState *state, Uint32 slot_index, const void *data, Uint32 length);
|
|
|
|
/**
|
|
* Set custom GPU render state.
|
|
*
|
|
* This function sets custom GPU render state for subsequent draw calls. This
|
|
* allows using custom shaders with the GPU renderer.
|
|
*
|
|
* \param renderer the renderer to use.
|
|
* \param state the state to to use, or NULL to clear custom GPU render state.
|
|
* \returns true on success or false on failure; call SDL_GetError() for more
|
|
* information.
|
|
*
|
|
* \threadsafety This function should be called on the thread that created the
|
|
* renderer.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*/
|
|
extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderGPUState(SDL_Renderer *renderer, SDL_GPURenderState *state);
|
|
|
|
/**
|
|
* Destroy custom GPU render state.
|
|
*
|
|
* \param state the state to destroy.
|
|
*
|
|
* \threadsafety This function should be called on the thread that created the
|
|
* renderer.
|
|
*
|
|
* \since This function is available since SDL 3.4.0.
|
|
*
|
|
* \sa SDL_CreateGPURenderState
|
|
*/
|
|
extern SDL_DECLSPEC void SDLCALL SDL_DestroyGPURenderState(SDL_GPURenderState *state);
|
|
|
|
/* Ends C function definitions when using C++ */
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#include <SDL3/SDL_close_code.h>
|
|
|
|
#endif /* SDL_render_h_ */
|