Skip to content

Commit 166aa61

Browse files
committed
Merge branch 'main' into sdl3
2 parents dd22eec + ddc6410 commit 166aa61

File tree

109 files changed

+2318
-1341
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+2318
-1341
lines changed

.clang-format

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
BasedOnStyle: LLVM
2+
3+
AccessModifierOffset: -4
4+
AlignTrailingComments: false
25
IndentWidth: 4
36
TabWidth: 4
4-
AccessModifierOffset: -4
57
UseTab: ForIndentation
68
AllowShortIfStatementsOnASingleLine: true
79
ColumnLimit: 100

.clang-tidy

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Checks: '
4747
,-hicpp-uppercase-literal-suffix,
4848
,-hicpp-vararg,
4949
,-llvm-header-guard,
50+
,-llvm-prefer-static-over-anonymous-namespace,
5051
,-llvm-qualified-auto,
5152
,-llvmlibc-callee-namespace,
5253
,-llvmlibc-implementation-in-namespace,
@@ -71,12 +72,32 @@ Checks: '
7172
,-readability-use-anyofallof,
7273
,-readability-use-std-min-max,
7374
'
74-
WarningsAsErrors: 'hicpp-use-override,modernize-avoid-bind,llvm-namespace-comment,modernize-use-nullptr,modernize-pass-by-value,hicpp-noexcept-move,boost-use-to-string,google-readability-namespace-comments,modernize-use-default-member-init,modernize-loop-convert,hicpp-use-nullptr,google-readability-braces-around-statements,cert-dcl03-c,readability-else-after-return,bugprone-macro-parentheses,readability-redundant-declaration,google-explicit-constructor,readability-avoid-const-params-in-decls,readability-redundant-casting,performance-move-const-arg'
75+
WarningsAsErrors: '
76+
hicpp-use-override,
77+
modernize-avoid-bind,
78+
llvm-namespace-comment,
79+
modernize-use-nullptr,
80+
modernize-pass-by-value,
81+
hicpp-noexcept-move,
82+
boost-use-to-string,
83+
google-readability-namespace-comments,
84+
modernize-use-default-member-init,
85+
modernize-loop-convert,
86+
hicpp-use-nullptr,
87+
google-readability-braces-around-statements,
88+
cert-dcl03-c,
89+
readability-else-after-return,
90+
bugprone-macro-parentheses,
91+
readability-redundant-declaration,
92+
google-explicit-constructor,
93+
readability-avoid-const-params-in-decls,
94+
readability-redundant-casting,
95+
performance-move-const-arg,
96+
readability-implicit-bool-conversion,
97+
'
7598
CheckOptions:
7699
- key: readability-implicit-bool-conversion.AllowPointerConditions
77100
value: '1'
78-
- key: readability-implicit-bool-conversion.AllowIntegerConditions
79-
value: '1'
80101
- key: bugprone-narrowing-conversions.WarnOnFloatingPointNarrowingConversion
81102
value: '0'
82103
- key: cppcoreguidelines-narrowing-conversions.WarnOnFloatingPointNarrowingConversion

.github/workflows/android.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ jobs:
1717
path: .cache/cpm
1818
key: cpm
1919
- name: Build
20-
run: make -C android
20+
run: cd android/test && ./gradlew build
2121
env:
2222
CPM_SOURCE_CACHE: ${{ github.workspace }}/.cache/cpm

.github/workflows/macos.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,3 @@ jobs:
1212
run: |
1313
cmake -Bbuild-cmake -GNinja
1414
ninja -Cbuild-cmake
15-
# - uses: actions/setup-java@v4
16-
# with:
17-
# java-version: '17'
18-
# distribution: 'zulu'
19-
# - name: Android
20-
# run: |
21-
# make -Candroid

.github/workflows/windows.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,6 @@ jobs:
4949
- name: Unittest (Release)
5050
# tests like CharacterTest need OpenGL 2.0 and can't run on GitHub Actions runners
5151
run: just unittest-headless Release
52-
- name: Configure (UWP)
53-
run: cmake -Bbuild-uwp -DCMAKE_SYSTEM_NAME=WindowsStore '-DCMAKE_SYSTEM_VERSION=10.0' '-DCMAKE_POLICY_VERSION_MINIMUM=3.5'
54-
- name: Build (UWP, Debug)
55-
run: cmake --build build-uwp --config Debug
56-
- name: Build (UWP, Release)
57-
run: cmake --build build-uwp --config Release
5852

