Commit Graph
100 Commits
Author SHA1 Message Date
Ryan C. Gordon e341cc44cc examples: Added misc/01-power 2025-09-16 12:06:12 -04:00
Ryan C. Gordon 85ea2bfbf0 examples: Much, much easier way to generate thumbnail and onmouseover files. 2025-09-16 12:06:12 -04:00
Ryan C. Gordon de1b52f161 cmake: Adjust Enabled Backends list for render drivers to catch opengles2.
This happens to work here because we don't have anything too complex, afaik.
Rejecting strings with underscores was crucial for other things, like video
with all its X11 variables, so this can't be applied to the other subsystems.

(Also, renaming the `SDL_VIDEO_RENDER_OGL_ES2` variable might be nice, too,
but let's keep this simple for now.)

Fixes #13938.
2025-09-13 11:28:57 -04:00
Ryan C. Gordon 2ede37f5a3 cmake: Removed unused SDL_GPU_DXVK bits.
Reference Issue #13938.
2025-09-13 11:24:55 -04:00
Ryan C. Gordon 98e22213da emscripten: Do a little better at tracking Caps/Num/Scroll Lock state.
Fixes #5447.
2025-09-13 01:50:22 -04:00
Ryan C. Gordon 411e47ba00 docs: Remove a redundant comment.
(The wiki will link to this symbol, we don't have to explicitly mention it.)
2025-09-12 20:11:44 -04:00
Ryan C. GordonandAnonymous Maarten 1c784c453d cmake: Report enabled subsystem backends in a compact form. (#13926)
Looks like this:

```
-- Enabled backends:
--   Video drivers: dummy kmsdrm(dynamic) offscreen wayland(dynamic) x11(dynamic)
--   X11 libraries: xcursor xdbe xfixes xinput2 xrandr xscrnsaver xshape xsync xtest
--   Render drivers: gpu ogl vulkan
--   GPU drivers: vulkan
--   Audio drivers: alsa(dynamic) disk dummy jack(dynamic) pipewire(dynamic) pulseaudio(dynamic) sndio(dynamic)
--   Joystick drivers: hidapi linux virtual
```

Fixes #7922.

Co-authored-by: Anonymous Maarten <madebr@users.noreply.github.com>
2025-09-12 14:59:43 -04:00
Ryan C. Gordon c78818bd4b examples: When linking to directories, append a '/' to the URL.
This works without it, but generates an extra redirect on the web server to
the same a URL with the '/' appended, so we might as well supply it ourselves
and remove the extra roundtrip to the server.
2025-09-12 14:23:01 -04:00
Ryan C. Gordon 614ae1b115 emscripten: Support analog gamepad triggers on both Firefox and Chrome.
Fixes #13051.
2025-09-12 14:23:01 -04:00
Ryan C. Gordon 8d5b82be2e io: POSIX implementation tries to get status information on short reads/writes.
Fixes #13413.
2025-09-11 10:11:51 -04:00
Ryan C. Gordon 4d6e0e0087 io: read_fd should only report EOF on a zero-byte return value.
POSIX says that's the EOF indicator, not a non-zero a short read.
2025-09-11 10:11:50 -04:00
Ryan C. Gordon 387a2b924d Revert "Sync SDL3 wiki -> header"
This reverts commit 15e60cd37f.

We don't need to link to SDL_ttf here, it makes the headers look ugly.
2025-09-09 10:37:36 -04:00
Ryan C. Gordon 11411bb5ef renderer: Don't use wrapping on NPOT textures if the renderer can't handle it.
Fixes #13887.
2025-09-08 17:09:41 -04:00
Ryan C. Gordon a7ee54f9a3 examples/README: Added a note about generating onmouseevent and thumbnails.
So I don't have to figure this out every time I write a new example.
2025-09-07 17:45:38 -04:00
Ryan C. Gordon 7c6ecb1cc4 examples: Reencoded input/02-joystick-events/onmouseover.webp, much smaller. 2025-09-07 17:37:26 -04:00
Ryan C. Gordon a5d790124c examples: Added input/04-gamepad-events 2025-09-07 14:06:58 -04:00
Ryan C. Gordon cfa31df2d5 examples/input/03-gamepad-polling: Added some README notes about the web. 2025-09-07 11:48:53 -04:00
Ryan C. Gordon bab4bb3817 examples: Fixed HTML output with multi-paragraph READMEs. 2025-09-07 11:48:53 -04:00
Ryan C. Gordon 2a0e751ff5 gamepad: Fixed Emscripten guide button, after recent changes.
(buttons above 12 all shifted down by four, since the dpad buttons now look
like a hat...the only one above the dpad buttons on a standard layout is the
guide button, index 16. This change moves it to 12.)
2025-09-07 10:25:12 -04:00
Ryan C. Gordon 82a800e266 emscripten: Let joystick dpad-to-hat conversion allow impossible combinations.
This matches what other backends do.
2025-09-07 10:02:20 -04:00
Ryan C. Gordon b58d0f8e4e gamepad: Fixed Emscripten d-pad, after recent changes. 2025-09-07 10:00:41 -04:00
Ryan C. Gordon 79b881fc2e examples: Minor tweak to joystick examples' comments. 2025-09-06 23:03:46 -04:00
Ryan C. Gordon cf92ef7994 examples: Added input/03-gamepad-polling 2025-09-06 23:03:04 -04:00
Ryan C. Gordon a6dc61ab32 joystick: Emscripten can often fake a hat from the d-pad buttons.
Fixes #13817.
2025-09-05 14:46:59 -04:00
Ryan C. Gordon 937bf4d789 alsa: Restart PCM devices after recovery from an overrun/underrun.
snd_pcm_recover() puts the device back in SND_PCM_STATE_PREPARED state; you
have to explicitly restart the device afterwards with snd_pcm_start().

Fixes #13761.
2025-09-05 13:50:06 -04:00
Ryan C. Gordon b8197a2291 io: rework how we set SDL_IOStream status.
This now relies on the implementation to set these flags on short reads/writes
instead of the higher level checking if SDL_SetError() was called.

Additionally (and crucially), this now sets ERROR or EOF on all short reads,
across all backends, not just when we get a zero-byte return value.

Fixes #13720.
2025-09-05 12:43:13 -04:00
Ryan C. Gordon 3597877277 SDL_main.h: Cleanups in SDL_RegisterApp documentation.
There is an escaped pipe character, because this ends up in a Markdown table
on the wiki, and the wiki software (incorrectly, I think) sees the pipe inside
a code-block and thinks it's the end of the table cell if not escaped.

But this escape char looks wrong everywhere else.

Keeping the parameter table terse is always a good idea, so I moved the
detail out to the Remarks section, which doesn't have a problem with this
character appearing in the text.
2025-09-04 19:50:04 -04:00
Ryan C. Gordon af74b1fe84 wikiheaders: Generate a current list of supported environment variables.
Fixes #13827.
2025-09-02 15:49:52 -04:00
Ryan C. Gordon 7323104f97 openslES: Patched to compile.
(whoops.)
2025-09-01 11:10:02 -04:00
Ryan C. Gordon 0b2a003a35 openslES: OpenSL ES on Android only supports two formats, limit to that.
(Three with the floating point extension, which we use.)

This is according to:

https://developer.android.com/ndk/guides/audio/opensl/opensl-for-android

Previously, this would accept a request for Sint8 or Sint32 and disaster
would ensue.

Fixes #13779.
2025-09-01 10:30:29 -04:00
Ryan C. Gordon ee69cdc1fe README-emscripten.md: Fixed cmake commmand line for enabling pthreads.
Fixes #13190.
2025-08-29 09:39:14 -04:00
Ryan C. Gordon e9c2e9bfc3 SDL_iostream.h: Clarified thread-safety docs.
Fixes #13814.
2025-08-27 22:03:50 -04:00
Ryan C. Gordon 5b688514c7 wikiheaders: Don't autolink things that are already linked.
This is a dirty hack, but it currently works for our purposes. We just refuse
to link an eligible string (like, say...`SDL_shadercross`), if there's a '['
character right before it.

This WILL NOT WORK if the string is in the middle of a link! For example, if
you had `[please refer to SDL_shadercross](https://example.com/)`, this will
still fail in the usual ways, but we're not building out a robust parser here
at the moment, and this catches the most common problem.

Fixes #13160.
Fixes https://github.com/libsdl-org/sdlwiki/issues/752
Closes https://github.com/libsdl-org/sdlwiki/pull/725
2025-08-26 14:43:59 -04:00
Ryan C. Gordon 8f04e4af00 audio: Clean out all the bitshifting.
Hide the implementation details in something human-readable.
2025-08-25 13:10:51 -04:00
Ryan C. Gordon 01d94ca9de audio: Renamed device_hash_lock to subsystem_rwlock.
It protects more than the device hashes!
2025-08-25 13:10:51 -04:00
Ryan C. Gordon 226fecff78 audio: Split current_audio.device_hash into two separate hashtables.
One for physical devices, one for logical devices.

Fixes #13032.
2025-08-25 13:10:51 -04:00
Ryan C. Gordon ec0e4e21c7 docs: Mark most of SDL_filesystem.h as thread-safe.
Fixes #13738.
2025-08-13 16:32:55 -04:00
Ryan C. Gordon e1a623f129 SDL_migration.cocci: Fixed a few incorrect function names. 2025-08-02 22:54:03 -04:00
Ryan C. Gordon dec21043a0 docs: Slightly improve virtual joystick docs.
Reference https://github.com/libsdl-org/sdlwiki/issues/78
2025-07-30 00:52:29 -04:00
Ryan C. Gordon ea04bdb5f3 docs: Added a note about virtual joysticks to CategoryJoystick.
Fixes https://github.com/libsdl-org/sdlwiki/issues/78
2025-07-30 00:44:35 -04:00
Ryan C. Gordon acbe86399d docs: Note SDL_EVENT_AUDIO_DEVICE_ADDED is sent for all devices at startup.
Fixes https://github.com/libsdl-org/sdlwiki/issues/721
2025-07-29 23:22:50 -04:00
Ryan C. Gordon 774c0b36ea android: Different approach to SDL_GetPathInfo() for assets.
Reference Issue #13050.
2025-07-29 12:15:25 -04:00
Ryan C. Gordon c80d6954cb Revert "audio: Added SDL_SetAudioIterationCallbacks()."
This reverts commit 608f706a95.

Didn't end up using this in SDL3_mixer, and it's a super-awkward API if we
don't need it.

I _might_ bite the bullet and let people lock a physical audio device, though,
as I could see that being useful but less awkward for the same reasons I
originally wanted it.
2025-07-25 01:38:21 -04:00
Ryan C. Gordon 39e9ac6d1f ci: Patched to compile on Android. 2025-07-23 23:53:46 -04:00
Ryan C. Gordon f5a0222a8e aaudio: Try to select a more-useful microphone for recording.
Fixes #13402.
2025-07-23 22:38:28 -04:00
Ryan C. Gordon 07ef532681 hints: Renamed SDL_HINT_LOG_BACKENDS to SDL_DEBUG_LOGGING.
This still logs backend choices, but we might use it for other things. For
example, what Android device is being used, or all the devices we enumerated,
etc.

Ideally this eventually logs all the stuff we often have to ask followup
questions about.
2025-07-22 13:19:30 -04:00
Ryan C. Gordon af1c05fd58 filesystem: Check SDL_GetPrefPath parameters at the higher level.
...so the backends don't have to do it.

Also added a stern warning about `org` being omitted, but leaving it as
allowed so as not to break existing apps (more than they are already broken,
at least).

Fixes #13322.
2025-07-22 12:28:01 -04:00
Ryan C. Gordon 27caa57695 dialog: Make sure we don't underflow a string in Cocoa backend.
Fixes #13014.
2025-07-21 16:02:42 -04:00
Ryan C. Gordon b3af72f69e emscripten: Respect SDL_HINT_MAIN_CALLBACK_RATE.
Fixes #13345.
2025-07-15 20:36:56 -04:00
Ryan C. Gordon f2ae6503c0 audio: Binding an SDL_AudioStream will set missing formats.
It _must_ have the format set for the opposite side from the device (so
playback needs the src format set, and recording needs the dst format set),
since the stream gets mangled by the device thread if not. So if it has never
been set (stream created with NULL audiospec), just set it to match the device.
If the stream is just meant to buffer and not convert, this is desired
behavior, even if it didn't also fix a bug.

Binding the audio stream will always set the device side's format, as usual;
this does not need to be set by the caller at all.

Fixes #13363.
2025-07-15 06:40:09 -04:00
Ryan C. Gordon 10004ab0ea hints: Added SDL_HINT_LOG_BACKENDS.
Fixes #13354.
2025-07-14 19:49:38 -04:00
Ryan C. Gordon 2d8fd6bee1 Revert "windows: Use wglSwapLayerBuffers if available."
This reverts commit f286558bae.
2025-07-13 21:40:42 -04:00
Ryan C. Gordon 536126fdcf emscripten: Move over to using Pointer Events for all mouse, pen, and touch.
This allows us to avoid browser mouse emulation for touches, since we provide
our own anyhow.

The other option is to "prevent default" in the legacy touch event handlers we
historically used, to tell the browser not to supply emulation, but we can't
currently tell Emscripten to mark those handlers as not "passive," so as it
stands they are unable to prevent default. Using Pointer Events bypasses this
problem entirely.

Fixes #13161.
2025-07-13 16:06:03 -04:00
Ryan C. Gordon 190afc0f4f gpu: Fixed uninitialized variable in SDL_AcquireGPUCommandBuffer().
Fixes #13191.
2025-07-11 18:18:47 -04:00
Ryan C. Gordon a81cf566f4 wasapi: Force enumerated audio devices to report themselves as float32 format.
This is what they'll end up being when used through WASAPI in shared mode,
regardless of what the hardware actually expects.

Reference Issue #12914.
2025-07-11 16:10:47 -04:00
Ryan C. Gordon 9af93abd4f cocoa: Don't minimize fullscreen windows for a modal file dialog.
macOS sends a focus loss event when the dialog is created, which causes SDL
to try to minimize the window, which confuses the entire system. So in this
special case, don't do the minimization.

Fixes #13168.
2025-07-11 15:05:45 -04:00
Ryan C. Gordon 72f4dd17be x11: Avoid duplicate mouse events when using a pen device.
Fixes #12968.
2025-07-11 14:27:12 -04:00
Ryan C. Gordon a2dcdfcb2d stdinc: Docs said "macro" but meant "datatype." 2025-07-11 14:24:12 -04:00
Ryan C. Gordon 515433aa8a android: If various POSIX fsops functions fail, try using AAssetManager.
This specifically affects SDL_EnumerateDirectory and SDL_GetPathInfo. Android
assets are read-only, so no need to do this for things like
SDL_CreateDirectory, etc, and the POSIX SDL_CopyFile() uses SDL_IOStream
behind the scenes, which already supports Android assets.

Fixes #13050.
2025-07-11 14:16:18 -04:00
Ryan C. Gordon f286558bae windows: Use wglSwapLayerBuffers if available.
It apparently works better (or can work better?) on multimonitor setups
than SwapBuffers.

This should be available back to Windows 95, but just in case, it falls
back to standard SwapBuffers if not available.

Fixes #13269.
2025-07-11 12:29:12 -04:00
Ryan C. Gordon 343ad3eddd ngage: SDL_GetPrefPath allows a NULL org parameter.
Reference Issue #13322.
2025-07-05 12:21:13 -04:00
Ryan C. Gordon 530639aa4a docs: Documentation for SDL_Swap64 was reporting the wrong return type.
Fixes #13309.
2025-07-02 09:29:40 -04:00
Ryan C. Gordon 4217d62fa2 Some small fixes and corrections: comment typos, a wrong return value.
Just a few things I stumbled upon this week.
2025-06-29 03:07:51 -04:00
Ryan C. Gordon 279dabfc96 cocoa: Don't use trick of briefly focusing the Dock on newer macOS releases.
On newer systems, the trick isn't necessary, and if you do it, if the user is
moving the mouse when launching the app, it'll show a hidden Dock.

Fixes #10340.
2025-06-26 14:24:53 -04:00
Ryan C. Gordon 274aa0242e audio: Let apps save an audio stream from destruction during SDL_Quit(). (#13244)
This is a special-case piece of functionality, generally these are expected
to go away during shutdown, but maybe someone is switching between audio
subsystems or something...
2025-06-22 21:06:15 -07:00
Ryan C. Gordon eb04219efe audio: Enumerating audio devices will skip zombie devices still in the hash. 2025-06-20 17:37:39 -04:00
Ryan C. Gordon c04624972e alsa: Simplify ALSA_WaitDevice.
- Check for specific availability instead of waiting for "device ready."
- Don't use snd_pcm_wait, just use a simple SDL_Delay (nothing to recover).
- Fixed SDL_max call that should have been SDL_min (now using SDL_clamp).
- ALSA_RecordDevice() now returns 0 if no availability, which kicks us back
  to WaitDevice to try again, as an extra safety check.
2025-06-17 20:40:00 -04:00
Ryan C. Gordon b4ac5f43f5 include: Fixed copy/paste error in endian-specific SDL_Read function docs. 2025-06-17 16:41:24 -04:00
Ryan C. Gordon 3896b1b3f4 wikiheaders: Let each subproject specify how to find their property symbols. 2025-06-17 16:41:24 -04:00
Ryan C. Gordon 6c406dd122 include: a couple of documentation tweaks and typo fixes. 2025-06-15 22:12:21 -04:00
Ryan C. Gordon 8510331f66 .wikiheaders-options: Add Tray to quickreference categories. 2025-06-01 10:48:32 -04:00
Ryan C. Gordon b8187e2abd wikiheaders: Trim whitespace from end of lines in section headers. 2025-06-01 10:43:08 -04:00
Ryan C. Gordon 9e0d9f30a7 x11: Be a little less aggressive with Xinput2IsInitialized checks.
Just in case this ever get deinitialized sooner, we'd still like to SDL_free()
things on shutdown, etc.

Reference PR #13148.
2025-06-01 10:14:01 -04:00
Ryan C. Gordon ac3ab026fe audio: corrected comment about device format minimums. 2025-06-01 03:01:37 -04:00
Ryan C. Gordon 83cc3bc234 audio: Opened device spec must be >= simple minimums, not device's defaults.
Fixes #13159.
2025-06-01 02:56:59 -04:00
Ryan C. Gordon 14a4ae521a pulseaudio: Request more recording data per-fragment.
This seems to help some devices that can't keep up with smaller fragment sizes
for whatever reason.

Fixes #13110.
2025-06-01 02:46:55 -04:00
Ryan C. Gordon 47717f22fd cocoa: Always add a window-sized NSTrackingArea to each window.
Previously this was only done on older macOSes, but it seems to work on all
versions, afaict.

Reference Issue #12725.
2025-05-31 15:00:56 -04:00
Ryan C. Gordon f61d956a04 cocoa: add explicit tracking areas to the window.
This makes sure we get reliable mouse enter/exit events from the system on
older macOS releases.

Newer releases don't have this problem--my assumption is that Cocoa has a
more aggressive default tracking area installed for some newer UI feature.

For 3.2.16, we'll use the explicit tracking area on older macOSes only, but
I'll remove that check in revision control for newer OSes and see what
happens.

Fixes #12725.
2025-05-31 14:40:12 -04:00
Ryan C. Gordon 6a686185f7 SDL_begin_code.h: Actually define SDL_RESTRICT.
We wrote documentation for this but never actually filled in the code.
2025-05-30 15:59:40 -04:00
Ryan C. Gordon 3940c660be begin_code: Added SDL_ALIGNED macro. 2025-05-27 13:30:04 -04:00
Ryan C. Gordon 5e50d39b38 audio: Added SDL_PutAudioStreamDataNoCopy. 2025-05-26 12:34:37 -04:00
Ryan C. Gordon dcdbc0bf9f README-documentation-rules: Add a note about being UTF-8 only! 2025-05-22 15:41:05 -04:00
Ryan C. Gordon 56bb73a8d2 README-ngage.md: Really actually got all the non-UTF-8 characters this time! 2025-05-22 15:38:59 -04:00
Ryan C. Gordon ecef0d3564 README-ngage.md: Found a few more non-UTF-8 things. 2025-05-22 15:34:04 -04:00
Ryan C. Gordon fb7afabbd6 README-ngage.md: Removed non-UTF-8 character. 2025-05-22 15:30:21 -04:00
Ryan C. Gordon 8d9a4fe843 stdinc: Corrected documentation for SDL_atan2 and SDL_atan2f.
Fixes #13099.
2025-05-22 09:52:15 -04:00
Ryan C. Gordon 1f7aa16eae wikiheaders: Man pages should escape apostrophe chars.
This prevents problems if one starts a line, which would cause it to be
interpreted as a command character.

Fixes #13038.
2025-05-14 11:36:43 -04:00
Ryan C. Gordon 0a34279578 audio: Fix SDL_GetAudioDeviceName() not working with logical devices.
Fixes #12977.
2025-05-12 13:53:30 -04:00
Ryan C. Gordon e1066ceea1 Revert "pulseaudio: cleanup TLS every time we finish a threaded-mainloop callback."
This reverts commit 3b91017682.

This apparently is cleaning up more threads than expected, so this needs a
rethink.

Fixes #12986.
Fixes https://github.com/libsdl-org/sdl2-compat/issues/486
Fixes https://github.com/libsdl-org/sdl2-compat/issues/482
2025-05-11 10:55:42 -04:00
Ryan C. Gordon a7344206e8 wikiheaders: Patched to compile.
(whoops.)
2025-05-05 23:58:59 -04:00
Ryan C. Gordon 06c2f9fcfc wikiheaders: Correct wiki README digest links. 2025-05-05 23:56:12 -04:00
Ryan C. Gordon ad46394e82 wikiheaders: README.md should be READMEs.md
So it doesn't conflict with the old README directory.
2025-05-05 23:49:06 -04:00
Ryan C. Gordon 2c97a48c51 wikiheaders: READMEs go in the base dir of the wiki now.
Reference PR #12529.

(and several other issues.)
2025-05-05 23:36:08 -04:00
Ryan C. Gordon 92a5417a98 docs: Tweak some minor things to keep wikiheaders happy.
You can't have two sections with the same name (so it can generate unique
page anchors), so fix one of these, and tweak another thing that _isn't_ a
header but wikiheader's quick-and-dirty parser thinks is one.
2025-05-05 23:34:20 -04:00
Ryan C. Gordon 795d1ae1fb testmessage: Don't push the event if "Retry" was chosen.
Otherwise, the message box thread goes back to blocking, but the app's main
thread progresses to SDL_WaitThread and won't pump the event queue anymore.

On iOS, this means the messagebox won't pop back up (because it uses
SDL_RunOnMainThread, which needs the event loop to pump), but it's just bad
practice on any platform to stop pumping the event queue for indefinite
lengths of time.
2025-05-02 21:42:47 -04:00
Ryan C. Gordon 57346f2ba8 dialog: Cocoa backend should reactivate the app after the modal dialog.
Otherwise the window won't have focus until you click on it again. Calling
makeKeyAndOrderFront isn't enough to fix it, either.

This trick comes from a similar problem we solve in our
applicationDidFinishLaunching implementation: activate (give app focus to) the
system Dock, as something that definitely exists that isn't us and is harmless
to activate, and then activate us right afterwards. This unconfuses whatever
is getting confused inside Cocoa.

Fixes #12684.
2025-05-02 01:52:42 -04:00
Ryan C. Gordon 193b0c8963 uikit: Use SDL_RunOnMainThread instead of dispatch_sync for message boxes.
Reference Issue #12741.
2025-05-01 18:28:53 -04:00
Ryan C. Gordon 691cc5bb5e dialog: Cocoa shouldn't crash if there's a '.' in the filters.
So something like "index.pb" will now accept any file with a ".pb" extension,
to make macOS happy. This seems like a reasonable tradeoff.

Other minor cleanups.

Fixes #12778.
2025-05-01 18:11:36 -04:00
Ryan C. Gordon ea67133e4f pen: Windows can't check WM_POINTER[DOWN|UP] for touches directly.
These events fire for other things, such as pressing a barrel button while
the pen is hovering.

The correct thing to do is check IS_POINTER_INCONTACT_WPARAM in the event.

If the pen is already touching or not, SDL_SendPenTouch() will do the right
thing, so it's safe to call it even if we're already in the right state.
2025-04-29 18:53:38 -04:00
Ryan C. Gordon af0972c33f audio: SDL_PutAudioStreamPlanarData should take a channel count.
Fixes #12894.
2025-04-25 21:13:04 -04:00