From 61d716309a7506b485b108c086574913f3fa9fee Mon Sep 17 00:00:00 2001 From: Megamouse Date: Fri, 24 Jan 2025 08:27:08 +0100 Subject: [PATCH] Update SDL to 3.2.6 --- .ci/build-mac-arm64.sh | 8 +- .ci/build-mac.sh | 4 +- .ci/deploy-mac-arm64.sh | 2 +- .ci/deploy-mac.sh | 2 +- .ci/install-freebsd.sh | 2 +- 3rdparty/CMakeLists.txt | 30 +- 3rdparty/FAudio | 2 +- 3rdparty/libsdl-org/SDL | 2 +- 3rdparty/libsdl-org/SDL.vcxproj | 334 ++-- 3rdparty/libsdl-org/SDL.vcxproj.filters | 1991 ++++++++++++++++++----- BUILDING.md | 6 +- rpcs3/Emu/CMakeLists.txt | 6 +- rpcs3/Emu/Io/PadHandler.h | 3 + rpcs3/Emu/Io/pad_config_types.cpp | 2 +- rpcs3/Emu/Io/pad_config_types.h | 2 +- rpcs3/Input/dualsense_pad_handler.h | 1 - rpcs3/Input/gui_pad_thread.cpp | 4 +- rpcs3/Input/hid_pad_handler.h | 1 - rpcs3/Input/pad_thread.cpp | 4 +- rpcs3/Input/sdl_pad_handler.cpp | 394 ++--- rpcs3/Input/sdl_pad_handler.h | 47 +- rpcs3/emucore.vcxproj | 4 +- rpcs3/rpcs3.vcxproj | 22 +- rpcs3/rpcs3qt/pad_settings_dialog.cpp | 6 +- rpcs3/rpcs3qt/settings_dialog.cpp | 2 +- 25 files changed, 2054 insertions(+), 827 deletions(-) diff --git a/.ci/build-mac-arm64.sh b/.ci/build-mac-arm64.sh index 23a16f431984..2e7b6af28ffd 100644 --- a/.ci/build-mac-arm64.sh +++ b/.ci/build-mac-arm64.sh @@ -31,7 +31,7 @@ sudo rm -rf /usr/local/Cellar/curl /usr/local/opt/curl /usr/local/bin/brew link --overwrite python || true /usr/local/bin/brew install -f --overwrite nasm ninja p7zip ccache pipenv #create-dmg /usr/local/bin/brew link -f curl || true -/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils +/usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl3 vulkan-headers coreutils /usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 || true export BREW_ARM64_PATH="/opt/homebrew1" @@ -45,7 +45,7 @@ brew_arm64_install_packages curl mv /opt/homebrew1/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl.bak ln -s /usr/local/opt/curl/bin/curl /opt/homebrew1/opt/curl/bin/curl -brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl2 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd +brew_arm64_install_packages 0mq aom aribb24 ca-certificates cjson dav1d ffmpeg@5 fontconfig freetype freetype2 gettext glew gmp gnutls lame libbluray libidn2 libnettle libogg libpng librist libsodium libsoxr libtasn libtasn1 libunistring libvmaf libvorbis libvpx libx11 libxau libxcb libxdmcp llvm@$LLVM_COMPILER_VER mbedtls molten-vk nettle opencore-amr openjpeg openssl opus p11-kit pkg-config pkgconfig pzstd rav1e sdl3 snappy speex srt svt-av1 theora vulkan-headers webp x264 x265 xz z3 zeromq zmq zstd "$BREW_ARM64_PATH/bin/brew" link -f ffmpeg@5 ln -s /opt/homebrew1/opt/llvm@19/lib/unwind/libunwind.1.dylib /opt/homebrew1/opt/llvm@19/lib/libunwind.1.dylib @@ -86,10 +86,10 @@ cd "$WORKDIR" ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER" export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN" -export SDL2_DIR="$BREW_ARM64_PATH/opt/sdl2/lib/cmake/SDL2" +export SDL3_DIR="$BREW_ARM64_PATH/opt/sdl3/lib/cmake/SDL3" export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH" -export LDFLAGS="-L$BREW_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL2.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib" +export LDFLAGS="-L$BREW_ARM64_PATH/lib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavcodec.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavformat.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libavutil.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswscale.dylib $BREW_ARM64_PATH/opt/ffmpeg@5/lib/libswresample.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/c++/libc++.1.dylib $BREW_ARM64_PATH/lib/libSDL3.dylib $BREW_ARM64_PATH/lib/libGLEW.dylib $BREW_ARM64_PATH/opt/llvm@$LLVM_COMPILER_VER/lib/libunwind.1.dylib -Wl,-rpath,$BREW_ARM64_PATH/lib" export CPPFLAGS="-I$BREW_ARM64_PATH/include -I$BREW_X64_PATH/include -no-pie -D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" export CFLAGS="-D__MAC_OS_X_VERSION_MIN_REQUIRED=130000" export LIBRARY_PATH="$BREW_ARM64_PATH/lib" diff --git a/.ci/build-mac.sh b/.ci/build-mac.sh index cdc175c2009c..809ec1faa9a1 100644 --- a/.ci/build-mac.sh +++ b/.ci/build-mac.sh @@ -13,7 +13,7 @@ arch -x86_64 /usr/local/bin/brew install -f --overwrite python || arch -x86_64 / arch -x86_64 /usr/local/bin/brew uninstall -f --ignore-dependencies ffmpeg arch -x86_64 /usr/local/bin/brew install -f --build-from-source ffmpeg@5 arch -x86_64 /usr/local/bin/brew reinstall -f --build-from-source gnutls freetype -arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl2 vulkan-headers coreutils +arch -x86_64 /usr/local/bin/brew install llvm@$LLVM_COMPILER_VER glew cmake sdl3 vulkan-headers coreutils arch -x86_64 /usr/local/bin/brew link -f llvm@$LLVM_COMPILER_VER ffmpeg@5 # moltenvk based on commit for 1.2.11 release @@ -53,7 +53,7 @@ cd "$WORKDIR" ditto "/tmp/Qt/$QT_VER" "qt-downloader/$QT_VER" export Qt6_DIR="$WORKDIR/qt-downloader/$QT_VER/clang_64/lib/cmake/Qt$QT_VER_MAIN" -export SDL2_DIR="$BREW_X64_PATH/opt/sdl2/lib/cmake/SDL2" +export SDL3_DIR="$BREW_X64_PATH/opt/sdl3/lib/cmake/SDL3" export PATH="$BREW_X64_PATH/opt/llvm@$LLVM_COMPILER_VER/bin:$WORKDIR/qt-downloader/$QT_VER/clang_64/bin:$BREW_BIN:$BREW_SBIN:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/Apple/usr/bin:$PATH" export LDFLAGS="-L$BREW_X64_PATH/lib -Wl,-rpath,$BREW_X64_PATH/lib" diff --git a/.ci/deploy-mac-arm64.sh b/.ci/deploy-mac-arm64.sh index 0baedfa99dac..3652a1bd4fd1 100644 --- a/.ci/deploy-mac-arm64.sh +++ b/.ci/deploy-mac-arm64.sh @@ -37,7 +37,7 @@ install_name_tool \ -delete_rpath /opt/homebrew/lib \ -delete_rpath /opt/homebrew1/opt/llvm@$LLVM_COMPILER_VER/lib \ -delete_rpath /usr/local/lib RPCS3.app/Contents/MacOS/rpcs3 -#-delete_rpath /opt/homebrew1/Cellar/sdl2/2.30.7/lib +#-delete_rpath /opt/homebrew1/Cellar/sdl3/3.2.6/lib # Need to do this rename hack due to case insensitive filesystem mv rpcs3.app RPCS3_.app diff --git a/.ci/deploy-mac.sh b/.ci/deploy-mac.sh index 91eb25358931..41d676e95b51 100644 --- a/.ci/deploy-mac.sh +++ b/.ci/deploy-mac.sh @@ -39,7 +39,7 @@ mv RPCS3_.app RPCS3.app install_name_tool \ -delete_rpath /usr/local/lib \ -delete_rpath /usr/local/opt/llvm@$LLVM_COMPILER_VER/lib RPCS3.app/Contents/MacOS/rpcs3 -#-delete_rpath /usr/local/Cellar/sdl2/2.30.3/lib +#-delete_rpath /usr/local/Cellar/sdl3/3.2.6/lib # NOTE: "--deep" is deprecated codesign --deep -fs - RPCS3.app diff --git a/.ci/install-freebsd.sh b/.ci/install-freebsd.sh index a7b39733b385..716a4bb59127 100755 --- a/.ci/install-freebsd.sh +++ b/.ci/install-freebsd.sh @@ -15,4 +15,4 @@ pkg install llvm19 pkg install git ccache cmake ninja qt6-multimedia qt6-svg glew openal-soft ffmpeg # Optional dependencies (libevdev is pulled by qt6-base) -pkg install pkgconf alsa-lib pulseaudio sdl2 evdev-proto vulkan-headers vulkan-loader +pkg install pkgconf alsa-lib pulseaudio sdl3 evdev-proto vulkan-headers vulkan-loader diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 4625c0e81e37..8f848f3c6e29 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -303,26 +303,26 @@ add_subdirectory(wolfssl EXCLUDE_FROM_ALL) # CURL add_subdirectory(curl EXCLUDE_FROM_ALL) -# SDL2 -set(SDL2_TARGET 3rdparty_dummy_lib) +# SDL3 +set(SDL3_TARGET 3rdparty_dummy_lib) if(USE_SDL) if(USE_SYSTEM_SDL) - find_package(SDL2) - if(SDL2_FOUND AND NOT SDL2_VERSION VERSION_LESS 2.24.0) - message(STATUS "Using system SDL2") - add_library(3rdparty_sdl2 INTERFACE) - target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1) - target_link_libraries(3rdparty_sdl2 INTERFACE SDL2::SDL2) - set(SDL2_TARGET 3rdparty_sdl2) + find_package(SDL3) + if(SDL3_FOUND AND NOT SDL3_VERSION VERSION_LESS 3.2.0) + message(STATUS "Using system SDL3") + add_library(3rdparty_sdl3 INTERFACE) + target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) + target_link_libraries(3rdparty_sdl3 INTERFACE SDL3::SDL3) + set(SDL3_TARGET 3rdparty_sdl3) else() - message(FATAL_ERROR "SDL2 is not available on this system") + message(FATAL_ERROR "SDL3 is not available on this system") endif() else() - message(STATUS "Using static SDL2 from 3rdparty") - add_library(3rdparty_sdl2 INTERFACE) - target_compile_definitions(3rdparty_sdl2 INTERFACE -DHAVE_SDL2=1) + message(STATUS "Using static SDL3 from 3rdparty") + add_library(3rdparty_sdl3 INTERFACE) + target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) add_subdirectory(libsdl-org EXCLUDE_FROM_ALL) - set(SDL2_TARGET 3rdparty_sdl2) + set(SDL3_TARGET 3rdparty_sdl3) endif() endif() @@ -365,7 +365,7 @@ add_library(3rdparty::glew ALIAS 3rdparty_glew) add_library(3rdparty::wolfssl ALIAS wolfssl) add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl) add_library(3rdparty::soundtouch ALIAS soundtouch) -add_library(3rdparty::sdl2 ALIAS ${SDL2_TARGET}) +add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET}) add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static) add_library(3rdparty::rtmidi ALIAS rtmidi) add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET}) diff --git a/3rdparty/FAudio b/3rdparty/FAudio index af74e661c1bd..486e33eef3f2 160000 --- a/3rdparty/FAudio +++ b/3rdparty/FAudio @@ -1 +1 @@ -Subproject commit af74e661c1bd8b105840d14485cc01d9c782b513 +Subproject commit 486e33eef3f282e4ce3d29f32ded3e67bacdbe5c diff --git a/3rdparty/libsdl-org/SDL b/3rdparty/libsdl-org/SDL index 7a44b1ab002c..65864190cc83 160000 --- a/3rdparty/libsdl-org/SDL +++ b/3rdparty/libsdl-org/SDL @@ -1 +1 @@ -Subproject commit 7a44b1ab002cee6efa56d3b4c0e146b7fbaed80b +Subproject commit 65864190cc8393103fd218fd17e2dfdf92e0532d diff --git a/3rdparty/libsdl-org/SDL.vcxproj b/3rdparty/libsdl-org/SDL.vcxproj index 687761ae932e..81b7d853a54c 100644 --- a/3rdparty/libsdl-org/SDL.vcxproj +++ b/3rdparty/libsdl-org/SDL.vcxproj @@ -11,137 +11,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + - + + + + + + + - - - + + - @@ -151,6 +155,7 @@ + @@ -172,17 +177,36 @@ + - - - - + + + + + + + + + + + + + + + + + + + + + + @@ -191,24 +215,17 @@ + - - - - - - - - @@ -224,29 +241,39 @@ + + + + + + + - + + - + + + @@ -261,8 +288,6 @@ - - @@ -272,78 +297,71 @@ + + - - + + + + - + + + - + - + + + + + + - + + - - - - - - - - - - - - - - - - - - - - + @@ -351,18 +369,24 @@ + + + + + + @@ -374,11 +398,12 @@ - - + + + @@ -388,23 +413,43 @@ + + + + + + + + + + + + + + + + + + + + @@ -420,25 +465,35 @@ - + + + + + + + + + + + {8DC244EE-A0BD-4038-BAF7-CFAFA5EB2BAA} @@ -467,11 +522,14 @@ + + SDL\src;$(IncludePath) + TurnOffAllWarnings false - SDL\include;%(AdditionalIncludeDirectories) + SDL\include;SDL\include\build_config;%(AdditionalIncludeDirectories) ProgramDatabase MaxSpeed diff --git a/3rdparty/libsdl-org/SDL.vcxproj.filters b/3rdparty/libsdl-org/SDL.vcxproj.filters index e7f2fa2dcbd6..af3ba9a350d5 100644 --- a/3rdparty/libsdl-org/SDL.vcxproj.filters +++ b/3rdparty/libsdl-org/SDL.vcxproj.filters @@ -1,433 +1,1592 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + {395b3af0-33d0-411b-b153-de1676bf1ef8} + + + {5a3e3167-75be-414f-8947-a5306df372b2} + + + {546d9ed1-988e-49d3-b1a5-e5b3d19de6c1} + + + {a56247ff-5108-4960-ba6a-6814fd1554ec} + + + {8880dfad-2a06-4e84-ab6e-6583641ad2d1} + + + {2b996a7f-f3e9-4300-a97f-2c907bcd89a9} + + + {5713d682-2bc7-4da4-bcf0-262a98f142eb} + + + {5e27e19f-b3f8-4e2d-b323-b00b2040ec86} + + + {a3ab9cff-8495-4a5c-8af6-27e43199a712} + + + {377061e4-3856-4f05-b916-0d3b360df0f6} + + + {226a6643-1c65-4c7f-92aa-861313d974bb} + + + {ef859522-a7fe-4a00-a511-d6a9896adf5b} + + + {01fd2642-4493-4316-b548-fb829f4c9125} + + + {cce7558f-590a-4f0a-ac0d-e579f76e588e} + + + {7a53c9e4-d4bd-40ed-9265-1625df685121} + + + {4c7a051c-ce7c-426c-bf8c-9187827f9052} + + + {97e2f79f-311b-42ea-81b2-e801649fdd93} + + + {baf97c8c-7e90-41e5-bff8-14051b8d3956} + + + {45e50d3a-56c9-4352-b811-0c60c49a2431} + + + {9d86e0ef-d6f6-4db2-bfc5-b3529406fa8d} + + + {b35fa13c-6ed2-4680-8c56-c7d71b76ceab} + + + {61b61b31-9e26-4171-a3bb-b969f1889726} + + + {f63aa216-6ee7-4143-90d3-32be3787f276} + + + {90bee923-89df-417f-a6c3-3e260a7dd54d} + + + {4c8ad943-c2fb-4014-9ca3-041e0ad08426} + + + {3d68ae70-a9ff-46cf-be69-069f0b02aca0} + + + {ebc2fca3-3c26-45e3-815e-3e0581d5e226} + + + {47c445a2-7014-4e15-9660-7c89a27dddcf} + + + {d008487d-6ed0-4251-848b-79a68e3c1459} + + + {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3e} + + + {c9e8273e-13ae-47dc-bef8-8ad8e64c9a3d} + + + {0b8e136d-56ae-47e7-9981-e863a57ac616} + + + {bf3febd3-9328-43e8-b196-0fd3be8177dd} + + + {1a62dc68-52d2-4c07-9d81-d94dfe1d0d12} + + + {e9f01b22-34b3-4380-ade6-0e96c74e9c90} + + + {f674f22f-7841-4f3a-974e-c36b2d4823fc} + + + {d7ad92de-4e55-4202-9b2b-1bd9a35fe4dc} + + + {8311d79d-9ad5-4369-99fe-b2fb2659d402} + + + {6c4dfb80-fdf9-497c-a6ff-3cd8f22efde9} + + + {4810e35c-33cb-4da2-bfaf-452da20d3c9a} + + + {2cf93f1d-81fd-4bdc-998c-5e2fa43988bc} + + + {5752b7ab-2344-4f38-95ab-b5d3bc150315} + + + {7a0eae3d-f113-4914-b926-6816d1929250} + + + {ee602cbf-96a2-4b0b-92a9-51d38a727411} + + + {a812185b-9060-4a1c-8431-be4f66894626} + + + {31c16cdf-adc4-4950-8293-28ba530f3882} + + + {add61b53-8144-47d6-bd67-3420a87c4905} + + + {e7cdcf36-b462-49c7-98b7-07ea7b3687f4} + + + {82588eef-dcaa-4f69-b2a9-e675940ce54c} + + + {560239c3-8fa1-4d23-a81a-b8408b2f7d3f} + + + {81711059-7575-4ece-9e68-333b63e992c4} + + + {1e44970f-7535-4bfb-b8a5-ea0cea0349e0} + + + {1dd91224-1176-492b-a2cb-e26153394db0} + + + {e3ecfe50-cf22-41d3-8983-2fead5164b47} + + + {5521d22f-1e52-47a6-8c52-06a3b6bdefd7} + + + {4755f3a6-49ac-46d6-86be-21f5c21f2197} + + + {f48c2b17-1bee-4fec-a7c8-24cf619abe08} + + + {653672cc-90ae-4eba-a256-6479f2c31804} + + + {00001967ea2801028a046a722a070000} + + + {0000ddc7911820dbe64274d3654f0000} + + + {0000de1b75e1a954834693f1c81e0000} + + + {0000fc2700d453b3c8d79fe81e1c0000} + + + {0000fbfe2d21e4f451142e7d0e870000} + + + {5115ba31-20f8-4eab-a8c5-6a572ab78ff7} + + + {00003288226ff86b99eee5b443e90000} + + + {0000d7fda065b13b0ca4ab262c380000} + + + {098fbef9-d8a0-4b3b-b57b-d157d395335d} + + + {00008dfdfa0190856fbf3c7db52d0000} + + + {748cf015-00b8-4e71-ac48-02e947e4d93d} + + + {00009d5ded166cc6c6680ec771a30000} + + + {00004d6806b6238cae0ed62db5440000} + + + {000028b2ea36d7190d13777a4dc70000} + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + API Headers + + + camera + + + camera + + + filesystem + + + io + + + io + + + main + + + + + API Headers + + + API Headers + + + API Headers + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + cpuinfo + + + dynapi + + + dynapi + + + dynapi + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + haptic + + + haptic + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + joystick + + + libm + + + libm + + + hidapi\hidapi + + + locale + + + misc + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\yuv2rgb + + + video\yuv2rgb + + + video\yuv2rgb + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + thread + + + thread + + + thread\windows + + + thread\windows + + + thread\generic + + + sensor + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + + video\khronos\vulkan + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + render\direct3d12 + + + + - - - - - - - - - + + render\vulkan + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + API Headers + + + gpu + + + gpu + + + + + + + + + camera\dummy + + + camera\mediafoundation + + + camera + + + dialog + + + dialog + + + filesystem + + + filesystem\windows + + + io\generic + + + io + + + io\windows + + + main\generic + + + main + + + main + + + main\windows + + + + + + + + + + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + audio + + + atomic + + + atomic + + + core + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + core\windows + + + cpuinfo + + + dialog + + + dynapi + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + events + + + io + + + filesystem\windows + + + haptic + + + hidapi + + + joystick + + + joystick + + + joystick + + + joystick + + + libm + + + loadso\windows + + + misc + + + misc\windows + + + locale\windows + + + locale + + + audio\directsound + + + audio\disk + + + audio\dummy + + + audio\wasapi + + + haptic\windows + + + haptic\windows + + + haptic\dummy + + + joystick\dummy + + + joystick\gdk + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\hidapi + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\windows + + + joystick\virtual + + + time + + + time\windows + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video + + + video\dummy + + + video\dummy + + + video\dummy + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + video\windows + + + timer + + + timer\windows + + + thread + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\windows + + + thread\generic + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + stdlib + + + sensor + + + sensor\dummy + + + sensor\windows + + + render + + + render + + + render + + + render + + + render\direct3d + + + render\direct3d + + + render\direct3d11 + + + render\direct3d11 + + + render\opengl + + + render\opengl + + + render\opengles2 + + + render\opengles2 + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + render\software + + + power + + + power\windows + + + + render\direct3d12 + + + render\direct3d12 + + + core\windows + + + stdlib + + + + + + + + render\vulkan + + + render\vulkan + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + video\offscreen + + + gpu + + + gpu + + + gpu + + + + + + + + + + + + \ No newline at end of file diff --git a/BUILDING.md b/BUILDING.md index 7cad89f8c547..c4830d056dde 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -40,17 +40,17 @@ These are the essentials tools to build RPCS3 on Linux. Some of them can be inst - [CMake 3.28.0+](https://www.cmake.org/download/) - [Qt 6.8.2](https://www.qt.io/download-qt-installer) - [Vulkan SDK 1.3.268.0](https://vulkan.lunarg.com/sdk/home) (See "Install the SDK" [here](https://vulkan.lunarg.com/doc/sdk/latest/linux/getting_started.html)) for now future SDKs don't work. You need precisely 1.3.268.0. -- [SDL2](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend) +- [SDL3](https://github.com/libsdl-org/SDL/releases) (for the FAudio backend) **If you have an NVIDIA GPU, you may need to install the libglvnd package.** #### Arch Linux - sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl2 sndio jack2 base-devel + sudo pacman -S glew openal cmake vulkan-validation-layers qt6-base qt6-declarative qt6-multimedia qt6-svg sdl3 sndio jack2 base-devel #### Debian & Ubuntu - sudo apt-get install build-essential libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl2-2.0 libsdl2-dev libjack-dev libsndio-dev + sudo apt-get install build-essential libasound2-dev libpulse-dev libopenal-dev libglew-dev zlib1g-dev libedit-dev libvulkan-dev libudev-dev git libevdev-dev libsdl3-3.2 libsdl3-dev libjack-dev libsndio-dev Ubuntu is usually horrendously out of date, and some packages need to be downloaded by hand. This part is for Qt, GCC, Vulkan, and CMake diff --git a/rpcs3/Emu/CMakeLists.txt b/rpcs3/Emu/CMakeLists.txt index 562dd2947666..d142c968cf89 100644 --- a/rpcs3/Emu/CMakeLists.txt +++ b/rpcs3/Emu/CMakeLists.txt @@ -139,8 +139,8 @@ target_sources(rpcs3_emu PRIVATE ) if(USE_FAUDIO) - find_package(SDL2) - if(SDL2_FOUND AND SDL2_VERSION VERSION_GREATER_EQUAL 2.0.9) + find_package(SDL3) + if(SDL3_FOUND AND SDL3_VERSION VERSION_GREATER_EQUAL 3.2.0) target_sources(rpcs3_emu PRIVATE Audio/FAudio/FAudioBackend.cpp Audio/FAudio/faudio_enumerator.cpp @@ -637,7 +637,7 @@ endif() target_link_libraries(rpcs3_emu PUBLIC - 3rdparty::ffmpeg 3rdparty::sdl2 + 3rdparty::ffmpeg 3rdparty::sdl3 3rdparty::opengl 3rdparty::stblib 3rdparty::vulkan 3rdparty::glew 3rdparty::libusb 3rdparty::wolfssl diff --git a/rpcs3/Emu/Io/PadHandler.h b/rpcs3/Emu/Io/PadHandler.h index 792515c5d82e..30d20236ddf6 100644 --- a/rpcs3/Emu/Io/PadHandler.h +++ b/rpcs3/Emu/Io/PadHandler.h @@ -50,6 +50,9 @@ class PadDevice color color_override{}; bool color_override_active{}; + bool enable_player_leds{}; + bool update_player_leds{true}; + std::shared_ptr ahrs; // Used to calculate quaternions from sensor data u64 last_ahrs_update_time_us = 0; // Last ahrs update diff --git a/rpcs3/Emu/Io/pad_config_types.cpp b/rpcs3/Emu/Io/pad_config_types.cpp index ab1503604e0f..e09be8a4e065 100644 --- a/rpcs3/Emu/Io/pad_config_types.cpp +++ b/rpcs3/Emu/Io/pad_config_types.cpp @@ -19,7 +19,7 @@ void fmt_class_string::format(std::string& out, u64 arg) case pad_handler::xinput: return "XInput"; case pad_handler::mm: return "MMJoystick"; #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: return "SDL"; #endif #ifdef HAVE_LIBEVDEV diff --git a/rpcs3/Emu/Io/pad_config_types.h b/rpcs3/Emu/Io/pad_config_types.h index b9b7132ce1ee..36fc8328fad1 100644 --- a/rpcs3/Emu/Io/pad_config_types.h +++ b/rpcs3/Emu/Io/pad_config_types.h @@ -15,7 +15,7 @@ enum class pad_handler xinput, mm, #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 sdl, #endif #ifdef HAVE_LIBEVDEV diff --git a/rpcs3/Input/dualsense_pad_handler.h b/rpcs3/Input/dualsense_pad_handler.h index ac2b2afba87e..981b8a568dcc 100644 --- a/rpcs3/Input/dualsense_pad_handler.h +++ b/rpcs3/Input/dualsense_pad_handler.h @@ -178,7 +178,6 @@ class DualSenseDevice : public HidDevice DualSenseFeatureSet feature_set{DualSenseFeatureSet::Normal}; bool init_lightbar{true}; bool update_lightbar{true}; - bool update_player_leds{true}; bool release_leds{false}; // Controls for lightbar pulse. This seems somewhat hacky for now, as I haven't found out a nicer way. diff --git a/rpcs3/Input/gui_pad_thread.cpp b/rpcs3/Input/gui_pad_thread.cpp index 08d6b4e9ee26..3844d7ba9e15 100644 --- a/rpcs3/Input/gui_pad_thread.cpp +++ b/rpcs3/Input/gui_pad_thread.cpp @@ -10,7 +10,7 @@ #elif HAVE_LIBEVDEV #include "evdev_joystick_handler.h" #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 #include "sdl_pad_handler.h" #endif #include "Emu/Io/PadHandler.h" @@ -225,7 +225,7 @@ std::shared_ptr gui_pad_thread::GetHandler(pad_handler type) case pad_handler::mm: return std::make_shared(); #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: return std::make_shared(); #endif diff --git a/rpcs3/Input/hid_pad_handler.h b/rpcs3/Input/hid_pad_handler.h index 50e7d59e208f..b6dc093983f2 100644 --- a/rpcs3/Input/hid_pad_handler.h +++ b/rpcs3/Input/hid_pad_handler.h @@ -39,7 +39,6 @@ class HidDevice : public PadDevice hid_device* bt_device{nullptr}; // Used in ps move handler #endif std::string path; - bool enable_player_leds{false}; u8 led_delay_on{0}; u8 led_delay_off{0}; u8 battery_level{0}; diff --git a/rpcs3/Input/pad_thread.cpp b/rpcs3/Input/pad_thread.cpp index a2b91dd109a0..4465035c3f56 100644 --- a/rpcs3/Input/pad_thread.cpp +++ b/rpcs3/Input/pad_thread.cpp @@ -12,7 +12,7 @@ #elif HAVE_LIBEVDEV #include "evdev_joystick_handler.h" #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 #include "sdl_pad_handler.h" #endif #include "keyboard_pad_handler.h" @@ -668,7 +668,7 @@ std::shared_ptr pad_thread::GetHandler(pad_handler type) case pad_handler::mm: return std::make_shared(); #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: return std::make_shared(); #endif diff --git a/rpcs3/Input/sdl_pad_handler.cpp b/rpcs3/Input/sdl_pad_handler.cpp index 562085f03713..9ccf396b7ae9 100644 --- a/rpcs3/Input/sdl_pad_handler.cpp +++ b/rpcs3/Input/sdl_pad_handler.cpp @@ -1,4 +1,4 @@ -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 #include "stdafx.h" #include "sdl_pad_handler.h" @@ -46,14 +46,14 @@ struct sdl_instance sdl_log.error("Could not set SDL_HINT_JOYSTICK_THREAD: %s", SDL_GetError()); } - if (SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER) < 0) + if (!SDL_Init(SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD)) { sdl_log.error("Could not initialize! SDL Error: %s", SDL_GetError()); return false; } - SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE); - SDL_LogSetOutputFunction([](void*, int category, SDL_LogPriority priority, const char* message) + SDL_SetLogPriorities(SDL_LOG_PRIORITY_VERBOSE); + SDL_SetLogOutputFunction([](void*, int category, SDL_LogPriority priority, const char* message) { std::string category_name; switch (category) @@ -126,10 +126,10 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl) button_list = { { SDLKeyCodes::None, "" }, - { SDLKeyCodes::A, "A" }, - { SDLKeyCodes::B, "B" }, - { SDLKeyCodes::X, "X" }, - { SDLKeyCodes::Y, "Y" }, + { SDLKeyCodes::South, "South" }, + { SDLKeyCodes::East, "East" }, + { SDLKeyCodes::West, "West" }, + { SDLKeyCodes::North, "North" }, { SDLKeyCodes::Left, "Left" }, { SDLKeyCodes::Right, "Right" }, { SDLKeyCodes::Up, "Up" }, @@ -142,10 +142,10 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl) { SDLKeyCodes::RS, "RS" }, { SDLKeyCodes::Guide, "Guide" }, { SDLKeyCodes::Misc1, "Misc 1" }, - { SDLKeyCodes::Paddle1, "Paddle 1" }, - { SDLKeyCodes::Paddle2, "Paddle 2" }, - { SDLKeyCodes::Paddle3, "Paddle 3" }, - { SDLKeyCodes::Paddle4, "Paddle 4" }, + { SDLKeyCodes::RPaddle1, "R Paddle 1" }, + { SDLKeyCodes::LPaddle1, "L Paddle 1" }, + { SDLKeyCodes::RPaddle2, "R Paddle 2" }, + { SDLKeyCodes::LPaddle2, "L Paddle 2" }, { SDLKeyCodes::Touchpad, "Touchpad" }, { SDLKeyCodes::Touch_L, "Touch Left" }, { SDLKeyCodes::Touch_R, "Touch Right" }, @@ -176,6 +176,7 @@ sdl_pad_handler::sdl_pad_handler() : PadHandlerBase(pad_handler::sdl) b_has_rumble = true; b_has_motion = true; b_has_led = true; + b_has_player_led = true; b_has_rgb = true; b_has_battery = true; b_has_battery_led = true; @@ -192,11 +193,11 @@ sdl_pad_handler::~sdl_pad_handler() for (auto& controller : m_controllers) { - if (controller.second && controller.second->sdl.game_controller) + if (controller.second && controller.second->sdl.gamepad) { set_rumble(controller.second.get(), 0, 0); - SDL_GameControllerClose(controller.second->sdl.game_controller); - controller.second->sdl.game_controller = nullptr; + SDL_CloseGamepad(controller.second->sdl.gamepad); + controller.second->sdl.gamepad = nullptr; } } } @@ -217,10 +218,10 @@ void sdl_pad_handler::init_config(cfg_pad* cfg) cfg->start.def = ::at32(button_list, SDLKeyCodes::Start); cfg->select.def = ::at32(button_list, SDLKeyCodes::Back); cfg->ps.def = ::at32(button_list, SDLKeyCodes::Guide); - cfg->square.def = ::at32(button_list, SDLKeyCodes::X); - cfg->cross.def = ::at32(button_list, SDLKeyCodes::A); - cfg->circle.def = ::at32(button_list, SDLKeyCodes::B); - cfg->triangle.def = ::at32(button_list, SDLKeyCodes::Y); + cfg->square.def = ::at32(button_list, SDLKeyCodes::West); + cfg->cross.def = ::at32(button_list, SDLKeyCodes::South); + cfg->circle.def = ::at32(button_list, SDLKeyCodes::East); + cfg->triangle.def = ::at32(button_list, SDLKeyCodes::North); cfg->left.def = ::at32(button_list, SDLKeyCodes::Left); cfg->down.def = ::at32(button_list, SDLKeyCodes::Down); cfg->right.def = ::at32(button_list, SDLKeyCodes::Right); @@ -282,7 +283,7 @@ bool sdl_pad_handler::Init() if (fs::is_file(db_path)) { - if (SDL_GameControllerAddMappingsFromFile(db_path.c_str()) < 0) + if (SDL_AddGamepadMappingsFromFile(db_path.c_str()) < 0) { sdl_log.error("Could not add mappings from file '%s'! SDL Error: %s", db_path, SDL_GetError()); } @@ -293,16 +294,13 @@ bool sdl_pad_handler::Init() } } - SDL_version version{}; - SDL_GetVersion(&version); - if (const char* revision = SDL_GetRevision(); revision && strlen(revision) > 0) { - sdl_log.notice("Using version: %d.%d.%d (revision='%s')", version.major, version.minor, version.patch, revision); + sdl_log.notice("Using version: %d.%d.%d (revision='%s')", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION, revision); } else { - sdl_log.notice("Using version: %d.%d.%d", version.major, version.minor, version.patch); + sdl_log.notice("Using version: %d.%d.%d", SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_MICRO_VERSION); } m_is_init = true; @@ -321,45 +319,52 @@ void sdl_pad_handler::process() PadHandlerBase::process(); } -SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i) +SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(SDL_JoystickID id) { SDLDevice::sdl_info info{}; - info.game_controller = SDL_GameControllerOpen(i); + info.gamepad = SDL_OpenGamepad(id); - if (!info.game_controller) + if (!info.gamepad) { - sdl_log.error("Could not open device %d! SDL Error: %s", i, SDL_GetError()); + sdl_log.error("Could not open device %d! SDL Error: %s", id, SDL_GetError()); return {}; } - if (const char* name = SDL_GameControllerName(info.game_controller)) + if (const char* name = SDL_GetGamepadName(info.gamepad)) { info.name = name; } - if (const char* path = SDL_GameControllerPath(info.game_controller)) + if (const char* path = SDL_GetGamepadPath(info.gamepad)) { info.path = path; } - if (const char* serial = SDL_GameControllerGetSerial(info.game_controller)) + if (const char* serial = SDL_GetGamepadSerial(info.gamepad)) { info.serial = serial; } - info.joystick = SDL_GameControllerGetJoystick(info.game_controller); - info.type = SDL_GameControllerGetType(info.game_controller); - info.vid = SDL_GameControllerGetVendor(info.game_controller); - info.pid = SDL_GameControllerGetProduct(info.game_controller); - info.product_version= SDL_GameControllerGetProductVersion(info.game_controller); - info.firmware_version = SDL_GameControllerGetFirmwareVersion(info.game_controller); - info.has_led = SDL_GameControllerHasLED(info.game_controller); - info.has_rumble = SDL_GameControllerHasRumble(info.game_controller); - info.has_rumble_triggers = SDL_GameControllerHasRumbleTriggers(info.game_controller); - info.has_accel = SDL_GameControllerHasSensor(info.game_controller, SDL_SENSOR_ACCEL); - info.has_gyro = SDL_GameControllerHasSensor(info.game_controller, SDL_SENSOR_GYRO); - - if (const int num_touchpads = SDL_GameControllerGetNumTouchpads(info.game_controller); num_touchpads > 0) + const SDL_PropertiesID property_id = SDL_GetGamepadProperties(info.gamepad); + if (!property_id) + { + sdl_log.error("Could not get properties of device %d! SDL Error: %s", id, SDL_GetError()); + } + + info.type = SDL_GetGamepadType(info.gamepad); + info.vid = SDL_GetGamepadVendor(info.gamepad); + info.pid = SDL_GetGamepadProduct(info.gamepad); + info.product_version = SDL_GetGamepadProductVersion(info.gamepad); + info.firmware_version = SDL_GetGamepadFirmwareVersion(info.gamepad); + info.has_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_RGB_LED_BOOLEAN); + info.has_mono_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_MONO_LED_BOOLEAN); + info.has_player_led = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_PLAYER_LED_BOOLEAN); + info.has_rumble = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_RUMBLE_BOOLEAN); + info.has_rumble_triggers = SDL_HasProperty(property_id, SDL_PROP_GAMEPAD_CAP_TRIGGER_RUMBLE_BOOLEAN); + info.has_accel = SDL_GamepadHasSensor(info.gamepad, SDL_SENSOR_ACCEL); + info.has_gyro = SDL_GamepadHasSensor(info.gamepad, SDL_SENSOR_GYRO); + + if (const int num_touchpads = SDL_GetNumGamepadTouchpads(info.gamepad); num_touchpads > 0) { info.touchpads.resize(num_touchpads); @@ -368,7 +373,7 @@ SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i) SDLDevice::touchpad& touchpad = ::at32(info.touchpads, i); touchpad.index = i; - if (const int num_fingers = SDL_GameControllerGetNumTouchpadFingers(info.game_controller, touchpad.index); num_fingers > 0) + if (const int num_fingers = SDL_GetNumGamepadTouchpadFingers(info.gamepad, touchpad.index); num_fingers > 0) { touchpad.fingers.resize(num_fingers); @@ -380,52 +385,52 @@ SDLDevice::sdl_info sdl_pad_handler::get_sdl_info(int i) } } - sdl_log.notice("Found game controller %d: type=%d, name='%s', path='%s', serial='%s', vid=0x%x, pid=0x%x, product_version=0x%x, firmware_version=0x%x, has_led=%d, has_rumble=%d, has_rumble_triggers=%d, has_accel=%d, has_gyro=%d", - i, static_cast(info.type), info.name, info.path, info.serial, info.vid, info.pid, info.product_version, info.firmware_version, info.has_led, info.has_rumble, info.has_rumble_triggers, info.has_accel, info.has_gyro); + sdl_log.notice("Found game pad %d: type=%d, name='%s', path='%s', serial='%s', vid=0x%x, pid=0x%x, product_version=0x%x, firmware_version=0x%x, has_led=%d, has_player_led=%d, has_mono_led=%d, has_rumble=%d, has_rumble_triggers=%d, has_accel=%d, has_gyro=%d", + id, static_cast(info.type), info.name, info.path, info.serial, info.vid, info.pid, info.product_version, info.firmware_version, info.has_led, info.has_player_led, info.has_mono_led, info.has_rumble, info.has_rumble_triggers, info.has_accel, info.has_gyro); if (info.has_accel) { - if (SDL_GameControllerSetSensorEnabled(info.game_controller, SDL_SENSOR_ACCEL, SDL_TRUE) != 0 || - !SDL_GameControllerIsSensorEnabled(info.game_controller, SDL_SENSOR_ACCEL)) + if (!SDL_SetGamepadSensorEnabled(info.gamepad, SDL_SENSOR_ACCEL, true) || + !SDL_GamepadSensorEnabled(info.gamepad, SDL_SENSOR_ACCEL)) { - sdl_log.error("Could not activate acceleration sensor of device %d! SDL Error: %s", i, SDL_GetError()); + sdl_log.error("Could not activate acceleration sensor of device %d! SDL Error: %s", id, SDL_GetError()); info.has_accel = false; } else { - info.data_rate_accel = SDL_GameControllerGetSensorDataRate(info.game_controller, SDL_SENSOR_ACCEL); - sdl_log.notice("Acceleration sensor data rate of device %d = %.2f/s", i, info.data_rate_accel); + info.data_rate_accel = SDL_GetGamepadSensorDataRate(info.gamepad, SDL_SENSOR_ACCEL); + sdl_log.notice("Acceleration sensor data rate of device %d = %.2f/s", id, info.data_rate_accel); } } if (info.has_gyro) { - if (SDL_GameControllerSetSensorEnabled(info.game_controller, SDL_SENSOR_GYRO, SDL_TRUE) != 0 || - !SDL_GameControllerIsSensorEnabled(info.game_controller, SDL_SENSOR_GYRO)) + if (!SDL_SetGamepadSensorEnabled(info.gamepad, SDL_SENSOR_GYRO, true) || + !SDL_GamepadSensorEnabled(info.gamepad, SDL_SENSOR_GYRO)) { - sdl_log.error("Could not activate gyro sensor of device %d! SDL Error: %s", i, SDL_GetError()); + sdl_log.error("Could not activate gyro sensor of device %d! SDL Error: %s", id, SDL_GetError()); info.has_gyro = false; } else { - info.data_rate_gyro = SDL_GameControllerGetSensorDataRate(info.game_controller, SDL_SENSOR_GYRO); - sdl_log.notice("Gyro sensor data rate of device %d = %.2f/s", i, info.data_rate_accel); + info.data_rate_gyro = SDL_GetGamepadSensorDataRate(info.gamepad, SDL_SENSOR_GYRO); + sdl_log.notice("Gyro sensor data rate of device %d = %.2f/s", id, info.data_rate_accel); } } - for (int i = 0; i < SDL_CONTROLLER_BUTTON_MAX; i++) + for (int i = 0; i < SDL_GAMEPAD_BUTTON_COUNT; i++) { - const SDL_GameControllerButton button_id = static_cast(i); - if (SDL_GameControllerHasButton(info.game_controller, button_id)) + const SDL_GamepadButton button_id = static_cast(i); + if (SDL_GamepadHasButton(info.gamepad, button_id)) { info.button_ids.insert(button_id); } } - for (int i = 0; i < SDL_CONTROLLER_AXIS_MAX; i++) + for (int i = 0; i < SDL_GAMEPAD_AXIS_COUNT; i++) { - const SDL_GameControllerAxis axis_id = static_cast(i); - if (SDL_GameControllerHasAxis(info.game_controller, axis_id)) + const SDL_GamepadAxis axis_id = static_cast(i); + if (SDL_GamepadHasAxis(info.gamepad, axis_id)) { info.axis_ids.insert(axis_id); } @@ -454,15 +459,11 @@ void sdl_pad_handler::enumerate_devices() if (!m_is_init) return; - for (int i = 0; i < SDL_NumJoysticks(); i++) + int count = 0; + SDL_JoystickID* gamepads = SDL_GetGamepads(&count); + for (int i = 0; i < count && gamepads; i++) { - if (!SDL_IsGameController(i)) - { - sdl_log.error("Joystick %d is not game controller interface compatible! SDL Error: %s", i, SDL_GetError()); - continue; - } - - if (SDLDevice::sdl_info info = get_sdl_info(i); info.game_controller) + if (SDLDevice::sdl_info info = get_sdl_info(gamepads[i]); info.gamepad) { std::shared_ptr dev = std::make_shared(); dev->sdl = std::move(info); @@ -482,16 +483,17 @@ void sdl_pad_handler::enumerate_devices() m_controllers[device_name] = std::move(dev); } } + SDL_free(gamepads); } -std::shared_ptr sdl_pad_handler::get_device_by_game_controller(SDL_GameController* game_controller) const +std::shared_ptr sdl_pad_handler::get_device_by_gamepad(SDL_Gamepad* gamepad) const { - if (!game_controller) + if (!gamepad) return nullptr; - const char* name = SDL_GameControllerName(game_controller); - const char* path = SDL_GameControllerPath(game_controller); - const char* serial = SDL_GameControllerGetSerial(game_controller); + const char* name = SDL_GetGamepadName(gamepad); + const char* path = SDL_GetGamepadPath(gamepad); + const char* serial = SDL_GetGamepadSerial(gamepad); // Try to find a real device for (const auto& controller : m_controllers) @@ -551,17 +553,13 @@ PadHandlerBase::connection sdl_pad_handler::update_connection(const std::shared_ { if (SDLDevice* dev = static_cast(device.get())) { - if (dev->sdl.game_controller) + if (dev->sdl.gamepad) { - if (SDL_GameControllerGetAttached(dev->sdl.game_controller)) + if (SDL_GamepadConnected(dev->sdl.gamepad)) { - if (SDL_HasEvent(SDL_EventType::SDL_CONTROLLERBUTTONDOWN) || - SDL_HasEvent(SDL_EventType::SDL_CONTROLLERBUTTONUP) || - SDL_HasEvent(SDL_EventType::SDL_CONTROLLERAXISMOTION) || - SDL_HasEvent(SDL_EventType::SDL_CONTROLLERSENSORUPDATE) || - SDL_HasEvent(SDL_EventType::SDL_CONTROLLERTOUCHPADUP) || - SDL_HasEvent(SDL_EventType::SDL_CONTROLLERTOUCHPADDOWN) || - SDL_HasEvent(SDL_EventType::SDL_JOYBATTERYUPDATED)) + if (SDL_HasEvents(SDL_EventType::SDL_EVENT_GAMEPAD_AXIS_MOTION, SDL_EventType::SDL_EVENT_GAMEPAD_BUTTON_UP) || + SDL_HasEvents(SDL_EventType::SDL_EVENT_GAMEPAD_TOUCHPAD_DOWN, SDL_EventType::SDL_EVENT_GAMEPAD_SENSOR_UPDATE) || + SDL_HasEvent(SDL_EventType::SDL_EVENT_JOYSTICK_BATTERY_UPDATED)) { return connection::connected; } @@ -569,52 +567,49 @@ PadHandlerBase::connection sdl_pad_handler::update_connection(const std::shared_ return connection::no_data; } - SDL_GameControllerClose(dev->sdl.game_controller); - dev->sdl.game_controller = nullptr; - dev->sdl.joystick = nullptr; + SDL_CloseGamepad(dev->sdl.gamepad); + dev->sdl.gamepad = nullptr; } // Try to reconnect - for (int i = 0; i < SDL_NumJoysticks(); i++) + int count = 0; + SDL_JoystickID* gamepads = SDL_GetGamepads(&count); + for (int i = 0; i < count; i++) { - if (!SDL_IsGameController(i)) - { - continue; - } - - // Get game controller - SDL_GameController* game_controller = SDL_GameControllerOpen(i); - if (!game_controller) + // Get game pad + SDL_Gamepad* gamepad = SDL_OpenGamepad(gamepads[i]); + if (!gamepad) { continue; } // Find out if we already know this controller - std::shared_ptr sdl_device = get_device_by_game_controller(game_controller); + std::shared_ptr sdl_device = get_device_by_gamepad(gamepad); if (!sdl_device) { - // Close the game controller if we don't know it. - SDL_GameControllerClose(game_controller); + // Close the game pad if we don't know it. + SDL_CloseGamepad(gamepad); continue; } // Re-attach the controller if the device matches the current one if (sdl_device.get() == dev) { - if (SDLDevice::sdl_info info = get_sdl_info(i); info.game_controller) + if (SDLDevice::sdl_info info = get_sdl_info(gamepads[i]); info.gamepad) { dev->sdl = std::move(info); } break; } } + SDL_free(gamepads); } return connection::disconnected; } -void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 large_motor, u8 small_motor, s32 r, s32 g, s32 b, bool /*player_led*/, bool battery_led, u32 battery_led_brightness) +void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 large_motor, u8 small_motor, s32 r, s32 g, s32 b, bool player_led, bool battery_led, u32 battery_led_brightness) { std::shared_ptr device = get_device(padId); SDLDevice* dev = static_cast(device.get()); @@ -628,6 +623,9 @@ void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 larg set_rumble(dev, large_motor, small_motor); + dev->update_player_leds = true; + dev->config->player_led_enabled.set(player_led); + if (battery_led) { const u32 combined_color = get_battery_color(dev->sdl.power_level, battery_led_brightness); @@ -642,27 +640,26 @@ void sdl_pad_handler::SetPadData(const std::string& padId, u8 player_id, u8 larg dev->config->colorB.set(b); } - if (dev->sdl.has_led && SDL_GameControllerSetLED(dev->sdl.game_controller, r, g, b) != 0) + if ((dev->sdl.has_led || dev->sdl.has_mono_led) && !SDL_SetGamepadLED(dev->sdl.gamepad, r, g, b)) { sdl_log.error("Could not set LED of device %d! SDL Error: %s", player_id, SDL_GetError()); } + + if (dev->sdl.has_player_led && !SDL_SetGamepadPlayerIndex(dev->sdl.gamepad, player_led ? player_id : -1)) + { + sdl_log.error("Could not set player LED of device %d! SDL Error: %s", player_id, SDL_GetError()); + } } -u32 sdl_pad_handler::get_battery_color(SDL_JoystickPowerLevel power_level, u32 brightness) const +u32 sdl_pad_handler::get_battery_color(int power_level, u32 brightness) const { u32 combined_color{}; - switch (power_level) - { - default: combined_color = 0xFF00; break; - case SDL_JOYSTICK_POWER_UNKNOWN: combined_color = 0xFF00; break; - case SDL_JOYSTICK_POWER_EMPTY: combined_color = 0xFF33; break; - case SDL_JOYSTICK_POWER_LOW: combined_color = 0xFFCC; break; - case SDL_JOYSTICK_POWER_MEDIUM: combined_color = 0x66FF; break; - case SDL_JOYSTICK_POWER_FULL: combined_color = 0x00FF; break; - case SDL_JOYSTICK_POWER_WIRED: combined_color = 0x00FF; break; - case SDL_JOYSTICK_POWER_MAX: combined_color = 0x00FF; break; - } + if (power_level < 20) combined_color = 0xFF00; + else if (power_level < 40) combined_color = 0xFF33; + else if (power_level < 60) combined_color = 0xFFCC; + else if (power_level < 80) combined_color = 0x66FF; + else combined_color = 0x00FF; const u32 red = (combined_color >> 8) * brightness / 100; const u32 green = (combined_color & 0xff) * brightness / 100; @@ -676,20 +673,16 @@ u32 sdl_pad_handler::get_battery_level(const std::string& padId) if (!dev) return 0; - if (dev->sdl.joystick) + if (dev->sdl.gamepad) { - dev->sdl.power_level = SDL_JoystickCurrentPowerLevel(dev->sdl.joystick); - - switch (dev->sdl.power_level) + const SDL_PowerState power_state = SDL_GetGamepadPowerInfo(dev->sdl.gamepad, &dev->sdl.power_level); + switch (power_state) { - case SDL_JOYSTICK_POWER_UNKNOWN: return 0; - case SDL_JOYSTICK_POWER_EMPTY: return 5; - case SDL_JOYSTICK_POWER_LOW: return 20; - case SDL_JOYSTICK_POWER_MEDIUM: return 70; - case SDL_JOYSTICK_POWER_FULL: return 100; - case SDL_JOYSTICK_POWER_WIRED: return 100; - case SDL_JOYSTICK_POWER_MAX: return 100; - default: return 0; + case SDL_PowerState::SDL_POWERSTATE_ERROR: + case SDL_PowerState::SDL_POWERSTATE_UNKNOWN: + return 0; + default: + return std::clamp(dev->sdl.power_level, 0, 100); } } @@ -700,24 +693,28 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding) { const auto& pad = binding.pad; SDLDevice* dev = static_cast(binding.device.get()); - if (!dev || !dev->sdl.game_controller || !pad) + if (!dev || !dev->sdl.gamepad || !pad) return; - if (dev->sdl.joystick) + if (dev->sdl.gamepad) { - dev->sdl.power_level = SDL_JoystickCurrentPowerLevel(dev->sdl.joystick); - pad->m_cable_state = dev->sdl.power_level == SDL_JOYSTICK_POWER_WIRED; - - switch (dev->sdl.power_level) + const SDL_PowerState power_state = SDL_GetGamepadPowerInfo(dev->sdl.gamepad, &dev->sdl.power_level); + switch (power_state) { - case SDL_JOYSTICK_POWER_UNKNOWN: pad->m_battery_level = 0; break; - case SDL_JOYSTICK_POWER_EMPTY: pad->m_battery_level = 5; break; - case SDL_JOYSTICK_POWER_LOW: pad->m_battery_level = 20; break; - case SDL_JOYSTICK_POWER_MEDIUM: pad->m_battery_level = 70; break; - case SDL_JOYSTICK_POWER_FULL: pad->m_battery_level = 100; break; - case SDL_JOYSTICK_POWER_WIRED: pad->m_battery_level = 100; break; - case SDL_JOYSTICK_POWER_MAX: pad->m_battery_level = 100; break; - default: pad->m_battery_level = 0; break; + case SDL_PowerState::SDL_POWERSTATE_ON_BATTERY: + pad->m_battery_level = std::clamp(dev->sdl.power_level, 0, 100); + pad->m_cable_state = 0; + break; + case SDL_PowerState::SDL_POWERSTATE_NO_BATTERY: + case SDL_PowerState::SDL_POWERSTATE_CHARGING: + case SDL_PowerState::SDL_POWERSTATE_CHARGED: + pad->m_battery_level = std::clamp(dev->sdl.power_level, 0, 100); + pad->m_cable_state = 1; + break; + default: + pad->m_battery_level = 0; + pad->m_cable_state = 0; + break; } } else @@ -728,7 +725,7 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding) if (dev->sdl.has_accel) { - if (SDL_GameControllerGetSensorData(dev->sdl.game_controller, SDL_SENSOR_ACCEL, dev->values_accel.data(), 3) != 0) + if (!SDL_GetGamepadSensorData(dev->sdl.gamepad, SDL_SENSOR_ACCEL, dev->values_accel.data(), 3)) { sdl_log.error("Could not get acceleration sensor data of device %d! SDL Error: %s", dev->player_id, SDL_GetError()); } @@ -747,7 +744,7 @@ void sdl_pad_handler::get_extended_info(const pad_ensemble& binding) if (dev->sdl.has_gyro) { - if (SDL_GameControllerGetSensorData(dev->sdl.game_controller, SDL_SENSOR_GYRO, dev->values_gyro.data(), 3) != 0) + if (!SDL_GetGamepadSensorData(dev->sdl.gamepad, SDL_SENSOR_GYRO, dev->values_gyro.data(), 3)) { sdl_log.error("Could not get gyro sensor data of device %d! SDL Error: %s", dev->player_id, SDL_GetError()); } @@ -823,7 +820,7 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding) } } - if (dev->sdl.has_led) + if (dev->sdl.has_led || dev->sdl.has_mono_led) { // Use LEDs to indicate battery level if (cfg->led_battery_indicator) @@ -879,7 +876,7 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding) const u8 g = dev->led_is_on ? cfg->colorG : 0; const u8 b = dev->led_is_on ? cfg->colorB : 0; - if (SDL_GameControllerSetLED(dev->sdl.game_controller, r, g, b) != 0) + if (!SDL_SetGamepadLED(dev->sdl.gamepad, r, g, b)) { sdl_log.error("Could not set LED of device %d! SDL Error: %s", dev->player_id, SDL_GetError()); } @@ -887,19 +884,30 @@ void sdl_pad_handler::apply_pad_data(const pad_ensemble& binding) dev->led_needs_update = false; } } + + if (dev->sdl.has_player_led && (dev->update_player_leds || dev->enable_player_leds != cfg->player_led_enabled.get())) + { + dev->enable_player_leds = cfg->player_led_enabled.get(); + dev->update_player_leds = false; + + if (!SDL_SetGamepadPlayerIndex(dev->sdl.gamepad, dev->enable_player_leds ? dev->player_id : -1)) + { + sdl_log.error("Could not set player LED of device %d! SDL Error: %s", dev->player_id, SDL_GetError()); + } + } } void sdl_pad_handler::set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small) { - if (!dev || !dev->sdl.game_controller) return; + if (!dev || !dev->sdl.gamepad) return; constexpr u32 rumble_duration_ms = static_cast((min_output_interval + 100ms).count()); // Some number higher than the min_output_interval. if (dev->sdl.has_rumble) { - if (SDL_GameControllerRumble(dev->sdl.game_controller, speed_large * 257, speed_small * 257, rumble_duration_ms) != 0) + if (!SDL_RumbleGamepad(dev->sdl.gamepad, speed_large * 257, speed_small * 257, rumble_duration_ms)) { - sdl_log.error("Unable to play game controller rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError()); + sdl_log.error("Unable to play game pad rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError()); } } @@ -909,9 +917,9 @@ void sdl_pad_handler::set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small) if (false && dev->sdl.has_rumble_triggers) { // Only the large motor shall control both triggers. It wouldn't make sense to differentiate here. - if (SDL_GameControllerRumbleTriggers(dev->sdl.game_controller, speed_large * 257, speed_large * 257, rumble_duration_ms) != 0) + if (!SDL_RumbleGamepadTriggers(dev->sdl.gamepad, speed_large * 257, speed_large * 257, rumble_duration_ms)) { - sdl_log.error("Unable to play game controller trigger rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError()); + sdl_log.error("Unable to play game pad trigger rumble of player %d! SDL Error: %s", dev->player_id, SDL_GetError()); } } } @@ -972,43 +980,43 @@ std::unordered_map sdl_pad_handler::get_button_values(const std::share { std::unordered_map values; SDLDevice* dev = static_cast(device.get()); - if (!dev || !dev->sdl.game_controller) + if (!dev || !dev->sdl.gamepad) return values; - for (SDL_GameControllerButton button_id : dev->sdl.button_ids) + for (SDL_GamepadButton button_id : dev->sdl.button_ids) { - const u8 value = SDL_GameControllerGetButton(dev->sdl.game_controller, button_id); + const u8 value = SDL_GetGamepadButton(dev->sdl.gamepad, button_id); const SDLKeyCodes key_code = get_button_code(button_id); // TODO: SDL does not support DS3 button intensity in the current version values[key_code] = value ? 255 : 0; } - for (SDL_GameControllerAxis axis_id : dev->sdl.axis_ids) + for (SDL_GamepadAxis axis_id : dev->sdl.axis_ids) { - const s16 value = SDL_GameControllerGetAxis(dev->sdl.game_controller, axis_id); + const s16 value = SDL_GetGamepadAxis(dev->sdl.gamepad, axis_id); switch (axis_id) { - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_TRIGGERLEFT: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFT_TRIGGER: values[SDLKeyCodes::LT] = std::max(0, value); break; - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_TRIGGERRIGHT: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHT_TRIGGER: values[SDLKeyCodes::RT] = std::max(0, value); break; - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTX: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFTX: values[SDLKeyCodes::LSXNeg] = value < 0 ? std::abs(value) - 1 : 0; values[SDLKeyCodes::LSXPos] = value > 0 ? value : 0; break; - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_LEFTY: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_LEFTY: values[SDLKeyCodes::LSYNeg] = value > 0 ? value : 0; values[SDLKeyCodes::LSYPos] = value < 0 ? std::abs(value) - 1 : 0; break; - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_RIGHTX: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHTX: values[SDLKeyCodes::RSXNeg] = value < 0 ? std::abs(value) - 1 : 0; values[SDLKeyCodes::RSXPos] = value > 0 ? value : 0; break; - case SDL_GameControllerAxis::SDL_CONTROLLER_AXIS_RIGHTY: + case SDL_GamepadAxis::SDL_GAMEPAD_AXIS_RIGHTY: values[SDLKeyCodes::RSYNeg] = value > 0 ? value : 0; values[SDLKeyCodes::RSYPos] = value < 0 ? std::abs(value) - 1 : 0; break; @@ -1021,20 +1029,20 @@ std::unordered_map sdl_pad_handler::get_button_values(const std::share { for (const SDLDevice::touch_point& finger : touchpad.fingers) { - u8 state = 0; // 1 means the finger is touching the pad + bool down = 0; // true means the finger is touching the pad f32 x = 0.0f; // 0 = left, 1 = right f32 y = 0.0f; // 0 = top, 1 = bottom f32 pressure = 0.0f; // In the current SDL version the pressure is always 1 if the state is 1 - if (SDL_GameControllerGetTouchpadFinger(dev->sdl.game_controller, touchpad.index, finger.index, &state, &x, &y, &pressure) != 0) + if (!SDL_GetGamepadTouchpadFinger(dev->sdl.gamepad, touchpad.index, finger.index, &down, &x, &y, &pressure)) { sdl_log.error("Could not get touchpad %d finger %d data of device %d! SDL Error: %s", touchpad.index, finger.index, dev->player_id, SDL_GetError()); } else { - sdl_log.trace("touchpad=%d, finger=%d, state=%d, x=%f, y=%f, pressure=%f", touchpad.index, finger.index, state, x, y, pressure); + sdl_log.trace("touchpad=%d, finger=%d, state=%d, x=%f, y=%f, pressure=%f", touchpad.index, finger.index, down, x, y, pressure); - if (state == 0) + if (!down) { continue; } @@ -1066,9 +1074,9 @@ pad_preview_values sdl_pad_handler::get_preview_values(const std::unordered_map< }; } -std::string sdl_pad_handler::button_to_string(SDL_GameControllerButton button) +std::string sdl_pad_handler::button_to_string(SDL_GamepadButton button) { - if (const char* name = SDL_GameControllerGetStringForButton(button)) + if (const char* name = SDL_GetGamepadStringForButton(button)) { return name; } @@ -1076,9 +1084,9 @@ std::string sdl_pad_handler::button_to_string(SDL_GameControllerButton button) return {}; } -std::string sdl_pad_handler::axis_to_string(SDL_GameControllerAxis axis) +std::string sdl_pad_handler::axis_to_string(SDL_GamepadAxis axis) { - if (const char* name = SDL_GameControllerGetStringForAxis(axis)) + if (const char* name = SDL_GetGamepadStringForAxis(axis)) { return name; } @@ -1086,33 +1094,33 @@ std::string sdl_pad_handler::axis_to_string(SDL_GameControllerAxis axis) return {}; } -sdl_pad_handler::SDLKeyCodes sdl_pad_handler::get_button_code(SDL_GameControllerButton button) +sdl_pad_handler::SDLKeyCodes sdl_pad_handler::get_button_code(SDL_GamepadButton button) { switch (button) { default: - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_INVALID: return SDLKeyCodes::None; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_A: return SDLKeyCodes::A; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_B: return SDLKeyCodes::B; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_X: return SDLKeyCodes::X; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_Y: return SDLKeyCodes::Y; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_LEFT: return SDLKeyCodes::Left; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_RIGHT: return SDLKeyCodes::Right; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_UP: return SDLKeyCodes::Up; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_DPAD_DOWN: return SDLKeyCodes::Down; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_LEFTSHOULDER: return SDLKeyCodes::LB; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_RIGHTSHOULDER: return SDLKeyCodes::RB; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_BACK: return SDLKeyCodes::Back; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_START: return SDLKeyCodes::Start; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_LEFTSTICK: return SDLKeyCodes::LS; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_RIGHTSTICK: return SDLKeyCodes::RS; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_GUIDE: return SDLKeyCodes::Guide; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_MISC1: return SDLKeyCodes::Misc1; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE1: return SDLKeyCodes::Paddle1; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE2: return SDLKeyCodes::Paddle2; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE3: return SDLKeyCodes::Paddle3; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_PADDLE4: return SDLKeyCodes::Paddle4; - case SDL_GameControllerButton::SDL_CONTROLLER_BUTTON_TOUCHPAD: return SDLKeyCodes::Touchpad; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_INVALID: return SDLKeyCodes::None; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_SOUTH: return SDLKeyCodes::South; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_EAST: return SDLKeyCodes::East; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_WEST: return SDLKeyCodes::West; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_NORTH: return SDLKeyCodes::North; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_LEFT: return SDLKeyCodes::Left; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_RIGHT: return SDLKeyCodes::Right; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_UP: return SDLKeyCodes::Up; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_DPAD_DOWN: return SDLKeyCodes::Down; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_SHOULDER: return SDLKeyCodes::LB; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER: return SDLKeyCodes::RB; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_BACK: return SDLKeyCodes::Back; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_START: return SDLKeyCodes::Start; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_STICK: return SDLKeyCodes::LS; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_STICK: return SDLKeyCodes::RS; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_GUIDE: return SDLKeyCodes::Guide; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_MISC1: return SDLKeyCodes::Misc1; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1: return SDLKeyCodes::RPaddle1; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_PADDLE1: return SDLKeyCodes::LPaddle1; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2: return SDLKeyCodes::RPaddle2; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_LEFT_PADDLE2: return SDLKeyCodes::LPaddle2; + case SDL_GamepadButton::SDL_GAMEPAD_BUTTON_TOUCHPAD: return SDLKeyCodes::Touchpad; } } diff --git a/rpcs3/Input/sdl_pad_handler.h b/rpcs3/Input/sdl_pad_handler.h index a375f8a07fd4..b866b2353f87 100644 --- a/rpcs3/Input/sdl_pad_handler.h +++ b/rpcs3/Input/sdl_pad_handler.h @@ -1,9 +1,9 @@ #pragma once -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 #include "Emu/Io/PadHandler.h" -#include "SDL.h" +#include "SDL3/SDL.h" class SDLDevice : public PadDevice { @@ -24,11 +24,10 @@ class SDLDevice : public PadDevice struct sdl_info { - SDL_GameController* game_controller = nullptr; - SDL_GameControllerType type = SDL_GameControllerType::SDL_CONTROLLER_TYPE_UNKNOWN; - SDL_Joystick* joystick = nullptr; - SDL_JoystickPowerLevel power_level = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN; - SDL_JoystickPowerLevel last_power_level = SDL_JoystickPowerLevel::SDL_JOYSTICK_POWER_UNKNOWN; + SDL_Gamepad* gamepad = nullptr; + SDL_GamepadType type = SDL_GamepadType::SDL_GAMEPAD_TYPE_UNKNOWN; + int power_level = 0; + int last_power_level = 0; std::string name; std::string path; @@ -41,6 +40,8 @@ class SDLDevice : public PadDevice bool is_virtual_device = false; bool has_led = false; + bool has_mono_led = false; + bool has_player_led = false; bool has_rumble = false; bool has_rumble_triggers = false; bool has_accel = false; @@ -49,8 +50,8 @@ class SDLDevice : public PadDevice f32 data_rate_accel = 0.0f; f32 data_rate_gyro = 0.0f; - std::set button_ids; - std::set axis_ids; + std::set button_ids; + std::set axis_ids; std::vector touchpads; }; @@ -72,10 +73,10 @@ class sdl_pad_handler : public PadHandlerBase { None = 0, - A, - B, - X, - Y, + South, + East, + West, + North, Left, Right, Up, @@ -88,10 +89,10 @@ class sdl_pad_handler : public PadHandlerBase Back, Guide, Misc1, - Paddle1, - Paddle2, - Paddle3, - Paddle4, + RPaddle1, + LPaddle1, + RPaddle2, + LPaddle2, Touchpad, Touch_L, @@ -116,7 +117,7 @@ class sdl_pad_handler : public PadHandlerBase sdl_pad_handler(); ~sdl_pad_handler(); - SDLDevice::sdl_info get_sdl_info(int i); + SDLDevice::sdl_info get_sdl_info(SDL_JoystickID id); bool Init() override; void process() override; @@ -132,7 +133,7 @@ class sdl_pad_handler : public PadHandlerBase std::map> m_controllers; void enumerate_devices(); - std::shared_ptr get_device_by_game_controller(SDL_GameController* game_controller) const; + std::shared_ptr get_device_by_gamepad(SDL_Gamepad* gamepad) const; std::shared_ptr get_device(const std::string& device) override; PadHandlerBase::connection update_connection(const std::shared_ptr& device) override; @@ -146,13 +147,13 @@ class sdl_pad_handler : public PadHandlerBase std::unordered_map get_button_values(const std::shared_ptr& device) override; pad_preview_values get_preview_values(const std::unordered_map& data) override; - u32 get_battery_color(SDL_JoystickPowerLevel power_level, u32 brightness) const; + u32 get_battery_color(int power_level, u32 brightness) const; void set_rumble(SDLDevice* dev, u8 speed_large, u8 speed_small); - static std::string button_to_string(SDL_GameControllerButton button); - static std::string axis_to_string(SDL_GameControllerAxis axis); + static std::string button_to_string(SDL_GamepadButton button); + static std::string axis_to_string(SDL_GamepadAxis axis); - static SDLKeyCodes get_button_code(SDL_GameControllerButton button); + static SDLKeyCodes get_button_code(SDL_GamepadButton button); }; #endif diff --git a/rpcs3/emucore.vcxproj b/rpcs3/emucore.vcxproj index b9a3b59bf001..d5d9f992b2bd 100644 --- a/rpcs3/emucore.vcxproj +++ b/rpcs3/emucore.vcxproj @@ -42,8 +42,8 @@ Use ..\3rdparty\miniupnp\miniupnp\miniupnpc\include;..\3rdparty\wolfssl\wolfssl;..\3rdparty\flatbuffers\include;..\3rdparty\libusb\libusb\libusb;..\3rdparty\yaml-cpp\yaml-cpp\include;..\3rdparty\SoundTouch\soundtouch\include;..\3rdparty\rtmidi\rtmidi;..\3rdparty\zlib\zlib;$(SolutionDir)build\lib\$(Configuration)-$(Platform)\llvm_build\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm\include;$(SolutionDir)build\lib_ext\$(Configuration)-$(Platform)\llvm_build\include;$(VULKAN_SDK)\Include;..\3rdparty\zstd\zstd\lib;$(SolutionDir)3rdparty\fusion\fusion\Fusion;$(SolutionDir)3rdparty\wolfssl\extra\win32 MaxSpeed - AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL2;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions) - AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL2;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions) + AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL3;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions) + AL_LIBTYPE_STATIC;MINIUPNP_STATICLIB;HAVE_VULKAN;HAVE_SDL3;ZLIB_CONST;WOLFSSL_USER_SETTINGS;%(PreprocessorDefinitions) %(AdditionalModuleDependencies) %(AdditionalModuleDependencies) diff --git a/rpcs3/rpcs3.vcxproj b/rpcs3/rpcs3.vcxproj index 9a7e529fdd56..f70d2f7aad7b 100644 --- a/rpcs3/rpcs3.vcxproj +++ b/rpcs3/rpcs3.vcxproj @@ -79,7 +79,7 @@ 4577;4467;4281;%(DisableSpecificWarnings) $(IntDir) MaxSpeed - _WINDOWS;UNICODE;WIN32;WIN64;WIN32_LEAN_AND_MEAN;HAVE_VULKAN;HAVE_OPENCV;CV_IGNORE_DEBUG_BUILD_GUARD;MINIUPNP_STATICLIB;ZLIB_CONST;AL_LIBTYPE_STATIC;WOLFSSL_USER_SETTINGS;HAVE_SDL2;WITH_DISCORD_RPC;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;NDEBUG;QT_WINEXTRAS_LIB;QT_CONCURRENT_LIB;QT_MULTIMEDIA_LIB;QT_MULTIMEDIAWIDGETS_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;WIN32;WIN64;WIN32_LEAN_AND_MEAN;HAVE_VULKAN;HAVE_OPENCV;CV_IGNORE_DEBUG_BUILD_GUARD;MINIUPNP_STATICLIB;ZLIB_CONST;AL_LIBTYPE_STATIC;WOLFSSL_USER_SETTINGS;HAVE_SDL3;WITH_DISCORD_RPC;QT_NO_DEBUG;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;NDEBUG;QT_WINEXTRAS_LIB;QT_CONCURRENT_LIB;QT_MULTIMEDIA_LIB;QT_MULTIMEDIAWIDGETS_LIB;QT_SVG_LIB;%(PreprocessorDefinitions) false $(IntDir)vc$(PlatformToolsetVersion).pdb true @@ -1138,7 +1138,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1290,7 +1290,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1300,7 +1300,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\rtmidi\rtmidi" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1320,7 +1320,7 @@ "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\debug" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" $(QTDIR)\bin\moc.exe;%(FullPath) $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1346,7 +1346,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1357,7 +1357,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" $(QTDIR)\bin\moc.exe;%(FullPath) @@ -1367,7 +1367,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1556,7 +1556,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1649,7 +1649,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" @@ -1682,7 +1682,7 @@ $(QTDIR)\bin\moc.exe;%(FullPath) Moc%27ing %(Identity)... .\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp - "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL2 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" + "$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\QTGeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" -D_WINDOWS -DUNICODE -DWIN32 -DWIN64 -DWIN32_LEAN_AND_MEAN -DHAVE_VULKAN -DMINIUPNP_STATICLIB -DHAVE_SDL3 -DWITH_DISCORD_RPC -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG -DQT_WINEXTRAS_LIB -DQT_CONCURRENT_LIB -DQT_MULTIMEDIA_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_SVG_LIB -D%(PreprocessorDefinitions) "-I.\..\3rdparty\SoundTouch\soundtouch\include" "-I.\..\3rdparty\cubeb\extra" "-I.\..\3rdparty\cubeb\cubeb\include" "-I.\..\3rdparty\flatbuffers\include" "-I.\..\3rdparty\wolfssl\wolfssl" "-I.\..\3rdparty\curl\curl\include" "-I.\..\3rdparty\libusb\libusb\libusb" "-I$(VULKAN_SDK)\Include" "-I.\..\3rdparty\libsdl-org\SDL\include" "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtWidgets" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtANGLE" "-I$(QTDIR)\include\QtCore" "-I.\release" "-I$(QTDIR)\mkspecs\win32-msvc2015" "-I.\QTGeneratedFiles\$(ConfigurationName)" "-I.\QTGeneratedFiles" "-I$(QTDIR)\include\QtWinExtras" "-I$(QTDIR)\include\QtConcurrent" "-I$(QTDIR)\include\QtMultimedia" "-I$(QTDIR)\include\QtMultimediaWidgets" "-I$(QTDIR)\include\QtSvg" diff --git a/rpcs3/rpcs3qt/pad_settings_dialog.cpp b/rpcs3/rpcs3qt/pad_settings_dialog.cpp index c20510c9293d..1522e89858e9 100644 --- a/rpcs3/rpcs3qt/pad_settings_dialog.cpp +++ b/rpcs3/rpcs3qt/pad_settings_dialog.cpp @@ -1436,7 +1436,7 @@ void pad_settings_dialog::ChangeHandler() case pad_handler::ds4: m_description = tooltips.gamepad_settings.ds4_other; break; case pad_handler::dualsense: m_description = tooltips.gamepad_settings.dualsense_other; break; #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: m_description = tooltips.gamepad_settings.sdl; break; #endif #ifdef HAVE_LIBEVDEV @@ -1976,7 +1976,7 @@ QString pad_settings_dialog::GetLocalizedPadHandler(const QString& original, pad case pad_handler::xinput: return tr("XInput"); case pad_handler::mm: return tr("MMJoystick"); #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: return tr("SDL"); #endif #ifdef HAVE_LIBEVDEV @@ -2001,7 +2001,7 @@ QString pad_settings_dialog::GetLocalizedPadName(pad_handler handler, const QStr case pad_handler::xinput: return tr("XInput Pad #%0").arg(index); case pad_handler::mm: return tr("Joystick #%0").arg(index); #endif -#ifdef HAVE_SDL2 +#ifdef HAVE_SDL3 case pad_handler::sdl: break; // Localization not feasible. Names differ for each device. #endif #ifdef HAVE_LIBEVDEV diff --git a/rpcs3/rpcs3qt/settings_dialog.cpp b/rpcs3/rpcs3qt/settings_dialog.cpp index 85af632ff255..d4285911a8b7 100644 --- a/rpcs3/rpcs3qt/settings_dialog.cpp +++ b/rpcs3/rpcs3qt/settings_dialog.cpp @@ -1285,7 +1285,7 @@ settings_dialog::settings_dialog(std::shared_ptr gui_settings, std m_emu_settings->EnhanceCheckBox(ui->lockOverlayInputToPlayerOne, emu_settings_type::LockOvlIptToP1); SubscribeTooltip(ui->lockOverlayInputToPlayerOne, tooltips.settings.lock_overlay_input_to_player_one); -#if HAVE_SDL2 +#if HAVE_SDL3 m_emu_settings->EnhanceCheckBox(ui->loadSdlMappings, emu_settings_type::SDLMappings); SubscribeTooltip(ui->loadSdlMappings, tooltips.settings.sdl_mappings); #else