5953
mingw:
6054
runs-on: [ubuntu-latest]

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Thumbs.db
1111
/nintendo
1212
/.clangd/
1313
/.cache/
14+
/.claude/
1415

1516
# Visual Studio
1617
/out/

.gitlab-ci.yml

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ cache:
99
linux:
1010
parallel:
1111
matrix:
12-
- VERSION: ['40', '41', 'latest']
12+
- VERSION: ['41', '43', 'latest']
1313
image: fedora:$VERSION
1414
rules:
1515
- if: '$VERSION == "latest"'
@@ -22,9 +22,9 @@ linux:
2222
- .github/ci.py
2323
- cmake -Bbuild -G"Ninja Multi-Config" -DCMAKE_COMPILE_WARNING_AS_ERROR=1
2424
- cd build
25-
- ninja
26-
- ninja -f build-Release.ninja
27-
- dnf install -y mesa-dri-drivers xorg-x11-drivers >/dev/null
25+
- ninja --quiet
26+
- ninja -f build-Release.ninja --quiet
27+
- dnf install -y --allowerasing mesa-dri-drivers xorg-x11-drivers
2828
- Xorg -config ../data/xorg.conf &>/dev/null &
2929
- sleep 1 # wait for Xorg to boot up
3030
- export DISPLAY=:0
@@ -35,17 +35,17 @@ linux:
3535
- cd ..
3636
- CC=clang CXX=clang++ CXXFLAGS=-fdiagnostics-color cmake -Bbuild-clang -GNinja -DCMAKE_EXPORT_COMPILE_COMMANDS=1 -DJNGL_CLANG_TIDY=1
3737
- cd build-clang
38-
- ninja
38+
- ninja --quiet
3939
- cd ..
4040
- dnf install -y libavformat-free-devel libswscale-free-devel
4141
- cmake -Bbuild-record -G"Ninja Multi-Config" -DCMAKE_COMPILE_WARNING_AS_ERROR=1 -DJNGL_RECORD=1
4242
- cd build-record
43-
- ninja
43+
- ninja --quiet
4444

4545
mingw:
4646
parallel:
4747
matrix:
48-
- VERSION: ['40', '41', 'latest']
48+
- VERSION: ['41', '42', 'latest']
4949
image: fedora:$VERSION
5050
rules:
5151
- if: '$VERSION == "latest"'
@@ -69,7 +69,8 @@ android:
6969
image: registry.gitlab.com/jhasse/android-ndk-docker:r28b
7070
stage: build
7171
script:
72-
- make -C android
72+
- cd android/test
73+
- ./gradlew build
7374

7475
steamos:
7576
image: registry.gitlab.steamos.cloud/steamrt/sniper/sdk

.vscode/tasks.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@
9999
],
100100
"presentation": {
101101
"echo": false,
102+
"focus": true,
102103
"clear": true
103104
}
104105
}

CMakeLists.txt

Lines changed: 46 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ project(jngl LANGUAGES C CXX)
44
set(CMAKE_POLICY_VERSION_MINIMUM 3.5) # required for ogg, see https://github.com/jhasse/jngl/issues/107
55

