Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
1c08b9d
Remove unused maplibre-native submodule; bump maplibre-native-qt to 4…
F1r3w477 Jun 12, 2026
84a14ab
Use Vulkan rendering pipeline.
F1r3w477 Jun 14, 2026
5e6d89e
Improve Vulkan overlay performance and fix storm track rendering.
F1r3w477 Jun 14, 2026
2c08d63
Merge upstream/develop into feature/vulkan-1.3
F1r3w477 Jun 23, 2026
1439a5d
fix(render): ImGui 1.92.8 Vulkan init API
F1r3w477 Jun 23, 2026
b4870a3
fix(map): share alert geometry and guard radar-site ImGui
F1r3w477 Jun 23, 2026
630171f
ci: adopt LLVM 21 and add local format/tidy scripts
F1r3w477 Jun 23, 2026
bdd3091
build: drop legacy GL shaders and vk_context
F1r3w477 Jun 23, 2026
f3d5f69
feat(render): QRhi overlay primitives for map drawing
F1r3w477 Jun 23, 2026
14e903b
refactor(map): QRhi MapWidget rendering and basemap share
F1r3w477 Jun 23, 2026
7272032
refactor(draw): migrate overlay draw items to render context
F1r3w477 Jun 23, 2026
1e5b68b
fix(map): alert click handler and warnings bulk load
F1r3w477 Jun 23, 2026
729533f
fix(map): stabilize layer rendering and radar-site ImGui
F1r3w477 Jun 23, 2026
ce3f0ee
test: cover geo stroke and map basemap share helpers
F1r3w477 Jun 23, 2026
750a454
fix(ci): unblock multi-platform Vulkan PR checks
F1r3w477 Jun 23, 2026
716ee48
fix(ci): address remaining PR 650 build failures
F1r3w477 Jun 24, 2026
22be9ae
refactor(vulkan): drop GL paths, harden rendering, unify LLVM 22
F1r3w477 Jun 24, 2026
a33d2db
fix(ci): resolve PR 650 failures and alert interaction bugs
F1r3w477 Jun 25, 2026
963c5da
Merge upstream develop into feature/vulkan-1.3
F1r3w477 Jul 8, 2026
d01d369
fix(vulkan): restore multi-pane overlays and alert line joins
F1r3w477 Jul 9, 2026
1556d68
style: clang-format-21 Vulkan overlay changes
F1r3w477 Jul 9, 2026
b704d73
fix(vulkan): share overlay GPU state and unblock CI
F1r3w477 Jul 9, 2026
a6d32e2
style: clang-format-21 Vulkan sharing and CI fixes
F1r3w477 Jul 9, 2026
a295acd
fix(ci): keep Conan cache on fail; fix mac Vulkan probe
F1r3w477 Jul 11, 2026
4681409
merge: sync upstream/develop; skip macOS Vulkan CI
F1r3w477 Jul 17, 2026
f39bafe
feat(mac): add Metal dual-backend for stock aqt Qt
F1r3w477 Jul 17, 2026
1aacdd1
style: clang-format Metal dual-backend changes
F1r3w477 Jul 17, 2026
434a492
fix(ci): unbreak Metal ARC casts and MSVC C4127
F1r3w477 Jul 17, 2026
fbbcb4a
fix(mac): use __bridge for Qt Metal ARC casts
F1r3w477 Jul 17, 2026
9cb82d5
merge: sync upstream/develop into feature/vulkan-1.3
F1r3w477 Aug 9, 2026
eef32ec
fix(build): unblock post-merge configure and GCC 15/16
F1r3w477 Aug 9, 2026
5057a3b
working drawing
F1r3w477 Aug 13, 2026
f8d38e2
style: clang-format AlphaBlend vs develop
F1r3w477 Aug 13, 2026
49ea744
fix(map): overlay compass, alert strokes, CI builds
F1r3w477 Aug 13, 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
27 changes: 27 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,31 @@ Checks:
- '-misc-use-anonymous-namespace'
- '-modernize-return-braced-init-list'
- '-modernize-use-trailing-return-type'
- '-bugprone-macro-parentheses'
- '-bugprone-narrowing-conversions'
- '-cppcoreguidelines-avoid-magic-numbers'
- '-cppcoreguidelines-narrowing-conversions'
- '-misc-const-correctness'
- '-modernize-use-scoped-lock'
- '-performance-unnecessary-value-param'
- '-cppcoreguidelines-avoid-c-arrays'
- '-modernize-avoid-c-arrays'
- '-cppcoreguidelines-pro-bounds-array-to-pointer-decay'
- '-cppcoreguidelines-pro-bounds-pointer-arithmetic'
- '-cppcoreguidelines-avoid-const-or-ref-data-members'
- '-cppcoreguidelines-pro-type-static-cast-downcast'
- '-bugprone-undefined-memory-manipulation'
- '-cppcoreguidelines-special-member-functions'
- '-bugprone-forward-declaration-namespace'
- '-bugprone-implicit-widening-of-multiplication-result'
- '-bugprone-exception-escape'
- '-bugprone-branch-clone'
- '-modernize-use-equals-default'
- '-modernize-loop-convert'
- '-modernize-use-auto'
- '-modernize-pass-by-value'
- '-modernize-use-designated-initializers'
- '-cppcoreguidelines-owning-memory'
- '-cppcoreguidelines-use-default-member-init'
- '-modernize-use-default-member-init'
FormatStyle: 'file'
45 changes: 35 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ jobs:
appimage_arch: aarch64
artifact_suffix: linux-gcc-13-arm64
compiler_packages: g++-13
- name: macos_clang-18_x64
- name: macos_clang-22_x64
os: macos-15-intel
build_type: Release
env_cc: clang
Expand All @@ -268,10 +268,10 @@ jobs:
qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
qt_tools: ''
conan_package_manager: ''
conan_profile: scwx-macos_clang-18
conan_profile: scwx-macos_clang-22
appimage_arch: ''
artifact_suffix: macos-x64
- name: macos_clang-18_arm64
- name: macos_clang-22_arm64
os: macos-14
build_type: Release
env_cc: clang
Expand All @@ -283,7 +283,7 @@ jobs:
qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
qt_tools: ''
conan_package_manager: ''
conan_profile: scwx-macos_clang-18_armv8
conan_profile: scwx-macos_clang-22_armv8
appimage_arch: ''
artifact_suffix: macos-arm64
name: ${{ matrix.name }}
Expand Down Expand Up @@ -335,12 +335,22 @@ jobs:
}
}

