Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
2543610
Integrate clang-format into the build
uvcat7 Aug 27, 2025
38baf6f
Replaced Butterworth.cpp with Iir library.
uvcat7 Sep 29, 2025
d31e50b
Move aubio to vcpkg
uvcat7 Oct 2, 2025
bb8fc55
Made ImageLoader use stb_image
uvcat7 Oct 2, 2025
4ed8c5a
WIP - tried ogg conversion with ffmpeg documentation but it doesn't w…
uvcat7 Oct 2, 2025
0602f7d
Got ffmpeg .ogg conversion working.
uvcat7 Oct 3, 2025
0ee8752
Remove oggenc2 from build.
uvcat7 Oct 3, 2025
337cb39
Update the CREDITS file.
uvcat7 Oct 3, 2025
46ca513
Merge branch 'beta' into external-libs
uvcat7 Oct 3, 2025
386ceee
oh no a weird cmake edge case
uvcat7 Oct 3, 2025
8dfe304
Merge branch 'beta' into external-libs
uvcat7 Oct 3, 2025
c0eae70
Merge branch 'beta' into external-libs
uvcat7 Oct 4, 2025
f151fd3
Manually specify source files, and split out formatting CI.
uvcat7 Oct 4, 2025
6ad497b
WIP--half-pass of converting code
uvcat7 Oct 11, 2025
f99464a
It builds, but doesn't work.
uvcat7 Nov 12, 2025
3777b8c
The OpenGL context works, but input and frame handling is not working…
uvcat7 Nov 12, 2025
7174e0b
Rebase attempt with beta
uvcat7 Nov 13, 2025
4a08edb
Rebase attempt.
uvcat7 Nov 12, 2025
f344553
Rebase: The OpenGL context works, but input and frame handling is not…
uvcat7 Nov 12, 2025
4cdf66b
Rebase: Working on file dialogs.
uvcat7 Nov 13, 2025
7ac914d
Rebase cleanup.
uvcat7 Nov 13, 2025
3e274c0
Rebase fix attempt 2.
uvcat7 Nov 13, 2025
d7d324c
Finished conversion except doing display scaling.
uvcat7 Nov 15, 2025
f495b12
Add monitor scaling support, sans some complicated issues
uvcat7 Nov 17, 2025
46a5da3
vector icons text glyphs
Psycast Dec 11, 2025
5f61eeb
wip - mixer
uvcat7 Dec 30, 2025
13aa78d
Merge branch 'sdl3' of https://github.com/uvcat7/ArrowVortex into sdl3
uvcat7 Mar 13, 2026
53e93d8
WIP - the mixer plays audio, but offsets and sound effects don't work.
uvcat7 Mar 14, 2026
7082952
ported Windows mixer to SDL_Audio
uvcat7 Apr 23, 2026
e4dc54e
Fix scaling for sprites and remaining display elements.
uvcat7 Apr 24, 2026
8329153
Cleanup/bugfix mixer.
uvcat7 Apr 24, 2026
061f544
Merge branch 'beta' into sdl3
uvcat7 Apr 24, 2026
3b40989
Fix cmakelists.txt for build
uvcat7 Apr 24, 2026
ef687a0
Merge branch 'sdl3' of https://github.com/uvcat7/ArrowVortex into sdl3
uvcat7 Apr 24, 2026
15ec66c
Update vcpkg baseline version
uvcat7 Apr 24, 2026
02a1ece
Revert vcpkg baseline
uvcat7 Apr 24, 2026
d07a87d
Merge branch 'beta' into sdl3
uvcat7 Apr 24, 2026
5db0a69
Fix audio conversion dialogs.
uvcat7 Apr 24, 2026
2bacfb9
Fix again
uvcat7 Apr 24, 2026
bc5c81c
Fix launch directory on Windows
uvcat7 Apr 24, 2026
264ffc2
i am going crazy
uvcat7 May 28, 2026
434b4dc
It works, kinda sorta. Vector->std::vector, various multiplatform fixes.
uvcat7 May 29, 2026
45e14c6
finish refactoring
uvcat7 May 30, 2026
964c2b9
Starting OpenGL menu bar (bar is printed to top.)
uvcat7 Jun 6, 2026
26cce40
Menu bar is functional, but overlaps active window
uvcat7 Jun 8, 2026
c9cb075
separate editor from menu bar
uvcat7 Jun 9, 2026
ec034d9
Make Windows functionality work.
uvcat7 Jun 10, 2026
9a4461f
Make .yml work on Linux
uvcat7 Jun 10, 2026
8cb9c77
Make clang-tidy work again.
uvcat7 Jun 10, 2026
6c22b6d
Try another .yml
uvcat7 Jun 10, 2026
3f6d73d
again
uvcat7 Jun 10, 2026
41c7556
again..
uvcat7 Jun 10, 2026
2a8a608
test...
uvcat7 Jun 10, 2026
0dda99c
try6
uvcat7 Jun 10, 2026
57a0867
try7
uvcat7 Jun 10, 2026
6895cfa
try8
uvcat7 Jun 10, 2026
23e6e60
try9
uvcat7 Jun 10, 2026
942ea8c
try10
uvcat7 Jun 10, 2026
b87d559
try11
uvcat7 Jun 10, 2026
3b42971
try12, get all packages
uvcat7 Jun 10, 2026
69070fb
try13, remove libudev-dev
uvcat7 Jun 10, 2026
41d132d
try14
uvcat7 Jun 10, 2026
9229f1e
try15, fix clang-format
uvcat7 Jun 10, 2026
a6d4700
try16
uvcat7 Jun 10, 2026
2390ac8
try17
uvcat7 Jun 10, 2026
4b549cc
last edit.
uvcat7 Jun 10, 2026
a1486dd
one more build cleanup
uvcat7 Jun 10, 2026
c79b745
fix vector allocation and backport termination from sdl3 branch
uvcat7 Jun 10, 2026
53eb377
Merge branch 'beta' into linux
uvcat7 Jun 10, 2026
ae69054
update latest beta fixes
uvcat7 Jun 10, 2026
addbb2e
update codeql
uvcat7 Jun 10, 2026
792667e
fix alignment code
uvcat7 Jun 10, 2026
90e46b8
Made builds work on Fedora. Fix file dialog and scaling bugs. Documen…
uvcat7 Jun 11, 2026
5ef2fc6
format.
uvcat7 Jun 11, 2026
3b5ec74
oh no x2
uvcat7 Jun 11, 2026
40979d3
oh nox3
uvcat7 Jun 11, 2026
4c6ff9b
oh no x4
uvcat7 Jun 11, 2026
2e23de7
try once more
uvcat7 Jun 11, 2026
a9f5bb1
i gave up
uvcat7 Jun 11, 2026
095c4da
replace menu bar ifdefs with common define, cmakelists.txt cleanup
uvcat7 Jun 12, 2026
e18ec86
per LetalexAlex: correctly handle mouse position with SDL functions
uvcat7 Jun 12, 2026
06b8454
Fix text edit rendering bugs from vector/clamp conversion
uvcat7 Jun 12, 2026
7b7b1f4
Fixed sessions on linux (non portable installations) and added .deskt…
LetalexAlex Aug 7, 2026
780afd9
reformat
uvcat7 Aug 9, 2026
2c46bde
try fixing missing packages again
uvcat7 Aug 10, 2026
dc8c83c
try3
uvcat7 Aug 10, 2026
300b0e6
try again
uvcat7 Aug 15, 2026
4e895ef
fix review issues
uvcat7 Aug 29, 2026
fdec0ec
Linux small fixes (#300)
Psycast Aug 29, 2026
6cfdfec
fix merge conflicts
uvcat7 Aug 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@
modernize-loop-convert,
modernize-make-shared,
modernize-make-unique,
modernize-redundant-void-arg,
modernize-redundant-void-arg, #SDL3 headers
modernize-replace-random-shuffle,
modernize-shrink-to-fit,
modernize-use-bool-literals,
Expand All @@ -69,7 +69,7 @@
modernize-use-equals-default,
modernize-use-equals-delete,
modernize-use-noexcept,
modernize-use-nullptr,
modernize-use-nullptr, #SDL3 headers
modernize-use-override,
modernize-use-transparent-functors,
readability-redundant-member-init'
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
cmake -Bbuild
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT\scripts\buildsystems\vcpkg.cmake"
-DVCPKG_TARGET_TRIPLET=x64-windows-static-md
-DYML=YML
build: cmake --build build --parallel "$env:NUMBER_OF_PROCESSORS"

steps:
Expand Down
125 changes: 125 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
name: Build & Latest Beta

on:
push:
pull_request:
paths-ignore:
- '**.md'

env:
USERNAME: uvcat7
FEED_URL: https://nuget.pkg.github.com/uvcat7/index.json
VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/uvcat7/index.json,readwrite"

jobs:
formatting:
name: "Check formatting"
runs-on: windows-2022
permissions:
contents: read
steps:
- name: Get AV
uses: actions/checkout@v7
- name: Check formatting with clang-format
run: >
clang-format --dry-run --Werror -style=file $(find src/ -type f \( -name '*.cpp' -o -name '*.h' -o -name '*.c' -o -name '*.hpp' \))
shell: bash
windows:
name: "Build Windows x64"
runs-on: windows-2022
permissions:
contents: read
steps:
- name: Get AV
uses: actions/checkout@v7
- name: Add NuGet sources
shell: pwsh
run: |
.$(vcpkg fetch nuget) `
sources add `
-Source "${{ env.FEED_URL }}" `
-StorePasswordInClearText `
-Name GitHubPackages `
-UserName "${{ env.USERNAME }}" `
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
.$(vcpkg fetch nuget) `
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
- name: Configure CMake
run: >
cmake -Bbuild -DCMAKE_BUILD_TYPE=Release
-DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_INSTALLATION_ROOT\scripts\buildsystems\vcpkg.cmake"
-DVCPKG_TARGET_TRIPLET=x64-windows-static-md
-DYML=YML
- name: Build AV
run: cmake --build build --config Release --parallel "$env:NUMBER_OF_PROCESSORS"
- name: Collect into a directory
if: github.ref_name == 'beta'
run: cmake --install build --config Release --prefix ./
- name: Upload artifact
if: github.ref_name == 'beta'
uses: actions/upload-artifact@v5
with:
name: ArrowVortex-${{ github.sha }}
path: |
bin/assets
bin/noteskins
bin/settings
bin/ArrowVortex.exe
if-no-files-found: error
linux:
name: "Build Linux x64"
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Get AV
uses: actions/checkout@v7
- name: Add NuGet sources
shell: bash
run: |
sudo apt-get install -qq -y mono-devel nasm libltdl-dev \
autoconf autoconf-archive automake libtool \
libx11-dev libxft-dev libxext-dev \
libwayland-dev libxkbcommon-dev libegl1-mesa-dev \
libibus-1.0-dev zenity clang-tidy clang-format build-essential git \
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev fcitx-libs-dev \
libasound2-dev libdecor-0-dev python3-venv libthai-dev libpipewire-0.3-dev \
liburing-dev
mono `vcpkg fetch nuget | tail -n 1` \
sources add \
-Source "${{ env.FEED_URL }}" \
-StorePasswordInClearText \
-Name GitHubPackages \
-UserName "${{ env.USERNAME }}" \
-Password "${{ secrets.GH_PACKAGES_TOKEN }}"
mono `vcpkg fetch nuget | tail -n 1` \
setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
- name: Configure CMake
run: >
cmake -Bbuild -DCMAKE_BUILD_TYPE=Release
-DCMAKE_TOOLCHAIN_FILE="${VCPKG_INSTALLATION_ROOT}/scripts/buildsystems/vcpkg.cmake"
-DVCPKG_TARGET_TRIPLET=x64-linux
-DPRESET_NAME=linux-release
-DYML=YML
- name: Build AV
run: cmake --build build --config Release --parallel $(nproc)
- name: Collect into a directory
if: github.ref_name == 'beta'
run: cmake --install build --config Release --prefix ./
- name: Upload artifact
if: github.ref_name == 'beta'
uses: actions/upload-artifact@v5
with:
name: ArrowVortex-${{ github.sha }}
path: |
bin/assets
bin/noteskins
bin/settings
bin/ArrowVortex
if-no-files-found: error
69 changes: 0 additions & 69 deletions .github/workflows/windows.yml

This file was deleted.

73 changes: 69 additions & 4 deletions BUILDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ Prerequsites:
### With CMake CLI
With Developer PowerShell open at root folder of this project run:
```pwsh
cmake -Bbuild -S. -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-windows-static-md
cmake -S. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$env:VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-linux -DPRESET_NAME=linux-release
cmake --build build
```
Resulting binary will be located at `build/src/System/Debug/ArrowVortex.exe`
The resulting binary will be located at `out\build\{windows-debug | windows-release}\bin\ArrowVortex.exe`

To install ArrowVortex to a folder run:
```pwsh
Expand All @@ -25,7 +25,72 @@ cmake --install build --prefix "<your_folder_here>"
1. Run `vcpkg integrate install` in Developer PowerShell. This will integrate vcpkg with your installation of Visual Studio and needs to be run once.
2. Open root folder of this project in Visual Studio

## Linux

Prerequsites:
* Needed packages from package manager
* CMake
* vcpkg (per https://lindevs.com/install-vcpkg-on-ubuntu). Note you will need to give your user read/write access to the install folder with sudo.
* `VCPKG_ROOT` environment variable pointing at vcpkg installation folder (env VCPKG_ROOT={path}) OR install it to /opt/vcpkg.

### Build Packages
For Ubuntu/Debian install:
```
sudo apt-get install build-essential git \
Comment thread
uvcat7 marked this conversation as resolved.
pkg-config cmake ninja-build gnome-desktop-testing libasound2-dev libpulse-dev \
libaudio-dev libjack-dev libsndio-dev libusb-1.0-0-dev libx11-dev libxext-dev \
libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \
libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
libegl1-mesa-dev libdbus-1-dev libibus-1.0-dev libudev-dev fcitx-libs-dev \
libasound2-dev libdecor-0-dev python3-venv libltdl-dev autoconf autoconf-archive \
automake libtool libx11-dev libxft-dev libxext-dev libwayland-dev libxkbcommon-dev \
libegl1-mesa-dev libibus-1.0-dev clang-tidy clang-format zenity python3-jinja2
--ignore-missing
```

For Fedora install:
```sudo dnf install gcc git-core make cmake \
alsa-lib-devel fribidi-devel pulseaudio-libs-devel pipewire-devel \
libX11-devel libXext-devel libXrandr-devel libXcursor-devel libXfixes-devel \
libXi-devel libXScrnSaver-devel libXtst-devel dbus-devel ibus-devel \
systemd-devel mesa-libGL-devel libxkbcommon-devel mesa-libGLES-devel \
mesa-libEGL-devel vulkan-devel wayland-devel wayland-protocols-devel \
libdrm-devel mesa-libgbm-devel libusb1-devel libdecor-devel \
pipewire-jack-audio-connection-kit-devel libthai-devel liburing-devel zlib-ng-compat-static
```

For Arch-based distributions install:
```sudo pacman -S --needed sdl3 libgl libx11 libxext libxrandr libxcursor \
libxfixes libxi libxss wayland libxkbcommon libdrm mesa alsa-lib libpulse \
jack git cmake ninja pkg-config python python-jinja curl zip unzip tar libxrandr \
libxcursor libxfixes libxi libxss wayland-protocols libdecor libusb sndio libltdl \
autoconf autoconf-archive nasm automake libtool libxft
```

You may be missing more packages depending on your distribution and what default packages it comes with. However, missing packages should be flagged by vcpkg or caused a build command to fail.

### With CMake CLI
In the terminal at the root folder of this project run:
```
cmake -S . -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET=x64-linux -DPRESET_NAME={linux-debug | linux-release} -DCMAKE_C_COMPILER="gcc" -DCMAKE_CXX_COMPILER="g++" -DCMAKE_MAKE_PROGRAM="ninja"
cmake --build build
```
The resulting binary will be located at `out/build/{linux-debug | linux-release}/bin/ArrowVortex`

To install ArrowVortex to a folder run:
```
cmake --install build --prefix "{your_folder_here}"
```

### With Visual Studio
1. Use the connection manager to connect to your Linux installation (preferably WSL) over SSH: https://learn.microsoft.com/en-us/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-170#connect-to-wsl
2. Install vcpkg on the remote system to /opt/vcpkg, or modify CMakePresets.json/create a user preset.
3. Build on Windows to the Linux installation. WSL can run the GUI application.

## Troubleshooting
### CMake can't find freetype
CMake failed to integrate with vcpkg. Remove your build directory (either `build/` or `out/`) and follow instructions for your system.
### No SDL3 video or audio device
One of the dependent development packages SDL needs is missing. Delete your cached vcpkg packages so they are force rebuilt, then rerun `vcpkg integrate install` and the build process.
### On WSL, the window border is sometimes missing
This is a WSL bug and cannot be fixed. Restarting your PC tends to work temporarily.
### On WSL, the audio is choppy
This can't be fixed without desyncing the audio between the host and client, as WSL uses pulseaudio to send the sound to Windows over a virtual network audio port.
60 changes: 47 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,25 +1,56 @@
cmake_minimum_required(VERSION 3.30)
cmake_minimum_required(VERSION 3.28)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

project(ArrowVortex)

set(CMAKE_CONFIGURATION_TYPES Debug;Release;MinSizeRel)
if("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
set(tidy_flags "--fix-errors;--fix-notes")
set(tidy_flags "--fix-errors;--fix-notes;")
set(format_flags "-i")
else()
set(tidy_flags "--warnings-as-errors=*")
set(tidy_flags "--warnings-as-errors=*;")
set(format_flags "--dry-run")
endif()
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;${tidy_flags};-extra-arg=/EHsc;-p=build")
if(WIN32)
set(tidy_extra "-extra-arg=/EHsc;--exclude-header-filter=SDL3*;")
endif()
set(CMAKE_CXX_CLANG_TIDY "clang-tidy;${tidy_flags}${tidy_extra}-p=build")

# Sometimes caching will cause CMAKE_TOOLCHAIN_FILE, build presets, and includes to not update/work, so include fallbacks by hand.
if(NOT DEFINED CMAKE_TOOLCHAIN_FILE OR "${CMAKE_TOOLCHAIN_FILE}" STREQUAL "")
if(DEFINED ENV{VCPKG_ROOT} AND NOT "$ENV{VCPKG_ROOT}" STREQUAL "")
message(WARNING "CMAKE_TOOLCHAIN_FILE is not defined, manually including.")
include("$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
elseif(NOT "${VCPKG_ROOT}" STREQUAL "")
message(WARNING "CMAKE_TOOLCHAIN_FILE is not defined, manually including.")
include("${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
elseif(UNIX AND NOT APPLE)
message(WARNING "{VCPKG_ROOT} is not defined, attempting fallback generation.")
include("/opt/vcpkg/scripts/buildsystems/vcpkg.cmake")
elseif(WIN32)
message(WARNING "%VCPKG_ROOT% is not defined, attempting fallback generation.")
include("C:/Program Files/Microsoft Visual Studio/18/Community/VC/vcpkg/scripts/buildsystems/vcpkg.cmake")
endif()
endif()

if("${toolchain_include}" STREQUAL "")
if("${YML}" STREQUAL "")
set(toolchain_include "${PROJECT_SOURCE_DIR}/out/build/${PRESET_NAME}/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/include")
else()
set(toolchain_include "${PROJECT_SOURCE_DIR}/build/vcpkg_installed/${VCPKG_TARGET_TRIPLET}/include")
endif()
endif()

message(STATUS "Including toolchain folder: ${toolchain_include}")
include_directories("${toolchain_include}")
include_directories("${PROJECT_SOURCE_DIR}/src")

find_package(aubio CONFIG REQUIRED)
find_package(Aubio CONFIG NAMES aubio Aubio)
find_package(FFMPEG REQUIRED)
find_package(Freetype REQUIRED)
find_package(iir CONFIG REQUIRED)
Expand All @@ -43,11 +74,14 @@ install(DIRECTORY bin/noteskins DESTINATION bin)
install(DIRECTORY bin/settings DESTINATION bin)

file(GLOB_RECURSE path_sources "src/*.cpp" "src/*.hpp" "src/*.c" "src/*.h")
add_custom_target(format ALL)
add_custom_command(
TARGET format
POST_BUILD
COMMAND clang-format ${format_flags} -Werror -style=file ${path_sources}
USES_TERMINAL
)
add_dependencies(format ArrowVortex)
# Only prevent format/building on Windows, as Linux's clang-format is slightly different
if(WIN32)
add_custom_target(format ALL)
add_custom_command(
TARGET format
POST_BUILD
COMMAND clang-format ${format_flags} -Werror -style=file ${path_sources}
USES_TERMINAL
)
add_dependencies(format ArrowVortex)
endif()
Loading
Loading