66
if(MSVC)
7+
string(APPEND CMAKE_C_FLAGS " /Zc:__cplusplus /wd4244 /wd4305 /wd4267")
78
string(APPEND CMAKE_CXX_FLAGS " /Zc:__cplusplus /wd4244 /wd4305 /wd4267")
89
else()
910
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror=implicit-function-declaration")
@@ -27,6 +28,7 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
2728
file(GLOB SRC src/*.cpp src/jngl/*.cpp
2829
src/audio/*.cpp
2930
src/audio/effect/*.cpp
31+
src/timing/*.cpp
3032
)
3133
add_library(jngl ${SRC}
3234
src/jngl/record/VideoRecorder.cpp
@@ -75,6 +77,7 @@ target_include_directories(jngl PUBLIC include/public)
7577
option(JNGL_VIDEO "Enable Theora video playback" ON)
7678
option(JNGL_RECORD "Enable video recording using FFmpeg" OFF)
7779
option(JNGL_STEAMWORKS "Enable Steamsworks SDK support for achievements" OFF)
80+
option(JNGL_TRACE "Enable tracing for debugging purposes" OFF)
7881

7982
set(JNGL_BUILD_WEBP_FROM_SOURCE_DEFAULT OFF)
8083
if(MSVC OR IOS OR ANDROID OR EMSCRIPTEN)
@@ -94,7 +97,7 @@ if (ANDROID)
9497
find_package(oboe REQUIRED CONFIG)
9598
target_link_libraries(jngl PRIVATE oboe::oboe)
9699
file(GLOB ANDROID_SOURCES src/android/*.cpp)
97-
target_sources(jngl PRIVATE ${ANDROID_SOURCES} src/audio/android/engine.cpp)
100+
target_sources(jngl PRIVATE ${ANDROID_SOURCES} src/audio/android/engine.cpp src/font/simple.cpp)
98101
elseif(IOS)
99102
file(GLOB SRC src/ios/*.cpp src/ios/*.mm src/audio/ios/Engine.mm src/ios/*.h)
100103
target_sources(jngl PRIVATE ${SRC} src/mac/message.cpp)
@@ -115,25 +118,18 @@ elseif (UNIX)
115118
file(GLOB SRC src/linux/*.cpp src/linux/*.c)
116119
target_sources(jngl PRIVATE ${SRC})
117120
target_link_libraries(jngl PRIVATE atomic)
121+
option(JNGL_FONTCONFIG "Enable fontconfig for font discovery" ON)
122+
if(JNGL_FONTCONFIG)
123+
find_package(Fontconfig REQUIRED)
124+
target_link_libraries(jngl PRIVATE Fontconfig::Fontconfig)
125+
target_sources(jngl PRIVATE src/linux/fontconfig/fontconfig.cpp)
126+
else()
127+
target_sources(jngl PRIVATE src/font/simple.cpp)
128+
endif()
118129
endif()
119130

120131
target_link_libraries(jngl PRIVATE $<$<AND:$<CXX_COMPILER_ID:GNU>,$<VERSION_LESS:$<CXX_COMPILER_VERSION>,9.0>>:stdc++fs>)
121132
else() # Windows
122-
if(WINDOWS_STORE)
123-
FetchContent_Declare(
124-
angle
125-
GIT_REPOSITORY https://github.com/jhasse/angle.git
126-
GIT_TAG cmake
127-
)
128-
if(NOT angle_POPULATED)
129-
FetchContent_Populate(angle)
130-
131-
set(BUILD_SHARED_LIBS_OLD ${BUILD_SHARED_LIBS})
132-
set(BUILD_SHARED_LIBS ON CACHE INTERNAL "")
133-
add_subdirectory(${angle_SOURCE_DIR} ${angle_BINARY_DIR})
134-
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_OLD} CACHE BOOL "" FORCE)
135-
endif()
136-
endif()
137133
option(JNGL_WINAPI "Use WinAPI instead of SDL" OFF)
138134

139135
target_compile_definitions(jngl PRIVATE _WIN32_WINNT=0x602 _SILENCE_ALL_CXX20_DEPRECATION_WARNINGS UNICODE)
@@ -142,21 +138,13 @@ else() # Windows
142138
target_link_libraries(jngl PRIVATE opengl32)
143139
else()
144140
file(GLOB SRC src/sdl/*.cpp)
145-
if(WINDOWS_STORE)
146-
target_sources(jngl PRIVATE src/xinput/XinputController.cpp)
147-
else()
148-
target_sources(jngl PRIVATE src/sdl/controller/SdlController.cpp)
149-
endif()
141+
target_sources(jngl PRIVATE src/sdl/controller/SdlController.cpp)
150142
target_sources(jngl PRIVATE src/win32/fontfile.cpp src/win32/message.cpp src/win32/other.cpp
151143
src/win32/unicode.cpp)
152144
endif()
153145
target_sources(jngl PRIVATE ${SRC})
154146
target_link_libraries(jngl PUBLIC winmm)
155-
if(WINDOWS_STORE)
156-
target_link_libraries(jngl PUBLIC libEGL libGLESv2)
157-
else()
158-
target_sources(jngl PRIVATE glad/src/wgl.c)
159-
endif()
147+
target_sources(jngl PRIVATE glad/src/wgl.c)
160148
if(MSVC)
161149
string(APPEND CMAKE_C_FLAGS " /D_CRT_SECURE_NO_WARNINGS")
162150
string(APPEND CMAKE_CXX_FLAGS " /D_CRT_SECURE_NO_WARNINGS /D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING")
@@ -166,14 +154,6 @@ else() # Windows
166154
endif()
167155
endif()
168156

169-
# fontconfig
170-
if (UNIX AND NOT EMSCRIPTEN)
171-
if(NOT APPLE AND NOT ANDROID)
172-
find_package(Fontconfig REQUIRED)
173-
target_link_libraries(jngl PRIVATE Fontconfig::Fontconfig)
174-
endif()
175-
endif()
176-
177157
include(cmake/CPM.cmake)
178158
if(ANDROID OR MSVC OR IOS)
179159
CPMAddPackage(NAME libogg
@@ -276,20 +256,13 @@ else()
276256
URL https://www.libsdl.org/release/SDL3-3.1.6.zip
277257
URL_HASH SHA1=b16ad311975378dcc87b11fc02c84eaa1f028b38
278258
OPTIONS
279-
"SDL_SENSOR OFF" # doesn't work with UWP
280-
"SDL_SHARED OFF"
281-
"SDL_STATIC ON"
259+
"SDL_SENSOR OFF"
282260
)
283261
endif()
284262
target_link_libraries(jngl PRIVATE SDL3-static)
285263
endif()
286264
if(MSVC)
287265
target_compile_definitions(jngl PUBLIC _USE_MATH_DEFINES)
288-
if(WINDOWS_STORE)
289-
target_compile_definitions(jngl PUBLIC JNGL_UWP)
290-
target_include_directories(jngl PUBLIC ${SDL_SOURCE_DIR}/include ${SDL_BINARY_DIR}/include) # TODO: This should be PRIVATE
291-
target_link_options(jngl PUBLIC $<IF:$<CONFIG:Debug>,/defaultlib:vccorlibd.lib /defaultlib:msvcrtd.lib,/defaultlib:vccorlib.lib /defaultlib:msvcrt.lib>)
292-
endif()
293266
elseif(IOS)
294267
target_compile_definitions(jngl PRIVATE IOS)
295268
target_compile_definitions(jngl PUBLIC GLES_SILENCE_DEPRECATION)
@@ -315,7 +288,10 @@ else()
315288
set_source_files_properties(data/test.ogg PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
316289
add_executable(jngl-test src/test/test.cpp src/ios/test/main.mm data/Arial.ttf
317290
data/jngl.webp data/test.ogg)
318-
set_target_properties(jngl-test PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/data/ios/jngl-test.in.plist")
291+
set_target_properties(jngl-test PROPERTIES
292+
MACOSX_BUNDLE_INFO_PLIST "${PROJECT_SOURCE_DIR}/data/ios/jngl-test.in.plist"
293+
XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.bixense.jngl-test")
294+
target_link_libraries(jngl-test jngl)
319295
endif()
320296
else()
321297
if(NOT JNGL_BUILD_WEBP_FROM_SOURCE)
@@ -366,6 +342,9 @@ else()
366342
target_link_libraries(jngl PRIVATE PkgConfig::FFMPEG)
367343
target_compile_definitions(jngl PUBLIC JNGL_RECORD)
368344
endif()
345+
if(JNGL_TRACE)
346+
target_compile_definitions(jngl PUBLIC JNGL_TRACE)
347+
endif()
369348
if(NOT EMSCRIPTEN)
370349
pkg_check_modules(VorbisFile REQUIRED vorbisfile)
371350
pkg_check_modules(FREETYPE REQUIRED freetype2)
@@ -387,46 +366,29 @@ else()
387366
target_sources(jngl PRIVATE glad/src/gl.c)
388367
endif()
389368

390-
if(NOT hasParent)
391-
if(WINDOWS_STORE)
392-
# WIN32 is needed to build for the Windows subsystem, not Console
393-
add_executable(jngl-test WIN32 src/test/test.cpp src/uwp/SDL_winrt_main_NonXAML.cpp
394-
data/Arial.ttf data/jngl.webp data/jngl-icon.webp data/test.ogg)
395-
set_source_files_properties(data/Arial.ttf data/jngl.webp data/jngl-icon.webp
396-
data/test.ogg
397-
PROPERTIES VS_DEPLOYMENT_CONTENT 1)
398-
399-
# Otherwise linking will fail with
400-
# error LNK2038: mismatch detected for
401-
# 'vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker': value '1' doesn't
402-
# match value '0' in msvcrtd.lib(app_appinit.obj)
403-
set_source_files_properties(src/uwp/SDL_winrt_main_NonXAML.cpp
404-
PROPERTIES COMPILE_FLAGS "/ZW /Zc:twoPhase- /std:c++17")
405-
else()
406-
if(NOT IOS)
407-
add_executable(jngl-test src/test/test.cpp)
408-
if(WIN32)
409-
target_sources(jngl-test PRIVATE src/win32/jngl.manifest)
410-
endif()
411-
412-
add_executable(example-bike examples/bike/base.cpp examples/bike/bike.cpp
413-
examples/bike/line.cpp examples/bike/main.cpp examples/bike/wheel.cpp)
414-
target_link_libraries(example-bike jngl)
415-
add_executable(example-throw examples/throw/main.cpp)
416-
target_link_libraries(example-throw jngl)
417-
add_executable(example-shader examples/shader/main.cpp)
418-
target_link_libraries(example-shader jngl)
419-
420-
add_executable(audioplayer examples/audioplayer.cpp)
421-
target_link_libraries(audioplayer PRIVATE jngl)
422-
add_custom_command(TARGET audioplayer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/data/test.ogg "$<TARGET_FILE_DIR:audioplayer>")
423-
# add_executable(benchmark-shapes src/benchmarks/benchmark-shapes.cpp)
424-
# target_link_libraries(benchmark-shapes jngl)
425-
426-
add_executable(jngl-test-forceQuit src/test/integration/forceQuit.cpp)
427-
target_link_libraries(jngl-test-forceQuit PRIVATE jngl)
428-
endif()
369+
if(NOT hasParent AND NOT IOS)
370+
add_executable(jngl-test src/test/test.cpp)
371+
set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT jngl-test)
372+
if(WIN32)
373+
target_sources(jngl-test PRIVATE src/win32/jngl.manifest)
429374
endif()
375+
376+
add_executable(example-bike examples/bike/base.cpp examples/bike/bike.cpp
377+
examples/bike/line.cpp examples/bike/main.cpp examples/bike/wheel.cpp)
378+
target_link_libraries(example-bike jngl)
379+
add_executable(example-throw examples/throw/main.cpp)
380+
target_link_libraries(example-throw jngl)
381+
add_executable(example-shader examples/shader/main.cpp)
382+
target_link_libraries(example-shader jngl)
383+
384+
add_executable(audioplayer examples/audioplayer.cpp)
385+
target_link_libraries(audioplayer PRIVATE jngl)
386+
add_custom_command(TARGET audioplayer POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${PROJECT_SOURCE_DIR}/data/test.ogg "$<TARGET_FILE_DIR:audioplayer>")
387+
# add_executable(benchmark-shapes src/benchmarks/benchmark-shapes.cpp)
388+
# target_link_libraries(benchmark-shapes jngl)
389+
390+
add_executable(jngl-test-forceQuit src/test/integration/forceQuit.cpp)
391+
target_link_libraries(jngl-test-forceQuit PRIVATE jngl)
430392
target_link_libraries(jngl-test jngl)
431393
endif()
432394
endif()
@@ -451,7 +413,7 @@ if(JNGL_BUILD_WEBP_FROM_SOURCE)
451413
target_link_libraries(jngl PRIVATE webpdecode webpdspdecode webputilsdecode)
452414
endif()
453415

454-
if(ANDROID OR IOS OR APPLE OR WINDOWS_STORE)
416+
if(ANDROID OR IOS OR APPLE)
455417
if(JNGL_VIDEO)
456418
CPMAddPackage(NAME theora
457419
URL http://downloads.xiph.org/releases/theora/libtheora-1.1.1.tar.bz2
@@ -481,7 +443,7 @@ target_include_directories(jngl PRIVATE ${FREETYPE_INCLUDE_DIRS})
481443
target_link_directories(jngl PUBLIC ${FREETYPE_LIBRARY_DIRS})
482444
target_link_libraries(jngl PUBLIC ${FREETYPE_LIBRARIES})
483445

484-
if(NOT hasParent AND NOT WINDOWS_STORE)
446+
if(NOT hasParent)
485447
include(CTest)
486448
if(BUILD_TESTING)
487449
file(GLOB UNITTEST_SRC src/unittest/*.cpp)

LICENSE.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright (c) 2007-2025 Jan Niklas Hasse
1+
Copyright (c) 2007-2026 Jan Niklas Hasse
22

33
This software is provided 'as-is', without any express or implied
44
warranty. In no event will the authors be held liable for any damages

0 commit comments

Comments
 (0)