- name: Install LLVM 22

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clang-22 is available as an apt package on ubuntu-26.04.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I may pull clang-19 to 22 into linux-x64 soon to ensure the code base compiles on a range of versions.

if: ${{ startsWith(matrix.os, 'ubuntu') && contains(matrix.name, 'clang-22') }}
shell: bash
run: |
wget -q https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 22

- name: Setup Ubuntu Environment
if: ${{ startsWith(matrix.os, 'ubuntu') }}
shell: bash
run: |
sudo apt-get install doxygen \
ccache \
libfuse2 \
libvulkan-dev \
ninja-build \
wayland-protocols \
libwayland-dev \
Expand All @@ -361,13 +371,32 @@ jobs:
if: ${{ startsWith(matrix.os, 'macos') }}
shell: bash
run: |
brew install llvm@18
LLVM_PATH=$(brew --prefix llvm@18)
export HOMEBREW_NO_AUTO_UPDATE=1
brew install ccache llvm@22 ninja
LLVM_PATH=$(brew --prefix llvm@22)
echo "CC=${LLVM_PATH}/bin/clang" >> $GITHUB_ENV
echo "CXX=${LLVM_PATH}/bin/clang++" >> $GITHUB_ENV
echo "CPPFLAGS=-I${LLVM_PATH}/include" >> $GITHUB_ENV
echo "LDFLAGS=-L${LLVM_PATH}/lib -L${LLVM_PATH}/lib/c++" >> $GITHUB_ENV

