Skip to content

Add SDL3 macOS and Linux desktop ports - #307

Closed
douglasjv wants to merge 3 commits into
uvcat7:betafrom
douglasjv:upstream/sdl3-desktop-port
Closed

Add SDL3 macOS and Linux desktop ports#307
douglasjv wants to merge 3 commits into
uvcat7:betafrom
douglasjv:upstream/sdl3-desktop-port

Conversation

@douglasjv

Copy link
Copy Markdown

Summary

  • Reconciles the active Linux SDL3 work with current beta while preserving current Notefield and TempoMan behavior.
  • Adds a native macOS 12+ application bundle, Objective-C++ NSMenu backend, Command shortcuts, Retina-safe OpenGL 2.1 rendering, async file dialogs, and bundle/preference path handling.
  • Adds pinned vcpkg presets, simfile round-trip tests, deterministic smoke tests, Linux and Windows packages, native arm64 and x86_64 macOS builds, Universal 2 assembly, signing/notarization hooks, and release documentation.
  • Retains the existing Windows implementation and legacy OpenGL renderer.

This work builds on the platform layer from #275, the active Linux port in #281, and relevant concepts from the older macOS proposal in #228. The commits are mirrored from focused, reviewed pull requests in the fork and do not include fork-specific CODEOWNERS or repository governance.

Validation

The exact source tree passed formatting, Windows x64, Ubuntu 22.04 x86_64, macOS arm64, macOS x86_64, and Universal 2 packaging in the fork CI:

https://github.com/douglasjv/ArrowVortex/actions/runs/33198806854

The run includes four simfile load/save round-trip tests, bounded SDL/OpenGL/audio smoke tests, Mach-O slice and dependency validation, Linux dependency validation, and uploaded artifacts for every supported target.

Scope

This keeps the existing simfile model and legacy OpenGL renderer. It does not introduce a renderer rewrite, file-format migration, updater, AppImage, Flatpak, or Mac App Store packaging.

douglasjv and others added 3 commits August 28, 2026 11:51
* Integrate clang-format into the build

* Replaced Butterworth.cpp with Iir library.

* Move aubio to vcpkg

* Made ImageLoader use stb_image

* WIP - tried ogg conversion with ffmpeg documentation but it doesn't work. trying a different way.

* Got ffmpeg .ogg conversion working.

* Remove oggenc2 from build.

* Update the CREDITS file.

* oh no a weird cmake edge case

* Manually specify source files, and split out formatting CI.

* WIP--half-pass of converting code

* It builds, but doesn't work.

* The OpenGL context works, but input and frame handling is not working yet.

* Rebase attempt with beta

* Rebase attempt.

* Rebase: The OpenGL context works, but input and frame handling is not working yet.

* Rebase: Working on file dialogs.

* Rebase cleanup.

* Finished conversion except doing display scaling.

* Add monitor scaling support, sans some complicated issues

* vector icons text glyphs

* wip - mixer

* WIP - the mixer plays audio, but offsets and sound effects don't work.

* ported Windows mixer to SDL_Audio

* Fix scaling for sprites and remaining display elements.

* Cleanup/bugfix mixer.

* Fix cmakelists.txt for build

* Update vcpkg baseline version

* Revert vcpkg baseline

* Fix audio conversion dialogs.

* Fix again

* Fix launch directory on Windows

* i am going crazy

* It works, kinda sorta. Vector->std::vector, various multiplatform fixes.

* finish refactoring

* Starting OpenGL menu bar (bar is printed to top.)

* Menu bar is functional, but overlaps active window

* separate editor from menu bar

* Make Windows functionality work.

* Make .yml work on Linux

* Make clang-tidy work again.

* Try another .yml

* again

* again..

* test...

* try6

* try7

* try8

* try9

* try10

* try11

* try12, get all packages

* try13, remove libudev-dev

* try14

* try15, fix clang-format

* try16

* try17

* last edit.

* one more build cleanup

* fix vector allocation and backport termination from sdl3 branch

* update latest beta fixes

* update codeql

* fix alignment code

* Made builds work on Fedora. Fix file dialog and scaling bugs. Documentation.

* format.

* oh no x2

* oh nox3

* oh no x4

* try once more

* i gave up

* replace menu bar ifdefs with common define, cmakelists.txt cleanup

* per LetalexAlex: correctly handle mouse position with SDL functions

* Fix text edit rendering bugs from vector/clamp conversion