- name: Cache ccache
if: ${{ startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') }}
uses: actions/cache@v6
with:
path: ~/.ccache
key: ccache-${{ matrix.name }}-${{ hashFiles('./source/conanfile.py', './source/tools/conan/profiles/*') }}
restore-keys: |
ccache-${{ matrix.name }}-
save-always: true

- name: Setup ccache
if: ${{ startsWith(matrix.os, 'ubuntu') || startsWith(matrix.os, 'macos') }}
shell: bash
run: |
ccache --max-size=2G
echo "CMAKE_CXX_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV
echo "CMAKE_C_COMPILER_LAUNCHER=ccache" >> $GITHUB_ENV

- name: Setup Python Environment
shell: pwsh
run: |
Expand Down Expand Up @@ -569,10 +598,6 @@ jobs:
/usr/lib/*/libk5crypto.so* \
/usr/lib/*/libkeyutils.so* \
${{ env.FLATPAK_DIR }}/lib
# Copy GLU library to flatpak
cp -a /usr/lib/*/libGLU.so* \
${{ env.FLATPAK_DIR }}/lib

flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak-builder --force-clean \
--user \
Expand Down
5 changes: 4 additions & 1 deletion .github/workflows/clang-format-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ jobs:
run: |
MERGE_BASE=$(git merge-base origin/develop "${HEAD_REF}")
echo "Comparing against ${MERGE_BASE}"
git clang-format-21 --diff --style=file -v ${MERGE_BASE}
# Exclude ObjC++ (.mm); project .clang-format does not support Language: ObjC.
git clang-format-21 --diff --style=file -v \
--extensions "c,h,C,H,cpp,hpp,cc,hh,c++,h++,cxx,hxx" \
${MERGE_BASE}
70 changes: 62 additions & 8 deletions .github/workflows/clang-tidy-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,16 @@ jobs:
- name: linux_clang-tidy_x64
os: ubuntu-24.04
build_type: Release
env_cc: clang-18
env_cxx: clang++-18
env_cc: clang-22
env_cxx: clang++-22
qt_version: 6.11.1
qt_arch_aqt: linux_gcc_64
qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
qt_tools: ''
conan_package_manager: --conf tools.system.package_manager:mode=install --conf tools.system.package_manager:sudo=True
conan_profile: scwx-linux_clang-18
compiler_packages: clang-18 clang-tidy-18
clang_tidy_binary: clang-tidy-18
conan_profile: scwx-linux_clang-22
compiler_packages: ''
clang_tidy_binary: clang-tidy-22
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
env:
Expand All @@ -40,6 +40,13 @@ jobs:
with:
path: source
submodules: recursive
fetch-depth: 0

- name: Update References
shell: bash
run: |
cd source
git fetch origin develop

- name: Checkout clang-tidy-review Repository
uses: actions/checkout@v7
Expand All @@ -58,6 +65,13 @@ jobs:
modules: ${{ matrix.qt_modules }}
tools: ${{ matrix.qt_tools }}

- name: Install LLVM 22
shell: bash
run: |
wget -q https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 22 all

- name: Setup Ubuntu Environment
if: ${{ startsWith(matrix.os, 'ubuntu') }}
shell: bash
Expand Down Expand Up @@ -112,7 +126,6 @@ jobs:
--settings:all build_type=${{ matrix.build_type }} `
--output-folder ./conan/ `
${{ matrix.conan_package_manager }}
conan cache clean

- name: Save Conan Packages
if: steps.conan-install.outcome == 'success' && steps.cache-conan.outputs.cache-hit != 'true'
Expand All @@ -133,8 +146,7 @@ jobs:
-DCONAN_HOST_PROFILE="${{ matrix.conan_profile }}" `
-DCONAN_BUILD_PROFILE="${{ matrix.conan_profile }}" `
-DCMAKE_EXPORT_COMPILE_COMMANDS=on
ninja glad_gl_core_33 `
scwx-qt_generate_counties_db `
ninja scwx-qt_generate_counties_db `
scwx-qt_generate_versions `
scwx-qt_autogen

Expand All @@ -143,6 +155,8 @@ jobs:
shell: bash
run: |
cd source
MERGE_BASE=$(git merge-base origin/develop HEAD)
set +e
review --clang_tidy_binary=${{ matrix.clang_tidy_binary }} \
--token=${{ github.token }} \
--repo='${{ github.repository }}' \
Expand All @@ -160,6 +174,46 @@ jobs:
--split_workflow=true \
--annotations=false \
--parallel=0
REVIEW_EXIT=$?
set -e

if [ ! -f clang-tidy-review-output.json ]; then
echo "GitHub PR diff unavailable (review exit ${REVIEW_EXIT}); using local git diff"
# llvm.sh installs the script under /usr/lib/llvm-*/share/clang/, not
# as clang-tidy-diff-22 on PATH.
CLANG_TIDY_DIFF=""
for candidate in \
"/usr/lib/llvm-22/share/clang/clang-tidy-diff.py" \
"/usr/share/clang/clang-tidy-diff.py" \
"$(command -v clang-tidy-diff-22 || true)" \
"$(command -v clang-tidy-diff || true)"; do
if [ -n "${candidate}" ] && [ -f "${candidate}" ]; then
CLANG_TIDY_DIFF="${candidate}"
break
fi
done
if [ -z "${CLANG_TIDY_DIFF}" ]; then
echo "clang-tidy-diff not found; skipping local fallback review"
echo '{"body":"clang-tidy review skipped: PR diff unavailable and clang-tidy-diff missing","event":"COMMENT","comments":[]}' > clang-tidy-review-output.json
echo "{\"pr_number\":${{ github.event.pull_request.number }}}" > clang-tidy-review-metadata.json
else
echo "Using clang-tidy-diff: ${CLANG_TIDY_DIFF}"
git diff -U0 ${MERGE_BASE}...HEAD -- \
'*.cpp' '*.cxx' '*.cc' '*.hpp' '*.h' '*.hh' '*.h++' '*.c' | \
python3 "${CLANG_TIDY_DIFF}" \
-path ../build \
-p1 \
-clang-tidy-binary=${{ matrix.clang_tidy_binary }} \
-quiet
TIDY_EXIT=$?
echo '{"body":"clang-tidy local git diff review","event":"COMMENT","comments":[]}' > clang-tidy-review-output.json
echo "{\"pr_number\":${{ github.event.pull_request.number }}}" > clang-tidy-review-metadata.json
if [ ${TIDY_EXIT} -ne 0 ]; then
exit ${TIDY_EXIT}
fi
fi
fi

rsync -avzh --ignore-missing-args clang-tidy-review-output.json ../
rsync -avzh --ignore-missing-args clang-tidy-review-metadata.json ../
rsync -avzh --ignore-missing-args clang_fixes.json ../
Expand Down
5 changes: 1 addition & 4 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,9 @@
[submodule "external/imgui-backend-qt"]
path = external/imgui-backend-qt
url = https://github.com/dpaulat/imgui-backend-qt
[submodule "external/maplibre-native"]
path = external/maplibre-native
url = https://github.com/dpaulat/maplibre-gl-native.git
[submodule "external/maplibre-native-qt"]
path = external/maplibre-native-qt
url = https://github.com/dpaulat/maplibre-native-qt.git
url = https://github.com/maplibre/maplibre-native-qt.git
[submodule "external/qt6ct"]
path = external/qt6ct
url = https://github.com/AdenKoperczak/qt6ct.git
Expand Down
2 changes: 1 addition & 1 deletion ACKNOWLEDGEMENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Supercell Wx uses code from the following dependencies:
| [Mesa 3D](https://mesa3d.org/) | [MIT License](https://spdx.org/licenses/MIT.html) |
| [nunicode](https://bitbucket.org/alekseyt/nunicode/src/master/) | [MIT License](https://spdx.org/licenses/MIT.html) | Modified for MapLibre Native |
| [OpenSSL](https://www.openssl.org/) | [OpenSSL License](https://spdx.org/licenses/OpenSSL.html) |
| [Qt](https://www.qt.io/) | [GNU Lesser General Public License v3.0 only](https://spdx.org/licenses/LGPL-3.0-only.html) | Qt Core, Qt GUI, Qt Multimedia, Qt Network, Qt OpenGL, Qt Positioning, Qt Serial Port, Qt SQL, Qt SVG, Qt Widgets<br/>Additional Licenses: https://doc.qt.io/qt-6/licenses-used-in-qt.html |
| [Qt](https://www.qt.io/) | [GNU Lesser General Public License v3.0 only](https://spdx.org/licenses/LGPL-3.0-only.html) | Qt Core, Qt GUI, Qt Multimedia, Qt Network, Qt Positioning, Qt Serial Port, Qt SQL, Qt SVG, Qt Widgets<br/>Additional Licenses: https://doc.qt.io/qt-6/licenses-used-in-qt.html |
| [qt6ct](https://github.com/trialuser02/qt6ct) | [BSD 2-Clause "Simplified" License](https://spdx.org/licenses/BSD-2-Clause.html) |
| [range-v3](https://github.com/ericniebler/range-v3) | [Boost Software License 1.0](https://spdx.org/licenses/BSL-1.0.html)<br/>[MIT License](https://spdx.org/licenses/MIT.html)<br/>[Stepanov and McJones, "Elements of Programming" license](https://github.com/ericniebler/range-v3/tree/0.12.0?tab=License-1-ov-file)<br/>[SGI C++ Standard Template Library license](https://github.com/ericniebler/range-v3/tree/0.12.0?tab=License-1-ov-file) |
| [re2](https://github.com/google/re2) | [BSD 3-Clause "New" or "Revised" License](https://spdx.org/licenses/BSD-3-Clause.html) |
Expand Down
19 changes: 17 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Supercell Wx is a cross-platform C++20/Qt6 application for visualizing live and
- Main window and UI ([scwx-qt/source/scwx/qt/main/](scwx-qt/source/scwx/qt/main/))
- Manager classes coordinate application state ([scwx-qt/source/scwx/qt/manager/](scwx-qt/source/scwx/qt/manager/))
- Map rendering with MapLibre GL ([scwx-qt/source/scwx/qt/map/](scwx-qt/source/scwx/qt/map/))
- OpenGL drawing primitives ([scwx-qt/source/scwx/qt/gl/](scwx-qt/source/scwx/qt/gl/))
- QRhi/Vulkan drawing primitives ([scwx-qt/source/scwx/qt/draw/](scwx-qt/source/scwx/qt/draw/), [scwx-qt/source/scwx/qt/render/](scwx-qt/source/scwx/qt/render/))
- Product views connect data to visualization ([scwx-qt/source/scwx/qt/view/](scwx-qt/source/scwx/qt/view/))

**Critical:** Keep Qt code isolated to scwx-qt. Never add Qt dependencies to wxdata.
Expand Down Expand Up @@ -83,7 +83,7 @@ cmake --build . --target supercell-wx
**Key Conan profiles:** See [tools/conan/profiles/](tools/conan/profiles/)
- Windows: `scwx-windows_vs2026_x64[-debug]`
- Linux: `scwx-linux_gcc-11[-debug]`, `scwx-linux_clang-17`
- macOS: `scwx-macos_clang-18[_armv8][-debug]`
- macOS: `scwx-macos_clang-22[_armv8][-debug]`

**CMake Presets:** Use [CMakePresets.json](CMakePresets.json) for IDE integration. Presets like `windows-vs2026-x64-release` encapsulate toolchain/profile selection.

Expand Down Expand Up @@ -190,6 +190,21 @@ Recommended extensions: C/C++ Extension Pack, clangd, CMake Tools, Python.
### Address Sanitizer
Enable with `-DSCWX_ADDRESS_SANITIZER=ON` or use presets like `linux-gcc-debug-asan`. Useful for memory leak/corruption detection.

### Graphics backends
Map rendering uses Qt `QRhiWidget`: **Vulkan** on Windows/Linux, **Metal** on macOS (stock aqt Qt; no MoltenVK/custom Qt). Overlay draw code stays on QRhi; shaders are `.qsb` packs (SPIR-V + MSL) from GLSL via `tools/compile-vulkan-shaders.sh`.

Optional environment variables (Vulkan hosts):

| Variable | Effect |
|---|---|
| `SCWX_VULKAN_VALIDATION=1` | Enable Khronos validation layers (auto-on in Debug builds unless disabled) |
| `SCWX_VULKAN_VALIDATION_DISABLE=1` | Disable validation layers in Debug builds |
| `SCWX_VULKAN_SMOKE=1` | Headless Vulkan smoke checks at startup |
| `SCWX_VULKAN_PERF=1` | Extra Vulkan/QRhi timing logs |
| `SCWX_VULKAN_PIPELINE_CACHE_DISABLE=1` | Skip loading/saving Vulkan pipeline cache blobs |

Device or surface loss triggers map resource reset via `render::RegisterVulkanResultHandler` (Vulkan only). Pipeline cache files live under the app cache directory (`qrhi-vulkan-pipeline-cache.bin`, `imgui-vulkan-pipeline-cache.bin`); bump `kCacheVersion` in `rhi_pipeline_cache.cpp` when shader layouts change materially.

### CI Reference
See [.github/workflows/ci.yml](.github/workflows/ci.yml) for complete build matrix. Mirrors setup scripts but includes AppImage packaging, artifact collection.

Expand Down
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ set(SCWX_VERSION "0.6.1")

option(SCWX_ADDRESS_SANITIZER "Build with Address Sanitizer" OFF)

set(SCWX_RENDER_BACKEND "VULKAN" CACHE STRING "Rendering API backend")

add_subdirectory(external)
add_subdirectory(wxdata)
add_subdirectory(scwx-qt)
Expand Down
Loading
Loading