* Fixed sessions on linux (non portable installations) and added .desktop file for install convenience (uvcat7#291)

* Added arrowvortex.desktop for installation

* fixed settings directory to be on the user's {XDG_CONFIG_HOME}/arrowvortex/ instead of just 'settings' locally, fallback to /home/user/.config/arowvortex/

* forgot to update the desktop file I copied without looking

* reformat

* try fixing missing packages again

* try3

* try again

* Fix portable aggregate and DWI containers

* Fix Ubuntu 22.04 C++20 portability

* Avoid aggregate emplace on older clang

* Include vector in texture interface

* Make vector-using headers self-contained

* Include menubar declaration in editor actions

---------

Co-authored-by: uvcat <theultravioletcatastrophe10@gmail.com>
Co-authored-by: uvcat7 <152119638+uvcat7@users.noreply.github.com>
Co-authored-by: Psycast <jonathanjwhite@hotmail.com>
Co-authored-by: Alex <97258001+LetalexAlex@users.noreply.github.com>
* Integrate clang-format into the build

* Replaced Butterworth.cpp with Iir library.

* Move aubio to vcpkg

* Made ImageLoader use stb_image

* WIP - tried ogg conversion with ffmpeg documentation but it doesn't work. trying a different way.

* Got ffmpeg .ogg conversion working.

* Remove oggenc2 from build.

* Update the CREDITS file.

* oh no a weird cmake edge case

* Manually specify source files, and split out formatting CI.

* WIP--half-pass of converting code

* It builds, but doesn't work.

* The OpenGL context works, but input and frame handling is not working yet.

* Rebase attempt with beta

* Rebase attempt.

* Rebase: The OpenGL context works, but input and frame handling is not working yet.

* Rebase: Working on file dialogs.

* Rebase cleanup.

* Finished conversion except doing display scaling.

* Add monitor scaling support, sans some complicated issues

* vector icons text glyphs

* wip - mixer

* WIP - the mixer plays audio, but offsets and sound effects don't work.

* ported Windows mixer to SDL_Audio

* Fix scaling for sprites and remaining display elements.

* Cleanup/bugfix mixer.

* Fix cmakelists.txt for build

* Update vcpkg baseline version

* Revert vcpkg baseline

* Fix audio conversion dialogs.

* Fix again

* Fix launch directory on Windows

* i am going crazy

* It works, kinda sorta. Vector->std::vector, various multiplatform fixes.

* finish refactoring

* Starting OpenGL menu bar (bar is printed to top.)

* Menu bar is functional, but overlaps active window

* separate editor from menu bar

* Make Windows functionality work.

* Make .yml work on Linux

* Make clang-tidy work again.

* Try another .yml

* again

* again..

* test...

* try6

* try7

* try8

* try9

* try10

* try11

* try12, get all packages

* try13, remove libudev-dev

* try14

* try15, fix clang-format

* try16

* try17

* last edit.

* one more build cleanup

* fix vector allocation and backport termination from sdl3 branch

* update latest beta fixes

* update codeql

* fix alignment code

* Made builds work on Fedora. Fix file dialog and scaling bugs. Documentation.

* format.

* oh no x2

* oh nox3

* oh no x4

* try once more

* i gave up

* replace menu bar ifdefs with common define, cmakelists.txt cleanup

* per LetalexAlex: correctly handle mouse position with SDL functions

* Fix text edit rendering bugs from vector/clamp conversion

* Fixed sessions on linux (non portable installations) and added .desktop file for install convenience (uvcat7#291)

* Added arrowvortex.desktop for installation

* fixed settings directory to be on the user's {XDG_CONFIG_HOME}/arrowvortex/ instead of just 'settings' locally, fallback to /home/user/.config/arowvortex/

* forgot to update the desktop file I copied without looking

* reformat

* try fixing missing packages again

* try3

* try again

* Add native macOS SDL3 application support

* Fix portable aggregate and DWI containers

* Fix Ubuntu 22.04 C++20 portability

* Avoid aggregate emplace on older clang

* Include vector in texture interface

* Support macOS 12 thread cancellation

* Make vector-using headers self-contained

* Include menubar declaration in editor actions

* Fix portable FFmpeg and integer limit discovery

* Make integer limit dependencies explicit

* Include short integer limits in waveform code

---------

Co-authored-by: uvcat <theultravioletcatastrophe10@gmail.com>
Co-authored-by: uvcat7 <152119638+uvcat7@users.noreply.github.com>
Co-authored-by: Psycast <jonathanjwhite@hotmail.com>
Co-authored-by: Alex <97258001+LetalexAlex@users.noreply.github.com>
* Integrate clang-format into the build

* Replaced Butterworth.cpp with Iir library.

* Move aubio to vcpkg

* Made ImageLoader use stb_image

* WIP - tried ogg conversion with ffmpeg documentation but it doesn't work. trying a different way.

* Got ffmpeg .ogg conversion working.

* Remove oggenc2 from build.

* Update the CREDITS file.

* oh no a weird cmake edge case

* Manually specify source files, and split out formatting CI.

* WIP--half-pass of converting code

* It builds, but doesn't work.

* The OpenGL context works, but input and frame handling is not working yet.

* Rebase attempt with beta

* Rebase attempt.

* Rebase: The OpenGL context works, but input and frame handling is not working yet.

* Rebase: Working on file dialogs.

* Rebase cleanup.

* Finished conversion except doing display scaling.

* Add monitor scaling support, sans some complicated issues

* vector icons text glyphs

* wip - mixer

* WIP - the mixer plays audio, but offsets and sound effects don't work.

* ported Windows mixer to SDL_Audio

* Fix scaling for sprites and remaining display elements.

* Cleanup/bugfix mixer.

* Fix cmakelists.txt for build

* Update vcpkg baseline version

* Revert vcpkg baseline

* Fix audio conversion dialogs.

* Fix again

* Fix launch directory on Windows

* i am going crazy

* It works, kinda sorta. Vector->std::vector, various multiplatform fixes.

* finish refactoring

* Starting OpenGL menu bar (bar is printed to top.)

* Menu bar is functional, but overlaps active window

* separate editor from menu bar

* Make Windows functionality work.

* Make .yml work on Linux

* Make clang-tidy work again.

* Try another .yml

* again

* again..

* test...

* try6

* try7

* try8

* try9

* try10

* try11

* try12, get all packages

* try13, remove libudev-dev

* try14

* try15, fix clang-format

* try16

* try17

* last edit.

* one more build cleanup

* fix vector allocation and backport termination from sdl3 branch

* update latest beta fixes

* update codeql

* fix alignment code

* Made builds work on Fedora. Fix file dialog and scaling bugs. Documentation.

* format.

* oh no x2

* oh nox3

* oh no x4

* try once more

* i gave up

* replace menu bar ifdefs with common define, cmakelists.txt cleanup

* per LetalexAlex: correctly handle mouse position with SDL functions

* Fix text edit rendering bugs from vector/clamp conversion

* Fixed sessions on linux (non portable installations) and added .desktop file for install convenience (uvcat7#291)

* Added arrowvortex.desktop for installation

* fixed settings directory to be on the user's {XDG_CONFIG_HOME}/arrowvortex/ instead of just 'settings' locally, fallback to /home/user/.config/arowvortex/

* forgot to update the desktop file I copied without looking

* reformat

* try fixing missing packages again

* try3

* try again

* Add native macOS SDL3 application support

* Add desktop packaging tests and release automation

* Scope formatting checks to changed sources

* Fix portable aggregate and DWI containers

* Fetch formatting comparison parent in CI

* Install NASM on macOS CI runners

* Fix Ubuntu 22.04 C++20 portability

* Avoid aggregate emplace on older clang

* Add headless simfile round-trip tests

* Include vector in texture interface

* Support macOS 12 thread cancellation

* Verify macOS smoke tests through LaunchServices

* Make vector-using headers self-contained

* Include menubar declaration in editor actions

* Fix portable FFmpeg and integer limit discovery

* Make integer limit dependencies explicit

* Include short integer limits in waveform code

* Fix Linux round-trip test static linking

* Use deterministic Linux CI audio

* Make round-trip path separator portable

* Use MSVC for Windows static dependencies

* Keep SDL entrypoint out of reusable system library

---------

Co-authored-by: uvcat <theultravioletcatastrophe10@gmail.com>
Co-authored-by: uvcat7 <152119638+uvcat7@users.noreply.github.com>
Co-authored-by: Psycast <jonathanjwhite@hotmail.com>
Co-authored-by: Alex <97258001+LetalexAlex@users.noreply.github.com>
@douglasjv douglasjv closed this Aug 28, 2026
@douglasjv
douglasjv deleted the upstream/sdl3-desktop-port branch August 28, 2026 18:55
@douglasjv

Copy link
Copy Markdown
Author

Sorry, did not intend to create this PR!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant