Compare commits
53
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
92fe3b19c8 | ||
|
|
30e2b03a65 | ||
|
|
f8943854fd | ||
|
|
325465935d | ||
|
|
1cdd37b32c | ||
|
|
499bff9c3a | ||
|
|
bd06e43b87 | ||
|
|
72e5620202 | ||
|
|
fbb9646806 | ||
|
|
4b91f0793c | ||
|
|
6243a80b3f | ||
|
|
e0b0a98c8e | ||
|
|
785eac863b | ||
|
|
ab8659922d | ||
|
|
d48f9c4af4 | ||
|
|
5cc0644aa0 | ||
|
|
91accc391d | ||
|
|
3ee20388c5 | ||
|
|
2449510673 | ||
|
|
2c07ed320e | ||
|
|
607f37dafd | ||
|
|
acc2e040ce | ||
|
|
faa9bbdc8e | ||
|
|
cf6c760cd3 | ||
|
|
e49349ac0c | ||
|
|
1e5db996ff | ||
|
|
793a0681a9 | ||
|
|
825ffaa168 | ||
|
|
9ad6a36b7b | ||
|
|
c3b53c72c7 | ||
|
|
0800d81fb4 | ||
|
|
c27219695a | ||
|
|
9dcfc308ef | ||
|
|
77b3a6afaf | ||
|
|
dd42795131 | ||
|
|
fb1497566c | ||
|
|
cc6c0fe230 | ||
|
|
f9a46a319b | ||
|
|
48a0592a45 | ||
|
|
1c74a8b5ae | ||
|
|
3d18043005 | ||
|
|
6e1e00701e | ||
|
|
5570d846ea | ||
|
|
f5dcb8f7ad | ||
|
|
f6f1b09b69 | ||
|
|
bf540985aa | ||
|
|
c39f86c28a | ||
|
|
b5da8ad00d | ||
|
|
f62b86263a | ||
|
|
3449c734d5 | ||
|
|
3f29d985fe | ||
|
|
2f4a7bbced | ||
|
|
a0522e4c21 |
No files matched your search
@@ -64,6 +64,7 @@ jobs:
|
|||||||
if: runner.os == 'macOS'
|
if: runner.os == 'macOS'
|
||||||
run: |
|
run: |
|
||||||
brew install \
|
brew install \
|
||||||
|
autoconf \
|
||||||
ninja \
|
ninja \
|
||||||
pkg-config
|
pkg-config
|
||||||
|
|
||||||
|
|||||||
+5
-23
@@ -87,7 +87,7 @@ endif()
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
set(SDL_MAJOR_VERSION 2)
|
set(SDL_MAJOR_VERSION 2)
|
||||||
set(SDL_MINOR_VERSION 30)
|
set(SDL_MINOR_VERSION 30)
|
||||||
set(SDL_MICRO_VERSION 2)
|
set(SDL_MICRO_VERSION 4)
|
||||||
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
|
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
|
||||||
|
|
||||||
# Set defaults preventing destination file conflicts
|
# Set defaults preventing destination file conflicts
|
||||||
@@ -241,7 +241,7 @@ endif()
|
|||||||
if(UNIX OR MINGW OR MSYS OR (USE_CLANG AND NOT WINDOWS) OR VITA OR PSP OR PS2 OR N3DS)
|
if(UNIX OR MINGW OR MSYS OR (USE_CLANG AND NOT WINDOWS) OR VITA OR PSP OR PS2 OR N3DS)
|
||||||
set(OPT_DEF_LIBC ON)
|
set(OPT_DEF_LIBC ON)
|
||||||
endif()
|
endif()
|
||||||
if(WINDOWS OR IOS OR TVOS)
|
if(WINDOWS OR DARWIN OR MACOSX OR IOS OR TVOS)
|
||||||
set(SDL_SYSTEM_ICONV_DEFAULT OFF)
|
set(SDL_SYSTEM_ICONV_DEFAULT OFF)
|
||||||
else()
|
else()
|
||||||
set(SDL_SYSTEM_ICONV_DEFAULT ON)
|
set(SDL_SYSTEM_ICONV_DEFAULT ON)
|
||||||
@@ -926,22 +926,6 @@ if(SDL_ASSEMBLY)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(SDL_LASX)
|
|
||||||
cmake_push_check_state()
|
|
||||||
set(CMAKE_REQUIRED_FLAGS "-mlasx")
|
|
||||||
check_c_source_compiles("
|
|
||||||
#ifndef __loongarch_asx
|
|
||||||
#error Assembler CPP flag not enabled
|
|
||||||
#endif
|
|
||||||
int main(int argc, char **argv) { return 0; }" CPU_SUPPORTS_LASX)
|
|
||||||
check_include_file("lasxintrin.h" HAVE_LASXINTRIN_H)
|
|
||||||
cmake_pop_check_state()
|
|
||||||
if(CPU_SUPPORTS_LASX AND HAVE_LASXINTRIN_H)
|
|
||||||
list(APPEND EXTRA_CFLAGS "-mlasx")
|
|
||||||
set(HAVE_LASX TRUE)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(SDL_ARMSIMD)
|
if(SDL_ARMSIMD)
|
||||||
set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
set(ORIG_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
|
||||||
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
|
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -x assembler-with-cpp")
|
||||||
@@ -1826,13 +1810,11 @@ elseif(WINDOWS)
|
|||||||
check_include_file(d3d9.h HAVE_D3D_H)
|
check_include_file(d3d9.h HAVE_D3D_H)
|
||||||
check_include_file(d3d11_1.h HAVE_D3D11_H)
|
check_include_file(d3d11_1.h HAVE_D3D11_H)
|
||||||
check_c_source_compiles("
|
check_c_source_compiles("
|
||||||
#include <winsdkver.h>
|
|
||||||
#include <sdkddkver.h>
|
|
||||||
#include <d3d12.h>
|
#include <d3d12.h>
|
||||||
|
#include <d3d12sdklayers.h>
|
||||||
ID3D12Device1 *device;
|
ID3D12Device1 *device;
|
||||||
#if WDK_NTDDI_VERSION > 0x0A000008
|
int main(int argc, char **argv) {return 0; }
|
||||||
int main(int argc, char **argv) { return 0; }
|
" HAVE_D3D12_H)
|
||||||
#endif" HAVE_D3D12_H)
|
|
||||||
check_include_file(ddraw.h HAVE_DDRAW_H)
|
check_include_file(ddraw.h HAVE_DDRAW_H)
|
||||||
check_include_file(dsound.h HAVE_DSOUND_H)
|
check_include_file(dsound.h HAVE_DSOUND_H)
|
||||||
check_include_file(dinput.h HAVE_DINPUT_H)
|
check_include_file(dinput.h HAVE_DINPUT_H)
|
||||||
|
|||||||
+1
-1
@@ -52,7 +52,7 @@ WAYLAND_SCANNER_CODE_MODE = @WAYLAND_SCANNER_CODE_MODE@
|
|||||||
|
|
||||||
INSTALL_SDL2_CONFIG = @INSTALL_SDL2_CONFIG@
|
INSTALL_SDL2_CONFIG = @INSTALL_SDL2_CONFIG@
|
||||||
|
|
||||||
SRC_DIST = *.md *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac docs include Makefile.* mingw sdl2-config.cmake.in sdl2-config-version.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in SDL2Config.cmake.in src test VisualC VisualC-WinRT Xcode Xcode-iOS wayland-protocols
|
SRC_DIST = *.md *.txt acinclude Android.mk autogen.sh android-project build-scripts cmake cmake_uninstall.cmake.in configure configure.ac docs include Makefile.* mingw sdl2-config.cmake.in sdl2-config-version.cmake.in sdl2-config.in sdl2.m4 sdl2.pc.in SDL2.spec.in SDL2Config.cmake.in src test VisualC VisualC-GDK VisualC-WinRT Xcode Xcode-iOS wayland-protocols
|
||||||
GEN_DIST = SDL2.spec
|
GEN_DIST = SDL2.spec
|
||||||
|
|
||||||
ifneq ($V,1)
|
ifneq ($V,1)
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@
|
|||||||
LIBNAME = SDL2
|
LIBNAME = SDL2
|
||||||
MAJOR_VERSION = 2
|
MAJOR_VERSION = 2
|
||||||
MINOR_VERSION = 30
|
MINOR_VERSION = 30
|
||||||
MICRO_VERSION = 2
|
MICRO_VERSION = 4
|
||||||
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
||||||
DESCRIPTION = Simple DirectMedia Layer 2
|
DESCRIPTION = Simple DirectMedia Layer 2
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -6,7 +6,7 @@
|
|||||||
LIBNAME = SDL2
|
LIBNAME = SDL2
|
||||||
MAJOR_VERSION = 2
|
MAJOR_VERSION = 2
|
||||||
MINOR_VERSION = 30
|
MINOR_VERSION = 30
|
||||||
MICRO_VERSION = 2
|
MICRO_VERSION = 4
|
||||||
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
|
||||||
|
|
||||||
LIBHOME = .
|
LIBHOME = .
|
||||||
|
|||||||
@@ -139,7 +139,7 @@
|
|||||||
</ResourceCompile>
|
</ResourceCompile>
|
||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Gaming.Xbox.Scarlett.x64'">
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.141.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>xgameruntime.lib;../Microsoft.Xbox.Services.GDK.C.Thunks.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">
|
||||||
@@ -409,7 +409,7 @@
|
|||||||
<CopyFileToFolders Include="..\..\logos\Logo480x480.png" />
|
<CopyFileToFolders Include="..\..\logos\Logo480x480.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.141.GDK.C.Thunks.dll">
|
<CopyFileToFolders Include="$(Console_GRDKExtLibRoot)Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.dll">
|
||||||
<FileType>Document</FileType>
|
<FileType>Document</FileType>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.Scarlett.x64'">true</ExcludedFromBuild>
|
||||||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Gaming.Xbox.XboxOne.x64'">true</ExcludedFromBuild>
|
||||||
|
|||||||
@@ -19,10 +19,10 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>FMWK</string>
|
<string>FMWK</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>2.30.2</string>
|
<string>2.30.4</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>SDLX</string>
|
<string>SDLX</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>2.30.2</string>
|
<string>2.30.4</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
@@ -9729,7 +9729,7 @@
|
|||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEPLOYMENT_POSTPROCESSING = YES;
|
DEPLOYMENT_POSTPROCESSING = YES;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.2.0;
|
DYLIB_CURRENT_VERSION = 3001.4.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
GCC_ALTIVEC_EXTENSIONS = YES;
|
GCC_ALTIVEC_EXTENSIONS = YES;
|
||||||
@@ -9770,7 +9770,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_LINK_OBJC_RUNTIME = NO;
|
CLANG_LINK_OBJC_RUNTIME = NO;
|
||||||
MARKETING_VERSION = 2.30.2;
|
MARKETING_VERSION = 2.30.4;
|
||||||
OTHER_LDFLAGS = "-liconv";
|
OTHER_LDFLAGS = "-liconv";
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
@@ -9814,7 +9814,7 @@
|
|||||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||||
DEBUG_INFORMATION_FORMAT = dwarf;
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.2.0;
|
DYLIB_CURRENT_VERSION = 3001.4.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||||
ENABLE_TESTABILITY = YES;
|
ENABLE_TESTABILITY = YES;
|
||||||
@@ -9856,7 +9856,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
CLANG_LINK_OBJC_RUNTIME = NO;
|
CLANG_LINK_OBJC_RUNTIME = NO;
|
||||||
MARKETING_VERSION = 2.30.2;
|
MARKETING_VERSION = 2.30.4;
|
||||||
OTHER_LDFLAGS = "-liconv";
|
OTHER_LDFLAGS = "-liconv";
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -10063,7 +10063,7 @@
|
|||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.2.0;
|
DYLIB_CURRENT_VERSION = 3001.4.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
GCC_DYNAMIC_NO_PIC = NO;
|
GCC_DYNAMIC_NO_PIC = NO;
|
||||||
@@ -10115,7 +10115,7 @@
|
|||||||
DEFINES_MODULE = YES;
|
DEFINES_MODULE = YES;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
DYLIB_COMPATIBILITY_VERSION = 3001.0.0;
|
||||||
DYLIB_CURRENT_VERSION = 3001.2.0;
|
DYLIB_CURRENT_VERSION = 3001.4.0;
|
||||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||||
ENABLE_NS_ASSERTIONS = NO;
|
ENABLE_NS_ASSERTIONS = NO;
|
||||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
Title SDL 2.30.2
|
Title SDL 2.30.4
|
||||||
Version 1
|
Version 1
|
||||||
Description SDL Library for Mac OS X (http://www.libsdl.org)
|
Description SDL Library for Mac OS X (http://www.libsdl.org)
|
||||||
DefaultLocation /Library/Frameworks
|
DefaultLocation /Library/Frameworks
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
<application android:label="@string/app_name"
|
<application android:label="@string/app_name"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
android:theme="@style/AppTheme"
|
||||||
android:hardwareAccelerated="true" >
|
android:hardwareAccelerated="true" >
|
||||||
|
|
||||||
<!-- Example of setting SDL hints from AndroidManifest.xml:
|
<!-- Example of setting SDL hints from AndroidManifest.xml:
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
private static final String TAG = "SDL";
|
private static final String TAG = "SDL";
|
||||||
private static final int SDL_MAJOR_VERSION = 2;
|
private static final int SDL_MAJOR_VERSION = 2;
|
||||||
private static final int SDL_MINOR_VERSION = 30;
|
private static final int SDL_MINOR_VERSION = 30;
|
||||||
private static final int SDL_MICRO_VERSION = 2;
|
private static final int SDL_MICRO_VERSION = 4;
|
||||||
/*
|
/*
|
||||||
// Display InputType.SOURCE/CLASS of events and devices
|
// Display InputType.SOURCE/CLASS of events and devices
|
||||||
//
|
//
|
||||||
@@ -995,8 +995,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
/* No valid hint, nothing is explicitly allowed */
|
/* No valid hint, nothing is explicitly allowed */
|
||||||
if (!is_portrait_allowed && !is_landscape_allowed) {
|
if (!is_portrait_allowed && !is_landscape_allowed) {
|
||||||
if (resizable) {
|
if (resizable) {
|
||||||
/* All orientations are allowed */
|
/* All orientations are allowed, respecting user orientation lock setting */
|
||||||
req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
|
req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER;
|
||||||
} else {
|
} else {
|
||||||
/* Fixed window and nothing specified. Get orientation from w/h of created window */
|
/* Fixed window and nothing specified. Get orientation from w/h of created window */
|
||||||
req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
|
req = (w > h ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
|
||||||
@@ -1005,8 +1005,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
|
|||||||
/* At least one orientation is allowed */
|
/* At least one orientation is allowed */
|
||||||
if (resizable) {
|
if (resizable) {
|
||||||
if (is_portrait_allowed && is_landscape_allowed) {
|
if (is_portrait_allowed && is_landscape_allowed) {
|
||||||
/* hint allows both landscape and portrait, promote to full sensor */
|
/* hint allows both landscape and portrait, promote to full user */
|
||||||
req = ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR;
|
req = ActivityInfo.SCREEN_ORIENTATION_FULL_USER;
|
||||||
} else {
|
} else {
|
||||||
/* Use the only one allowed "orientation" */
|
/* Use the only one allowed "orientation" */
|
||||||
req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
|
req = (is_landscape_allowed ? orientation_landscape : orientation_portrait);
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
|
<style name="AppTheme" parent="android:Theme.NoTitleBar.Fullscreen">
|
||||||
<!-- Customize your theme here. -->
|
<!-- Customize your theme here. -->
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -873,7 +873,6 @@ enable_sse2
|
|||||||
enable_sse3
|
enable_sse3
|
||||||
enable_altivec
|
enable_altivec
|
||||||
enable_lsx
|
enable_lsx
|
||||||
enable_lasx
|
|
||||||
enable_oss
|
enable_oss
|
||||||
enable_alsa
|
enable_alsa
|
||||||
with_alsa_prefix
|
with_alsa_prefix
|
||||||
@@ -1675,7 +1674,6 @@ Optional Features:
|
|||||||
--enable-sse3 use SSE3 assembly routines [default=maybe]
|
--enable-sse3 use SSE3 assembly routines [default=maybe]
|
||||||
--enable-altivec use Altivec assembly routines [default=yes]
|
--enable-altivec use Altivec assembly routines [default=yes]
|
||||||
--enable-lsx use LSX assembly routines [default=yes]
|
--enable-lsx use LSX assembly routines [default=yes]
|
||||||
--enable-lasx use LASX assembly routines [default=yes]
|
|
||||||
--enable-oss support the OSS audio API [default=maybe]
|
--enable-oss support the OSS audio API [default=maybe]
|
||||||
--enable-alsa support the ALSA audio API [default=yes]
|
--enable-alsa support the ALSA audio API [default=yes]
|
||||||
--disable-alsatest Do not try to compile and run a test Alsa program
|
--disable-alsatest Do not try to compile and run a test Alsa program
|
||||||
@@ -3510,7 +3508,7 @@ orig_CFLAGS="$CFLAGS"
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
SDL_MAJOR_VERSION=2
|
SDL_MAJOR_VERSION=2
|
||||||
SDL_MINOR_VERSION=30
|
SDL_MINOR_VERSION=30
|
||||||
SDL_MICRO_VERSION=2
|
SDL_MICRO_VERSION=4
|
||||||
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
||||||
|
|
||||||
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
||||||
@@ -18818,7 +18816,7 @@ fi
|
|||||||
|
|
||||||
enable_system_iconv_default=yes
|
enable_system_iconv_default=yes
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-cygwin*|*-*-mingw*)
|
*-*-cygwin*|*-*-mingw*|*-*-darwin*|*-ios-*)
|
||||||
enable_system_iconv_default=no
|
enable_system_iconv_default=no
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -21112,80 +21110,6 @@ printf "%s\n" "#define HAVE_LSXINTRIN_H 1" >>confdefs.h
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check whether --enable-lasx was given.
|
|
||||||
if test ${enable_lasx+y}
|
|
||||||
then :
|
|
||||||
enableval=$enable_lasx;
|
|
||||||
else $as_nop
|
|
||||||
enable_LASX=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x$enable_LASX = xyes; then
|
|
||||||
save_CFLAGS="$CFLAGS"
|
|
||||||
have_gcc_lasx=no
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GCC -mlasx option" >&5
|
|
||||||
printf %s "checking for GCC -mlasx option... " >&6; }
|
|
||||||
lasx_CFLAGS="-mlasx"
|
|
||||||
CFLAGS="$save_CFLAGS $lasx_CFLAGS"
|
|
||||||
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
#ifndef __loongarch_asx
|
|
||||||
#error Assembler CPP flag not enabled
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
main (void)
|
|
||||||
{
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"
|
|
||||||
then :
|
|
||||||
have_gcc_lasx=yes
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_gcc_lasx" >&5
|
|
||||||
printf "%s\n" "$have_gcc_lasx" >&6; }
|
|
||||||
CFLAGS="$save_CFLAGS"
|
|
||||||
|
|
||||||
if test x$have_gcc_lasx = xyes; then
|
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS $lasx_CFLAGS"
|
|
||||||
SUMMARY_math="${SUMMARY_math} lasx"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lasxintrin.h" >&5
|
|
||||||
printf %s "checking for lasxintrin.h... " >&6; }
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <lasxintrin.h>
|
|
||||||
int
|
|
||||||
main (void)
|
|
||||||
{
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"
|
|
||||||
then :
|
|
||||||
have_lasxintrin_h_hdr=yes
|
|
||||||
else $as_nop
|
|
||||||
have_lasxintrin_h_hdr=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_lasxintrin_h_hdr" >&5
|
|
||||||
printf "%s\n" "$have_lasxintrin_h_hdr" >&6; }
|
|
||||||
if test x$have_lasxintrin_h_hdr = xyes; then
|
|
||||||
|
|
||||||
printf "%s\n" "#define HAVE_LASXINTRIN_H 1" >>confdefs.h
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
CheckOSS()
|
CheckOSS()
|
||||||
{
|
{
|
||||||
# Check whether --enable-oss was given.
|
# Check whether --enable-oss was given.
|
||||||
@@ -27589,18 +27513,14 @@ then :
|
|||||||
have_d3d11=yes
|
have_d3d11=yes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for d3d12 Windows SDK version" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compatible d3d12 headers" >&5
|
||||||
printf %s "checking for d3d12 Windows SDK version... " >&6; }
|
printf %s "checking for compatible d3d12 headers... " >&6; }
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
/* end confdefs.h. */
|
/* end confdefs.h. */
|
||||||
|
|
||||||
#include <winsdkver.h>
|
|
||||||
#include <sdkddkver.h>
|
|
||||||
#include <d3d12.h>
|
#include <d3d12.h>
|
||||||
|
#include <d3d12sdklayers.h>
|
||||||
ID3D12Device1 *device;
|
ID3D12Device1 *device;
|
||||||
#if WDK_NTDDI_VERSION <= 0x0A000008
|
|
||||||
asdf
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main (void)
|
main (void)
|
||||||
@@ -27619,6 +27539,7 @@ fi
|
|||||||
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
|
||||||
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_d3d12" >&5
|
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_d3d12" >&5
|
||||||
printf "%s\n" "$have_d3d12" >&6; }
|
printf "%s\n" "$have_d3d12" >&6; }
|
||||||
|
|
||||||
ac_fn_c_check_header_compile "$LINENO" "ddraw.h" "ac_cv_header_ddraw_h" "$ac_includes_default"
|
ac_fn_c_check_header_compile "$LINENO" "ddraw.h" "ac_cv_header_ddraw_h" "$ac_includes_default"
|
||||||
if test "x$ac_cv_header_ddraw_h" = xyes
|
if test "x$ac_cv_header_ddraw_h" = xyes
|
||||||
then :
|
then :
|
||||||
|
|||||||
+5
-40
@@ -13,7 +13,7 @@ dnl Set various version strings - taken gratefully from the GTk sources
|
|||||||
# See docs/release_checklist.md
|
# See docs/release_checklist.md
|
||||||
SDL_MAJOR_VERSION=2
|
SDL_MAJOR_VERSION=2
|
||||||
SDL_MINOR_VERSION=30
|
SDL_MINOR_VERSION=30
|
||||||
SDL_MICRO_VERSION=2
|
SDL_MICRO_VERSION=4
|
||||||
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
SDL_VERSION=$SDL_MAJOR_VERSION.$SDL_MINOR_VERSION.$SDL_MICRO_VERSION
|
||||||
|
|
||||||
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
SDL_BINARY_AGE=`expr $SDL_MINOR_VERSION \* 100 + $SDL_MICRO_VERSION`
|
||||||
@@ -322,7 +322,7 @@ AC_ARG_ENABLE(libc,
|
|||||||
dnl See whether we are allowed to use system iconv
|
dnl See whether we are allowed to use system iconv
|
||||||
enable_system_iconv_default=yes
|
enable_system_iconv_default=yes
|
||||||
case "$host" in
|
case "$host" in
|
||||||
*-*-cygwin*|*-*-mingw*)
|
*-*-cygwin*|*-*-mingw*|*-*-darwin*|*-ios-*)
|
||||||
enable_system_iconv_default=no
|
enable_system_iconv_default=no
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -938,38 +938,6 @@ fi
|
|||||||
AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ])
|
AC_DEFINE(HAVE_LSXINTRIN_H, 1, [ ])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_ARG_ENABLE(lasx,
|
|
||||||
[AS_HELP_STRING([--enable-lasx], [use LASX assembly routines [default=yes]])],
|
|
||||||
, enable_LASX=yes)
|
|
||||||
if test x$enable_LASX = xyes; then
|
|
||||||
save_CFLAGS="$CFLAGS"
|
|
||||||
have_gcc_lasx=no
|
|
||||||
AC_MSG_CHECKING(for GCC -mlasx option)
|
|
||||||
lasx_CFLAGS="-mlasx"
|
|
||||||
CFLAGS="$save_CFLAGS $lasx_CFLAGS"
|
|
||||||
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#ifndef __loongarch_asx
|
|
||||||
#error Assembler CPP flag not enabled
|
|
||||||
#endif
|
|
||||||
]], [])], [have_gcc_lasx=yes], [])
|
|
||||||
AC_MSG_RESULT($have_gcc_lasx)
|
|
||||||
CFLAGS="$save_CFLAGS"
|
|
||||||
|
|
||||||
if test x$have_gcc_lasx = xyes; then
|
|
||||||
EXTRA_CFLAGS="$EXTRA_CFLAGS $lasx_CFLAGS"
|
|
||||||
SUMMARY_math="${SUMMARY_math} lasx"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(for lasxintrin.h)
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lasxintrin.h>]])],
|
|
||||||
[have_lasxintrin_h_hdr=yes],[have_lasxintrin_h_hdr=no])
|
|
||||||
AC_MSG_RESULT($have_lasxintrin_h_hdr)
|
|
||||||
if test x$have_lasxintrin_h_hdr = xyes; then
|
|
||||||
AC_DEFINE(HAVE_LASXINTRIN_H, 1, [ ])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl See if the OSS audio interface is supported
|
dnl See if the OSS audio interface is supported
|
||||||
CheckOSS()
|
CheckOSS()
|
||||||
{
|
{
|
||||||
@@ -3375,17 +3343,14 @@ CheckDIRECTX()
|
|||||||
if test x$enable_directx = xyes; then
|
if test x$enable_directx = xyes; then
|
||||||
AC_CHECK_HEADER(d3d9.h, have_d3d=yes)
|
AC_CHECK_HEADER(d3d9.h, have_d3d=yes)
|
||||||
AC_CHECK_HEADER(d3d11_1.h, have_d3d11=yes)
|
AC_CHECK_HEADER(d3d11_1.h, have_d3d11=yes)
|
||||||
AC_MSG_CHECKING(for d3d12 Windows SDK version)
|
AC_MSG_CHECKING(for compatible d3d12 headers)
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
||||||
#include <winsdkver.h>
|
|
||||||
#include <sdkddkver.h>
|
|
||||||
#include <d3d12.h>
|
#include <d3d12.h>
|
||||||
|
#include <d3d12sdklayers.h>
|
||||||
ID3D12Device1 *device;
|
ID3D12Device1 *device;
|
||||||
#if WDK_NTDDI_VERSION <= 0x0A000008
|
|
||||||
asdf
|
|
||||||
#endif
|
|
||||||
]])], [have_d3d12=yes],[have_d3d12=no])
|
]])], [have_d3d12=yes],[have_d3d12=no])
|
||||||
AC_MSG_RESULT($have_d3d12)
|
AC_MSG_RESULT($have_d3d12)
|
||||||
|
|
||||||
AC_CHECK_HEADER(ddraw.h, have_ddraw=yes)
|
AC_CHECK_HEADER(ddraw.h, have_ddraw=yes)
|
||||||
AC_CHECK_HEADER(dsound.h, have_dsound=yes)
|
AC_CHECK_HEADER(dsound.h, have_dsound=yes)
|
||||||
AC_CHECK_HEADER(dinput.h, have_dinput=yes)
|
AC_CHECK_HEADER(dinput.h, have_dinput=yes)
|
||||||
|
|||||||
@@ -114,9 +114,6 @@
|
|||||||
#define HAVE_MEMCPY 1
|
#define HAVE_MEMCPY 1
|
||||||
#define HAVE_MEMMOVE 1
|
#define HAVE_MEMMOVE 1
|
||||||
#define HAVE_MEMCMP 1
|
#define HAVE_MEMCMP 1
|
||||||
#define HAVE_WCSLEN 1
|
|
||||||
#define HAVE_WCSLCPY 1
|
|
||||||
#define HAVE_WCSLCAT 1
|
|
||||||
#define HAVE_WCSCMP 1
|
#define HAVE_WCSCMP 1
|
||||||
#define HAVE__WCSICMP 1
|
#define HAVE__WCSICMP 1
|
||||||
#define HAVE__WCSNICMP 1
|
#define HAVE__WCSNICMP 1
|
||||||
|
|||||||
@@ -99,9 +99,11 @@ typedef unsigned int uintptr_t;
|
|||||||
#define HAVE_D3D11_H 1
|
#define HAVE_D3D11_H 1
|
||||||
#define HAVE_ROAPI_H 1
|
#define HAVE_ROAPI_H 1
|
||||||
#endif
|
#endif
|
||||||
#if defined(WDK_NTDDI_VERSION) && WDK_NTDDI_VERSION > 0x0A000008 /* 10.0.19041.0 */
|
#if defined(__has_include)
|
||||||
|
#if __has_include(<d3d12.h>) && __has_include(<d3d12sdklayers.h>)
|
||||||
#define HAVE_D3D12_H 1
|
#define HAVE_D3D12_H 1
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
#if defined(_WIN32_MAXVER) && _WIN32_MAXVER >= 0x0603 /* Windows 8.1 SDK */
|
#if defined(_WIN32_MAXVER) && _WIN32_MAXVER >= 0x0603 /* Windows 8.1 SDK */
|
||||||
#define HAVE_SHELLSCALINGAPI_H 1
|
#define HAVE_SHELLSCALINGAPI_H 1
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -73,7 +73,13 @@
|
|||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
/* lets us know what version of Mac OS X we're compiling on */
|
/* lets us know what version of Mac OS X we're compiling on */
|
||||||
#include <AvailabilityMacros.h>
|
#include <AvailabilityMacros.h>
|
||||||
|
#ifndef __has_extension /* Older compilers don't support this */
|
||||||
|
#define __has_extension(x) 0
|
||||||
#include <TargetConditionals.h>
|
#include <TargetConditionals.h>
|
||||||
|
#undef __has_extension
|
||||||
|
#else
|
||||||
|
#include <TargetConditionals.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Fix building with older SDKs that don't define these
|
/* Fix building with older SDKs that don't define these
|
||||||
See this for more information:
|
See this for more information:
|
||||||
|
|||||||
+13
-13
@@ -107,7 +107,7 @@
|
|||||||
# elif defined(__MRC__)
|
# elif defined(__MRC__)
|
||||||
void *alloca(unsigned);
|
void *alloca(unsigned);
|
||||||
# else
|
# else
|
||||||
char *alloca();
|
void *alloca(size_t);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -253,10 +253,10 @@ typedef uint64_t Uint64;
|
|||||||
* <stdint.h> should define these but this is not true all platforms.
|
* <stdint.h> should define these but this is not true all platforms.
|
||||||
* (for example win32) */
|
* (for example win32) */
|
||||||
#ifndef SDL_PRIs64
|
#ifndef SDL_PRIs64
|
||||||
#ifdef PRIs64
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
#define SDL_PRIs64 PRIs64
|
|
||||||
#elif defined(__WIN32__) || defined(__GDK__)
|
|
||||||
#define SDL_PRIs64 "I64d"
|
#define SDL_PRIs64 "I64d"
|
||||||
|
#elif defined(PRIs64)
|
||||||
|
#define SDL_PRIs64 PRIs64
|
||||||
#elif defined(__LP64__) && !defined(__APPLE__)
|
#elif defined(__LP64__) && !defined(__APPLE__)
|
||||||
#define SDL_PRIs64 "ld"
|
#define SDL_PRIs64 "ld"
|
||||||
#else
|
#else
|
||||||
@@ -264,10 +264,10 @@ typedef uint64_t Uint64;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef SDL_PRIu64
|
#ifndef SDL_PRIu64
|
||||||
#ifdef PRIu64
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
#define SDL_PRIu64 PRIu64
|
|
||||||
#elif defined(__WIN32__) || defined(__GDK__)
|
|
||||||
#define SDL_PRIu64 "I64u"
|
#define SDL_PRIu64 "I64u"
|
||||||
|
#elif defined(PRIu64)
|
||||||
|
#define SDL_PRIu64 PRIu64
|
||||||
#elif defined(__LP64__) && !defined(__APPLE__)
|
#elif defined(__LP64__) && !defined(__APPLE__)
|
||||||
#define SDL_PRIu64 "lu"
|
#define SDL_PRIu64 "lu"
|
||||||
#else
|
#else
|
||||||
@@ -275,10 +275,10 @@ typedef uint64_t Uint64;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef SDL_PRIx64
|
#ifndef SDL_PRIx64
|
||||||
#ifdef PRIx64
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
#define SDL_PRIx64 PRIx64
|
|
||||||
#elif defined(__WIN32__) || defined(__GDK__)
|
|
||||||
#define SDL_PRIx64 "I64x"
|
#define SDL_PRIx64 "I64x"
|
||||||
|
#elif defined(PRIx64)
|
||||||
|
#define SDL_PRIx64 PRIx64
|
||||||
#elif defined(__LP64__) && !defined(__APPLE__)
|
#elif defined(__LP64__) && !defined(__APPLE__)
|
||||||
#define SDL_PRIx64 "lx"
|
#define SDL_PRIx64 "lx"
|
||||||
#else
|
#else
|
||||||
@@ -286,10 +286,10 @@ typedef uint64_t Uint64;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef SDL_PRIX64
|
#ifndef SDL_PRIX64
|
||||||
#ifdef PRIX64
|
#if defined(__WIN32__) || defined(__GDK__)
|
||||||
#define SDL_PRIX64 PRIX64
|
|
||||||
#elif defined(__WIN32__) || defined(__GDK__)
|
|
||||||
#define SDL_PRIX64 "I64X"
|
#define SDL_PRIX64 "I64X"
|
||||||
|
#elif defined(PRIX64)
|
||||||
|
#define SDL_PRIX64 PRIX64
|
||||||
#elif defined(__LP64__) && !defined(__APPLE__)
|
#elif defined(__LP64__) && !defined(__APPLE__)
|
||||||
#define SDL_PRIX64 "lX"
|
#define SDL_PRIX64 "lX"
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ typedef struct SDL_version
|
|||||||
*/
|
*/
|
||||||
#define SDL_MAJOR_VERSION 2
|
#define SDL_MAJOR_VERSION 2
|
||||||
#define SDL_MINOR_VERSION 30
|
#define SDL_MINOR_VERSION 30
|
||||||
#define SDL_PATCHLEVEL 2
|
#define SDL_PATCHLEVEL 4
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Macro to determine SDL version program was compiled against.
|
* Macro to determine SDL version program was compiled against.
|
||||||
|
|||||||
@@ -161,6 +161,10 @@ const char *SDL_GetHint(const char *name)
|
|||||||
const char *env;
|
const char *env;
|
||||||
SDL_Hint *hint;
|
SDL_Hint *hint;
|
||||||
|
|
||||||
|
if (!name) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
env = SDL_getenv(name);
|
env = SDL_getenv(name);
|
||||||
for (hint = SDL_hints; hint; hint = hint->next) {
|
for (hint = SDL_hints; hint; hint = hint->next) {
|
||||||
if (SDL_strcmp(name, hint->name) == 0) {
|
if (SDL_strcmp(name, hint->name) == 0) {
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ extern "C" {
|
|||||||
static XTaskQueueHandle GDK_GlobalTaskQueue;
|
static XTaskQueueHandle GDK_GlobalTaskQueue;
|
||||||
|
|
||||||
PAPPSTATE_REGISTRATION hPLM = {};
|
PAPPSTATE_REGISTRATION hPLM = {};
|
||||||
|
PAPPCONSTRAIN_REGISTRATION hCPLM = {};
|
||||||
HANDLE plmSuspendComplete = nullptr;
|
HANDLE plmSuspendComplete = nullptr;
|
||||||
|
|
||||||
extern "C" DECLSPEC int
|
extern "C" DECLSPEC int
|
||||||
@@ -177,6 +178,23 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Register constrain/unconstrain handling */
|
||||||
|
auto raccn = [](BOOLEAN constrained, PVOID context) {
|
||||||
|
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "[GDK] in RegisterAppConstrainedChangeNotification handler");
|
||||||
|
SDL_VideoDevice *_this = SDL_GetVideoDevice();
|
||||||
|
if (_this) {
|
||||||
|
if (constrained) {
|
||||||
|
SDL_SetKeyboardFocus(NULL);
|
||||||
|
} else {
|
||||||
|
SDL_SetKeyboardFocus(_this->windows);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if (RegisterAppConstrainedChangeNotification(raccn, NULL, &hCPLM)) {
|
||||||
|
SDL_SetError("[GDK] Unable to call RegisterAppConstrainedChangeNotification");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Run the application main() code */
|
/* Run the application main() code */
|
||||||
result = mainFunction(argc, argv);
|
result = mainFunction(argc, argv);
|
||||||
|
|
||||||
@@ -184,6 +202,9 @@ SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved)
|
|||||||
UnregisterAppStateChangeNotification(hPLM);
|
UnregisterAppStateChangeNotification(hPLM);
|
||||||
CloseHandle(plmSuspendComplete);
|
CloseHandle(plmSuspendComplete);
|
||||||
|
|
||||||
|
/* Unregister constrain/unconstrain handling */
|
||||||
|
UnregisterAppConstrainedChangeNotification(hCPLM);
|
||||||
|
|
||||||
/* !!! FIXME: This follows the docs exactly, but for some reason still leaks handles on exit? */
|
/* !!! FIXME: This follows the docs exactly, but for some reason still leaks handles on exit? */
|
||||||
/* Terminate the task queue and dispatch any pending tasks */
|
/* Terminate the task queue and dispatch any pending tasks */
|
||||||
XTaskQueueTerminate(taskQueue, false, nullptr, nullptr);
|
XTaskQueueTerminate(taskQueue, false, nullptr, nullptr);
|
||||||
|
|||||||
+5
-12
@@ -34,13 +34,6 @@
|
|||||||
#include "../video/SDL_sysvideo.h"
|
#include "../video/SDL_sysvideo.h"
|
||||||
#include "SDL_syswm.h"
|
#include "SDL_syswm.h"
|
||||||
|
|
||||||
#undef SDL_PRIs64
|
|
||||||
#if (defined(__WIN32__) || defined(__GDK__)) && !defined(__CYGWIN__)
|
|
||||||
#define SDL_PRIs64 "I64d"
|
|
||||||
#else
|
|
||||||
#define SDL_PRIs64 "lld"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* An arbitrary limit so we don't have unbounded growth */
|
/* An arbitrary limit so we don't have unbounded growth */
|
||||||
#define SDL_MAX_QUEUED_EVENTS 65535
|
#define SDL_MAX_QUEUED_EVENTS 65535
|
||||||
|
|
||||||
@@ -454,8 +447,8 @@ static void SDL_LogEvent(const SDL_Event *event)
|
|||||||
|
|
||||||
#define PRINT_FINGER_EVENT(event) \
|
#define PRINT_FINGER_EVENT(event) \
|
||||||
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " fingerid=%" SDL_PRIs64 " x=%f y=%f dx=%f dy=%f pressure=%f)", \
|
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " fingerid=%" SDL_PRIs64 " x=%f y=%f dx=%f dy=%f pressure=%f)", \
|
||||||
(uint)event->tfinger.timestamp, (long long)event->tfinger.touchId, \
|
(uint)event->tfinger.timestamp, event->tfinger.touchId, \
|
||||||
(long long)event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
|
event->tfinger.fingerId, event->tfinger.x, event->tfinger.y, \
|
||||||
event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)
|
event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure)
|
||||||
SDL_EVENT_CASE(SDL_FINGERDOWN)
|
SDL_EVENT_CASE(SDL_FINGERDOWN)
|
||||||
PRINT_FINGER_EVENT(event);
|
PRINT_FINGER_EVENT(event);
|
||||||
@@ -470,8 +463,8 @@ static void SDL_LogEvent(const SDL_Event *event)
|
|||||||
|
|
||||||
#define PRINT_DOLLAR_EVENT(event) \
|
#define PRINT_DOLLAR_EVENT(event) \
|
||||||
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " gestureid=%" SDL_PRIs64 " numfingers=%u error=%f x=%f y=%f)", \
|
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " gestureid=%" SDL_PRIs64 " numfingers=%u error=%f x=%f y=%f)", \
|
||||||
(uint)event->dgesture.timestamp, (long long)event->dgesture.touchId, \
|
(uint)event->dgesture.timestamp, event->dgesture.touchId, \
|
||||||
(long long)event->dgesture.gestureId, (uint)event->dgesture.numFingers, \
|
event->dgesture.gestureId, (uint)event->dgesture.numFingers, \
|
||||||
event->dgesture.error, event->dgesture.x, event->dgesture.y)
|
event->dgesture.error, event->dgesture.x, event->dgesture.y)
|
||||||
SDL_EVENT_CASE(SDL_DOLLARGESTURE)
|
SDL_EVENT_CASE(SDL_DOLLARGESTURE)
|
||||||
PRINT_DOLLAR_EVENT(event);
|
PRINT_DOLLAR_EVENT(event);
|
||||||
@@ -483,7 +476,7 @@ static void SDL_LogEvent(const SDL_Event *event)
|
|||||||
|
|
||||||
SDL_EVENT_CASE(SDL_MULTIGESTURE)
|
SDL_EVENT_CASE(SDL_MULTIGESTURE)
|
||||||
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " dtheta=%f ddist=%f x=%f y=%f numfingers=%u)",
|
(void)SDL_snprintf(details, sizeof(details), " (timestamp=%u touchid=%" SDL_PRIs64 " dtheta=%f ddist=%f x=%f y=%f numfingers=%u)",
|
||||||
(uint)event->mgesture.timestamp, (long long)event->mgesture.touchId,
|
(uint)event->mgesture.timestamp, event->mgesture.touchId,
|
||||||
event->mgesture.dTheta, event->mgesture.dDist,
|
event->mgesture.dTheta, event->mgesture.dDist,
|
||||||
event->mgesture.x, event->mgesture.y, (uint)event->mgesture.numFingers);
|
event->mgesture.x, event->mgesture.y, (uint)event->mgesture.numFingers);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "../../SDL_internal.h"
|
#include "../../SDL_internal.h"
|
||||||
|
|
||||||
#ifdef SDL_FILESYSTEM_XBOX
|
|
||||||
|
|
||||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
/* System dependent filesystem routines */
|
/* System dependent filesystem routines */
|
||||||
@@ -135,6 +134,5 @@ SDL_GetPrefPath(const char *org, const char *app)
|
|||||||
return folderPath;
|
return folderPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* SDL_FILESYSTEM_XBOX */
|
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
@@ -877,6 +877,41 @@ static int SDL_libusb_get_string_descriptor(libusb_device_handle *dev,
|
|||||||
#undef make_path
|
#undef make_path
|
||||||
#undef read_thread
|
#undef read_thread
|
||||||
|
|
||||||
|
/* If the platform has any backend other than libusb, try to avoid using
|
||||||
|
* libusb as the main backend for devices, since it detaches drivers and
|
||||||
|
* therefore makes devices inaccessible to the rest of the OS.
|
||||||
|
*
|
||||||
|
* We do this by whitelisting devices we know to be accessible _exclusively_
|
||||||
|
* via libusb; these are typically devices that look like HIDs but have a
|
||||||
|
* quirk that requires direct access to the hardware.
|
||||||
|
*/
|
||||||
|
static const struct {
|
||||||
|
Uint16 vendor;
|
||||||
|
Uint16 product;
|
||||||
|
} SDL_libusb_whitelist[] = {
|
||||||
|
{ 0x057e, 0x0337 } /* Nintendo WUP-028, Wii U/Switch GameCube Adapter */
|
||||||
|
};
|
||||||
|
|
||||||
|
static SDL_bool
|
||||||
|
IsInWhitelist(Uint16 vendor, Uint16 product)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < SDL_arraysize(SDL_libusb_whitelist); i += 1) {
|
||||||
|
if (vendor == SDL_libusb_whitelist[i].vendor &&
|
||||||
|
product == SDL_libusb_whitelist[i].product) {
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return SDL_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_PLATFORM_BACKEND) || HAVE_DRIVER_BACKEND
|
||||||
|
static const SDL_bool use_libusb_whitelist_default = SDL_TRUE;
|
||||||
|
#else
|
||||||
|
static const SDL_bool use_libusb_whitelist_default = SDL_FALSE;
|
||||||
|
#endif /* HAVE_PLATFORM_BACKEND || HAVE_DRIVER_BACKEND */
|
||||||
|
static SDL_bool use_libusb_whitelist = use_libusb_whitelist_default;
|
||||||
|
|
||||||
#endif /* HAVE_LIBUSB */
|
#endif /* HAVE_LIBUSB */
|
||||||
|
|
||||||
#endif /* !SDL_HIDAPI_DISABLED */
|
#endif /* !SDL_HIDAPI_DISABLED */
|
||||||
@@ -1062,6 +1097,8 @@ int SDL_hid_init(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBUSB
|
#ifdef HAVE_LIBUSB
|
||||||
|
use_libusb_whitelist = SDL_GetHintBoolean("SDL_HIDAPI_LIBUSB_WHITELIST",
|
||||||
|
use_libusb_whitelist_default);
|
||||||
if (SDL_getenv("SDL_HIDAPI_DISABLE_LIBUSB") != NULL) {
|
if (SDL_getenv("SDL_HIDAPI_DISABLE_LIBUSB") != NULL) {
|
||||||
SDL_LogDebug(SDL_LOG_CATEGORY_INPUT,
|
SDL_LogDebug(SDL_LOG_CATEGORY_INPUT,
|
||||||
"libusb disabled by SDL_HIDAPI_DISABLE_LIBUSB");
|
"libusb disabled by SDL_HIDAPI_DISABLE_LIBUSB");
|
||||||
@@ -1238,6 +1275,16 @@ struct SDL_hid_device_info *SDL_hid_enumerate(unsigned short vendor_id, unsigned
|
|||||||
SDL_Log("libusb devices found:");
|
SDL_Log("libusb devices found:");
|
||||||
#endif
|
#endif
|
||||||
for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
|
for (usb_dev = usb_devs; usb_dev; usb_dev = usb_dev->next) {
|
||||||
|
if (use_libusb_whitelist) {
|
||||||
|
if (!IsInWhitelist(usb_dev->vendor_id, usb_dev->product_id)) {
|
||||||
|
#ifdef DEBUG_HIDAPI
|
||||||
|
SDL_Log("Device was not in libusb whitelist: %ls %ls 0x%.4hx 0x%.4hx",
|
||||||
|
usb_dev->manufacturer_string, usb_dev->product_string,
|
||||||
|
usb_dev->vendor_id, usb_dev->product_id);
|
||||||
|
#endif /* DEBUG_HIDAPI */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
new_dev = (struct SDL_hid_device_info *)SDL_malloc(sizeof(struct SDL_hid_device_info));
|
new_dev = (struct SDL_hid_device_info *)SDL_malloc(sizeof(struct SDL_hid_device_info));
|
||||||
if (new_dev == NULL) {
|
if (new_dev == NULL) {
|
||||||
LIBUSB_hid_free_enumeration(usb_devs);
|
LIBUSB_hid_free_enumeration(usb_devs);
|
||||||
|
|||||||
@@ -304,6 +304,7 @@ static const char *s_ControllerMappings[] = {
|
|||||||
"030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"030000006f0e00002f01000000000000,Rock Candy PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
"03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,",
|
"03000000341a00000208000000000000,SL-6555-SBK,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b8,lefttrigger:-a4,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b9,righttrigger:a4,rightx:a3,righty:a2,start:b7,x:b2,y:b3,",
|
||||||
"03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
|
"03000000341a00000908000000000000,SL-6566,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
|
||||||
|
"03000000790000000600000000000000,SPEEDLINK STRIKE Gamepad,crc:5811,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a4,start:b9,x:b3,y:b0,",
|
||||||
"03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
|
"03000000790000001c18000000000000,STK-7024X,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,leftstick:b13,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b14,righttrigger:b9,rightx:a3,righty:a4,start:b11,x:b3,y:b4,",
|
||||||
"03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,",
|
"03000000ff1100003133000000000000,SVEN X-PAD,a:b2,b:b3,back:b4,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b9,rightx:a2,righty:a4,start:b5,x:b0,y:b1,",
|
||||||
"03000000457500002211000000000000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"03000000457500002211000000000000,SZMY-POWER PC Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
@@ -771,6 +772,8 @@ static const char *s_ControllerMappings[] = {
|
|||||||
"03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,",
|
"03000000300f00001211000011010000,QanBa Arcade JoyStick,a:b2,b:b0,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b5,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,righttrigger:b6,start:b9,x:b1,y:b3,",
|
||||||
"03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"03000000222c00000225000011010000,Qanba Dragon Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
"03000000222c00000025000011010000,Qanba Dragon Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
|
"03000000222c00001020000011010000,Qanba Drone 2 Arcade Joystick (PS5),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
|
"03000000222c00001220000011010000,Qanba Drone 2 Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000020000011010000,Qanba Drone Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,",
|
"03000000222c00000020000011010000,Qanba Drone Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,rightshoulder:b5,righttrigger:a4,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
"03000000222c00000223000011010000,Qanba Obsidian Arcade Joystick (PS3),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
|
||||||
"03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
"03000000222c00000023000011010000,Qanba Obsidian Arcade Joystick (PS4),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
|
||||||
|
|||||||
@@ -370,7 +370,10 @@ static Uint32 initial_wheel_devices[] = {
|
|||||||
MAKE_VIDPID(0x044f, 0xb65e), /* Thrustmaster T500RS */
|
MAKE_VIDPID(0x044f, 0xb65e), /* Thrustmaster T500RS */
|
||||||
MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */
|
MAKE_VIDPID(0x044f, 0xb664), /* Thrustmaster TX (initial mode) */
|
||||||
MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */
|
MAKE_VIDPID(0x044f, 0xb669), /* Thrustmaster TX (active mode) */
|
||||||
|
MAKE_VIDPID(0x044f, 0xb691), /* Thrustmaster TS-XW (initial mode) */
|
||||||
|
MAKE_VIDPID(0x044f, 0xb692), /* Thrustmaster TS-XW (active mode) */
|
||||||
MAKE_VIDPID(0x0483, 0x0522), /* Simagic Wheelbase (including M10, Alpha Mini, Alpha, Alpha U) */
|
MAKE_VIDPID(0x0483, 0x0522), /* Simagic Wheelbase (including M10, Alpha Mini, Alpha, Alpha U) */
|
||||||
|
MAKE_VIDPID(0x0483, 0xa355), /* VRS DirectForce Pro Wheel Base */
|
||||||
MAKE_VIDPID(0x0eb7, 0x0001), /* Fanatec ClubSport Wheel Base V2 */
|
MAKE_VIDPID(0x0eb7, 0x0001), /* Fanatec ClubSport Wheel Base V2 */
|
||||||
MAKE_VIDPID(0x0eb7, 0x0004), /* Fanatec ClubSport Wheel Base V2.5 */
|
MAKE_VIDPID(0x0eb7, 0x0004), /* Fanatec ClubSport Wheel Base V2.5 */
|
||||||
MAKE_VIDPID(0x0eb7, 0x0005), /* Fanatec CSL Elite Wheel Base+ (PS4) */
|
MAKE_VIDPID(0x0eb7, 0x0005), /* Fanatec CSL Elite Wheel Base+ (PS4) */
|
||||||
@@ -383,10 +386,20 @@ static Uint32 initial_wheel_devices[] = {
|
|||||||
MAKE_VIDPID(0x0eb7, 0x0e03), /* Fanatec CSL Elite Wheel Base */
|
MAKE_VIDPID(0x0eb7, 0x0e03), /* Fanatec CSL Elite Wheel Base */
|
||||||
MAKE_VIDPID(0x11ff, 0x0511), /* DragonRise Inc. Wired Wheel (initial mode) (also known as PXN V900 (PS3), Superdrive SV-750, or a Genesis Seaborg 400) */
|
MAKE_VIDPID(0x11ff, 0x0511), /* DragonRise Inc. Wired Wheel (initial mode) (also known as PXN V900 (PS3), Superdrive SV-750, or a Genesis Seaborg 400) */
|
||||||
MAKE_VIDPID(0x1209, 0xffb0), /* Generic FFBoard OpenFFBoard universal forcefeedback wheel */
|
MAKE_VIDPID(0x1209, 0xffb0), /* Generic FFBoard OpenFFBoard universal forcefeedback wheel */
|
||||||
|
MAKE_VIDPID(0x16d0, 0x0d5a), /* Simucube 1 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x16d0, 0x0d5f), /* Simucube 2 Ultimate Wheelbase */
|
||||||
|
MAKE_VIDPID(0x16d0, 0x0d60), /* Simucube 2 Pro Wheelbase */
|
||||||
|
MAKE_VIDPID(0x16d0, 0x0d61), /* Simucube 2 Sport Wheelbase */
|
||||||
MAKE_VIDPID(0x2433, 0xf300), /* Asetek SimSports Invicta Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf300), /* Asetek SimSports Invicta Wheelbase */
|
||||||
MAKE_VIDPID(0x2433, 0xf301), /* Asetek SimSports Forte Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf301), /* Asetek SimSports Forte Wheelbase */
|
||||||
MAKE_VIDPID(0x2433, 0xf303), /* Asetek SimSports La Prima Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf303), /* Asetek SimSports La Prima Wheelbase */
|
||||||
MAKE_VIDPID(0x2433, 0xf306), /* Asetek SimSports Tony Kannan Wheelbase */
|
MAKE_VIDPID(0x2433, 0xf306), /* Asetek SimSports Tony Kannan Wheelbase */
|
||||||
|
MAKE_VIDPID(0x3416, 0x0301), /* Cammus C5 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x346e, 0x0000), /* Moza R16/R21 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x346e, 0x0002), /* Moza R9 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x346e, 0x0004), /* Moza R5 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x346e, 0x0005), /* Moza R3 Wheelbase */
|
||||||
|
MAKE_VIDPID(0x346e, 0x0006), /* Moza R12 Wheelbase */
|
||||||
};
|
};
|
||||||
static SDL_vidpid_list wheel_devices = {
|
static SDL_vidpid_list wheel_devices = {
|
||||||
SDL_HINT_JOYSTICK_WHEEL_DEVICES, 0, 0, NULL,
|
SDL_HINT_JOYSTICK_WHEEL_DEVICES, 0, 0, NULL,
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ static const ControllerDescription_t arrControllers[] = {
|
|||||||
{ MAKE_CONTROLLER_ID( 0x0079, 0x1844 ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
{ MAKE_CONTROLLER_ID( 0x0079, 0x1844 ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
||||||
{ MAKE_CONTROLLER_ID( 0x044f, 0xb315 ), k_eControllerType_PS3Controller, NULL }, // Firestorm Dual Analog 3
|
{ MAKE_CONTROLLER_ID( 0x044f, 0xb315 ), k_eControllerType_PS3Controller, NULL }, // Firestorm Dual Analog 3
|
||||||
{ MAKE_CONTROLLER_ID( 0x044f, 0xd007 ), k_eControllerType_PS3Controller, NULL }, // Thrustmaster wireless 3-1
|
{ MAKE_CONTROLLER_ID( 0x044f, 0xd007 ), k_eControllerType_PS3Controller, NULL }, // Thrustmaster wireless 3-1
|
||||||
|
{ MAKE_CONTROLLER_ID( 0x046d, 0xcad1 ), k_eControllerType_PS3Controller, NULL }, // Logitech Chillstream
|
||||||
//{ MAKE_CONTROLLER_ID( 0x046d, 0xc24f ), k_eControllerType_PS3Controller, NULL }, // Logitech G29 (PS3)
|
//{ MAKE_CONTROLLER_ID( 0x046d, 0xc24f ), k_eControllerType_PS3Controller, NULL }, // Logitech G29 (PS3)
|
||||||
{ MAKE_CONTROLLER_ID( 0x054c, 0x0268 ), k_eControllerType_PS3Controller, NULL }, // Sony PS3 Controller
|
{ MAKE_CONTROLLER_ID( 0x054c, 0x0268 ), k_eControllerType_PS3Controller, NULL }, // Sony PS3 Controller
|
||||||
{ MAKE_CONTROLLER_ID( 0x056e, 0x200f ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
{ MAKE_CONTROLLER_ID( 0x056e, 0x200f ), k_eControllerType_PS3Controller, NULL }, // From SDL
|
||||||
@@ -157,6 +158,7 @@ static const ControllerDescription_t arrControllers[] = {
|
|||||||
{ MAKE_CONTROLLER_ID( 0x0f0d, 0x0184 ), k_eControllerType_PS5Controller, NULL }, // Hori Fighting Stick α
|
{ MAKE_CONTROLLER_ID( 0x0f0d, 0x0184 ), k_eControllerType_PS5Controller, NULL }, // Hori Fighting Stick α
|
||||||
{ MAKE_CONTROLLER_ID( 0x1532, 0x100b ), k_eControllerType_PS5Controller, NULL }, // Razer Wolverine V2 Pro (Wired)
|
{ MAKE_CONTROLLER_ID( 0x1532, 0x100b ), k_eControllerType_PS5Controller, NULL }, // Razer Wolverine V2 Pro (Wired)
|
||||||
{ MAKE_CONTROLLER_ID( 0x1532, 0x100c ), k_eControllerType_PS5Controller, NULL }, // Razer Wolverine V2 Pro (Wireless)
|
{ MAKE_CONTROLLER_ID( 0x1532, 0x100c ), k_eControllerType_PS5Controller, NULL }, // Razer Wolverine V2 Pro (Wireless)
|
||||||
|
{ MAKE_CONTROLLER_ID( 0x1532, 0x1012 ), k_eControllerType_PS5Controller, NULL }, // Razer Kitsune
|
||||||
{ MAKE_CONTROLLER_ID( 0x3285, 0x0d18 ), k_eControllerType_PS5Controller, NULL }, // NACON Revolution 5 Pro (PS5 mode with dongle)
|
{ MAKE_CONTROLLER_ID( 0x3285, 0x0d18 ), k_eControllerType_PS5Controller, NULL }, // NACON Revolution 5 Pro (PS5 mode with dongle)
|
||||||
{ MAKE_CONTROLLER_ID( 0x3285, 0x0d19 ), k_eControllerType_PS5Controller, NULL }, // NACON Revolution 5 Pro (PS5 mode wired)
|
{ MAKE_CONTROLLER_ID( 0x3285, 0x0d19 ), k_eControllerType_PS5Controller, NULL }, // NACON Revolution 5 Pro (PS5 mode wired)
|
||||||
{ MAKE_CONTROLLER_ID( 0x358a, 0x0104 ), k_eControllerType_PS5Controller, NULL }, // Backbone One PlayStation Edition for iOS
|
{ MAKE_CONTROLLER_ID( 0x358a, 0x0104 ), k_eControllerType_PS5Controller, NULL }, // Backbone One PlayStation Edition for iOS
|
||||||
@@ -593,7 +595,7 @@ static const ControllerDescription_t arrControllers[] = {
|
|||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1102 ), k_eControllerType_SteamController, NULL }, // Valve wired Steam Controller (D0G)
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1102 ), k_eControllerType_SteamController, NULL }, // Valve wired Steam Controller (D0G)
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1105 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1105 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1106 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1106 ), k_eControllerType_SteamController, NULL }, // Valve Bluetooth Steam Controller (D0G)
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x11ff ), k_eControllerType_UnknownNonSteamController, "Steam Virtual Gamepad" }, // Steam virtual gamepad
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x11ff ), k_eControllerType_UnknownNonSteamController, NULL }, // Steam Virtual Gamepad
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1142 ), k_eControllerType_SteamController, NULL }, // Valve wireless Steam Controller
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1142 ), k_eControllerType_SteamController, NULL }, // Valve wireless Steam Controller
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1201 ), k_eControllerType_SteamControllerV2, NULL }, // Valve wired Steam Controller (HEADCRAB)
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1201 ), k_eControllerType_SteamControllerV2, NULL }, // Valve wired Steam Controller (HEADCRAB)
|
||||||
{ MAKE_CONTROLLER_ID( 0x28de, 0x1202 ), k_eControllerType_SteamControllerV2, NULL }, // Valve Bluetooth Steam Controller (HEADCRAB)
|
{ MAKE_CONTROLLER_ID( 0x28de, 0x1202 ), k_eControllerType_SteamControllerV2, NULL }, // Valve Bluetooth Steam Controller (HEADCRAB)
|
||||||
|
|||||||
@@ -584,7 +584,13 @@ static SDL_bool HIDAPI_DriverPS3ThirdParty_IsSupportedDevice(SDL_HIDAPI_Device *
|
|||||||
Uint8 data[USB_PACKET_LENGTH];
|
Uint8 data[USB_PACKET_LENGTH];
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
if (HIDAPI_SupportsPlaystationDetection(vendor_id, product_id)) {
|
if (vendor_id == USB_VENDOR_LOGITECH &&
|
||||||
|
product_id == USB_PRODUCT_LOGITECH_CHILLSTREAM) {
|
||||||
|
return SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((type == SDL_CONTROLLER_TYPE_PS3 && vendor_id != USB_VENDOR_SONY) ||
|
||||||
|
HIDAPI_SupportsPlaystationDetection(vendor_id, product_id)) {
|
||||||
if (device && device->dev) {
|
if (device && device->dev) {
|
||||||
size = ReadFeatureReport(device->dev, 0x03, data, sizeof(data));
|
size = ReadFeatureReport(device->dev, 0x03, data, sizeof(data));
|
||||||
if (size == 8 && data[2] == 0x26) {
|
if (size == 8 && data[2] == 0x26) {
|
||||||
@@ -768,7 +774,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket18(SDL_Joystick *joystic
|
|||||||
0, /* SDL_GAMEPAD_BUTTON_LEFT_STICK */
|
0, /* SDL_GAMEPAD_BUTTON_LEFT_STICK */
|
||||||
0, /* SDL_GAMEPAD_BUTTON_RIGHT_STICK */
|
0, /* SDL_GAMEPAD_BUTTON_RIGHT_STICK */
|
||||||
14, /* SDL_GAMEPAD_BUTTON_LEFT_SHOULDER */
|
14, /* SDL_GAMEPAD_BUTTON_LEFT_SHOULDER */
|
||||||
16, /* SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER */
|
15, /* SDL_GAMEPAD_BUTTON_RIGHT_SHOULDER */
|
||||||
8, /* SDL_GAMEPAD_BUTTON_DPAD_UP */
|
8, /* SDL_GAMEPAD_BUTTON_DPAD_UP */
|
||||||
9, /* SDL_GAMEPAD_BUTTON_DPAD_DOWN */
|
9, /* SDL_GAMEPAD_BUTTON_DPAD_DOWN */
|
||||||
7, /* SDL_GAMEPAD_BUTTON_DPAD_LEFT */
|
7, /* SDL_GAMEPAD_BUTTON_DPAD_LEFT */
|
||||||
@@ -813,6 +819,13 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic
|
|||||||
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[1] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_GUIDE, (data[1] & 0x10) ? SDL_PRESSED : SDL_RELEASED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->device->vendor_id == USB_VENDOR_SAITEK && ctx->device->product_id == USB_PRODUCT_SAITEK_CYBORG_V3) {
|
||||||
|
/* Cyborg V.3 Rumble Pad doesn't set the dpad bits as expected, so use the axes instead */
|
||||||
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_DOWN, data[10] ? SDL_PRESSED : SDL_RELEASED);
|
||||||
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_UP, data[9] ? SDL_PRESSED : SDL_RELEASED);
|
||||||
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, data[7] ? SDL_PRESSED : SDL_RELEASED);
|
||||||
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, data[8] ? SDL_PRESSED : SDL_RELEASED);
|
||||||
|
} else {
|
||||||
if (ctx->last_state[2] != data[2]) {
|
if (ctx->last_state[2] != data[2]) {
|
||||||
SDL_bool dpad_up = SDL_FALSE;
|
SDL_bool dpad_up = SDL_FALSE;
|
||||||
SDL_bool dpad_down = SDL_FALSE;
|
SDL_bool dpad_down = SDL_FALSE;
|
||||||
@@ -856,6 +869,7 @@ static void HIDAPI_DriverPS3ThirdParty_HandleStatePacket19(SDL_Joystick *joystic
|
|||||||
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, dpad_right);
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, dpad_right);
|
||||||
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
|
SDL_PrivateJoystickButton(joystick, SDL_CONTROLLER_BUTTON_DPAD_LEFT, dpad_left);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
axis = ((int)data[17] * 257) - 32768;
|
axis = ((int)data[17] * 257) - 32768;
|
||||||
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
SDL_PrivateJoystickAxis(joystick, SDL_CONTROLLER_AXIS_TRIGGERLEFT, axis);
|
||||||
|
|||||||
@@ -499,6 +499,12 @@ static SDL_bool HIDAPI_DriverPS5_InitDevice(SDL_HIDAPI_Device *device)
|
|||||||
ctx->sensors_supported = SDL_TRUE;
|
ctx->sensors_supported = SDL_TRUE;
|
||||||
ctx->touchpad_supported = SDL_TRUE;
|
ctx->touchpad_supported = SDL_TRUE;
|
||||||
ctx->use_alternate_report = SDL_TRUE;
|
ctx->use_alternate_report = SDL_TRUE;
|
||||||
|
} else if (device->vendor_id == USB_VENDOR_RAZER &&
|
||||||
|
device->product_id == USB_PRODUCT_RAZER_KITSUNE) {
|
||||||
|
/* The Razer Kitsune doesn't respond to the detection protocol, but has a touchpad */
|
||||||
|
joystick_type = SDL_JOYSTICK_TYPE_ARCADE_STICK;
|
||||||
|
ctx->touchpad_supported = SDL_TRUE;
|
||||||
|
ctx->use_alternate_report = SDL_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ctx->effects_supported = (ctx->lightbar_supported || ctx->vibration_supported || ctx->playerled_supported);
|
ctx->effects_supported = (ctx->lightbar_supported || ctx->vibration_supported || ctx->playerled_supported);
|
||||||
|
|||||||
@@ -758,7 +758,18 @@ static Uint8 GetDefaultInputMode(SDL_DriverSwitch_Context *ctx)
|
|||||||
* battery level over Bluetooth anyway.
|
* battery level over Bluetooth anyway.
|
||||||
*/
|
*/
|
||||||
if (ctx->device->vendor_id == USB_VENDOR_NINTENDO) {
|
if (ctx->device->vendor_id == USB_VENDOR_NINTENDO) {
|
||||||
|
/* However, switching to full controller state breaks DirectInput, so let's not do that */
|
||||||
|
#if 0
|
||||||
input_mode = k_eSwitchInputReportIDs_FullControllerState;
|
input_mode = k_eSwitchInputReportIDs_FullControllerState;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* However, Joy-Con controllers switch their thumbsticks into D-pad mode in simple mode,
|
||||||
|
* so let's enable full controller state for them.
|
||||||
|
*/
|
||||||
|
if (ctx->device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_LEFT ||
|
||||||
|
ctx->device->product_id == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_RIGHT) {
|
||||||
|
input_mode = k_eSwitchInputReportIDs_FullControllerState;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return input_mode;
|
return input_mode;
|
||||||
}
|
}
|
||||||
@@ -1292,6 +1303,27 @@ static void UpdateDeviceIdentity(SDL_HIDAPI_Device *device)
|
|||||||
break;
|
break;
|
||||||
case k_eSwitchDeviceInfoControllerType_Unknown:
|
case k_eSwitchDeviceInfoControllerType_Unknown:
|
||||||
/* We couldn't read the device info for this controller, might not be fully compliant */
|
/* We couldn't read the device info for this controller, might not be fully compliant */
|
||||||
|
if (device->vendor_id == USB_VENDOR_NINTENDO) {
|
||||||
|
switch (device->product_id) {
|
||||||
|
case USB_PRODUCT_NINTENDO_SWITCH_JOYCON_LEFT:
|
||||||
|
ctx->m_eControllerType = k_eSwitchDeviceInfoControllerType_JoyConLeft;
|
||||||
|
HIDAPI_SetDeviceName(device, "Nintendo Switch Joy-Con (L)");
|
||||||
|
device->type = SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT;
|
||||||
|
break;
|
||||||
|
case USB_PRODUCT_NINTENDO_SWITCH_JOYCON_RIGHT:
|
||||||
|
ctx->m_eControllerType = k_eSwitchDeviceInfoControllerType_JoyConRight;
|
||||||
|
HIDAPI_SetDeviceName(device, "Nintendo Switch Joy-Con (R)");
|
||||||
|
device->type = SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT;
|
||||||
|
break;
|
||||||
|
case USB_PRODUCT_NINTENDO_SWITCH_PRO:
|
||||||
|
ctx->m_eControllerType = k_eSwitchDeviceInfoControllerType_ProController;
|
||||||
|
HIDAPI_SetDeviceName(device, "Nintendo Switch Pro Controller");
|
||||||
|
device->type = SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
device->type = SDL_CONTROLLER_TYPE_UNKNOWN;
|
device->type = SDL_CONTROLLER_TYPE_UNKNOWN;
|
||||||
@@ -2211,6 +2243,10 @@ static SDL_bool HIDAPI_DriverSwitch_UpdateDevice(SDL_HIDAPI_Device *device)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->m_rgucReadBuffer[0] == k_eSwitchInputReportIDs_SubcommandReply) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->m_bInputOnly) {
|
if (ctx->m_bInputOnly) {
|
||||||
HandleInputOnlyControllerState(joystick, ctx, (SwitchInputOnlyControllerStatePacket_t *)&ctx->m_rgucReadBuffer[0]);
|
HandleInputOnlyControllerState(joystick, ctx, (SwitchInputOnlyControllerStatePacket_t *)&ctx->m_rgucReadBuffer[0]);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -157,16 +157,12 @@ SDL_bool HIDAPI_SupportsPlaystationDetection(Uint16 vendor, Uint16 product)
|
|||||||
case USB_VENDOR_HORI:
|
case USB_VENDOR_HORI:
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
case USB_VENDOR_LOGITECH:
|
case USB_VENDOR_LOGITECH:
|
||||||
/* Most Logitech devices are fine with this, but there are a few exceptions */
|
/* Most Logitech devices are not PlayStation controllers, and some of them
|
||||||
if (product == USB_PRODUCT_LOGITECH_F310) {
|
* lock up or reset when we send them the Sony third-party query feature
|
||||||
/* The Logitech F310 gamepad will lock up */
|
* report, so don't include that vendor here. Instead add devices as
|
||||||
|
* appropriate to controller_list.h
|
||||||
|
*/
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
|
||||||
if (product == 0xc33f) {
|
|
||||||
/* The Logitech G815 keyboard will reset the LEDs */
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
|
||||||
return SDL_TRUE;
|
|
||||||
case USB_VENDOR_MADCATZ:
|
case USB_VENDOR_MADCATZ:
|
||||||
if (product == USB_PRODUCT_MADCATZ_SAITEK_SIDE_PANEL_CONTROL_DECK) {
|
if (product == USB_PRODUCT_MADCATZ_SAITEK_SIDE_PANEL_CONTROL_DECK) {
|
||||||
/* This is not a Playstation compatible device */
|
/* This is not a Playstation compatible device */
|
||||||
@@ -187,10 +183,10 @@ SDL_bool HIDAPI_SupportsPlaystationDetection(Uint16 vendor, Uint16 product)
|
|||||||
case USB_VENDOR_QANBA:
|
case USB_VENDOR_QANBA:
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
case USB_VENDOR_RAZER:
|
case USB_VENDOR_RAZER:
|
||||||
/* Most Razer devices are not game controllers, and some of them lock up
|
/* Most Razer devices are not PlayStation controllers, and some of them
|
||||||
* or reset when we send them the Sony third-party query feature report,
|
* lock up or reset when we send them the Sony third-party query feature
|
||||||
* so don't include that vendor here. Instead add devices as appropriate
|
* report, so don't include that vendor here. Instead add devices as
|
||||||
* to controller_type.c
|
* appropriate to controller_list.h
|
||||||
*
|
*
|
||||||
* Reference: https://github.com/libsdl-org/SDL/issues/6733
|
* Reference: https://github.com/libsdl-org/SDL/issues/6733
|
||||||
* https://github.com/libsdl-org/SDL/issues/6799
|
* https://github.com/libsdl-org/SDL/issues/6799
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ static int GuessIsSensor(int fd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int IsJoystick(const char *path, int fd, char **name_return, Uint16 *vendor_return, Uint16 *product_return, SDL_JoystickGUID *guid)
|
static int IsJoystick(const char *path, int *fd, char **name_return, Uint16 *vendor_return, Uint16 *product_return, SDL_JoystickGUID *guid)
|
||||||
{
|
{
|
||||||
struct input_id inpid;
|
struct input_id inpid;
|
||||||
char *name;
|
char *name;
|
||||||
@@ -282,21 +282,32 @@ static int IsJoystick(const char *path, int fd, char **name_return, Uint16 *vend
|
|||||||
|
|
||||||
SDL_zero(inpid);
|
SDL_zero(inpid);
|
||||||
#ifdef SDL_USE_LIBUDEV
|
#ifdef SDL_USE_LIBUDEV
|
||||||
SDL_UDEV_GetProductInfo(path, &inpid.vendor, &inpid.product, &inpid.version, &class);
|
/* Opening input devices can generate synchronous device I/O, so avoid it if we can */
|
||||||
|
if (SDL_UDEV_GetProductInfo(path, &inpid.vendor, &inpid.product, &inpid.version, &class) &&
|
||||||
|
!(class & SDL_UDEV_DEVICE_JOYSTICK)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ioctl(fd, JSIOCGNAME(sizeof(product_string)), product_string) <= 0) {
|
|
||||||
/* When udev is enabled we only get joystick devices here, so there's no need to test them */
|
if (fd && *fd < 0) {
|
||||||
if (enumeration_method != ENUMERATION_LIBUDEV &&
|
*fd = open(path, O_RDONLY | O_CLOEXEC, 0);
|
||||||
!(class & SDL_UDEV_DEVICE_JOYSTICK) && ( class || !GuessIsJoystick(fd))) {
|
}
|
||||||
|
if (!fd || *fd < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioctl(*fd, JSIOCGNAME(sizeof(product_string)), product_string) <= 0) {
|
||||||
|
/* When udev enumeration or classification, we only got joysticks here, so no need to test */
|
||||||
|
if (enumeration_method != ENUMERATION_LIBUDEV && !class && !GuessIsJoystick(*fd)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Could have vendor and product already from udev, but should agree with evdev */
|
/* Could have vendor and product already from udev, but should agree with evdev */
|
||||||
if (ioctl(fd, EVIOCGID, &inpid) < 0) {
|
if (ioctl(*fd, EVIOCGID, &inpid) < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(fd, EVIOCGNAME(sizeof(product_string)), product_string) < 0) {
|
if (ioctl(*fd, EVIOCGNAME(sizeof(product_string)), product_string) < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -315,7 +326,7 @@ static int IsJoystick(const char *path, int fd, char **name_return, Uint16 *vend
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FixupDeviceInfoForMapping(fd, &inpid);
|
FixupDeviceInfoForMapping(*fd, &inpid);
|
||||||
|
|
||||||
#ifdef DEBUG_JOYSTICK
|
#ifdef DEBUG_JOYSTICK
|
||||||
SDL_Log("Joystick: %s, bustype = %d, vendor = 0x%.4x, product = 0x%.4x, version = %d\n", name, inpid.bustype, inpid.vendor, inpid.product, inpid.version);
|
SDL_Log("Joystick: %s, bustype = %d, vendor = 0x%.4x, product = 0x%.4x, version = %d\n", name, inpid.bustype, inpid.vendor, inpid.product, inpid.version);
|
||||||
@@ -333,11 +344,32 @@ static int IsJoystick(const char *path, int fd, char **name_return, Uint16 *vend
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int IsSensor(const char *path, int fd)
|
static int IsSensor(const char *path, int *fd)
|
||||||
{
|
{
|
||||||
struct input_id inpid;
|
struct input_id inpid;
|
||||||
|
int class = 0;
|
||||||
|
|
||||||
if (ioctl(fd, EVIOCGID, &inpid) < 0) {
|
SDL_zero(inpid);
|
||||||
|
#ifdef SDL_USE_LIBUDEV
|
||||||
|
/* Opening input devices can generate synchronous device I/O, so avoid it if we can */
|
||||||
|
if (SDL_UDEV_GetProductInfo(path, &inpid.vendor, &inpid.product, &inpid.version, &class) &&
|
||||||
|
!(class & SDL_UDEV_DEVICE_ACCELEROMETER)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (fd && *fd < 0) {
|
||||||
|
*fd = open(path, O_RDONLY | O_CLOEXEC, 0);
|
||||||
|
}
|
||||||
|
if (!fd || *fd < 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!class && !GuessIsSensor(*fd)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ioctl(*fd, EVIOCGID, &inpid) < 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -347,7 +379,7 @@ static int IsSensor(const char *path, int fd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GuessIsSensor(fd);
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SDL_USE_LIBUDEV
|
#ifdef SDL_USE_LIBUDEV
|
||||||
@@ -434,16 +466,11 @@ static void MaybeAddDevice(const char *path)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fd = open(path, O_RDONLY | O_CLOEXEC, 0);
|
|
||||||
if (fd < 0) {
|
|
||||||
goto done;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG_INPUT_EVENTS
|
#ifdef DEBUG_INPUT_EVENTS
|
||||||
SDL_Log("Checking %s\n", path);
|
SDL_Log("Checking %s\n", path);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (IsJoystick(path, fd, &name, &vendor, &product, &guid)) {
|
if (IsJoystick(path, &fd, &name, &vendor, &product, &guid)) {
|
||||||
#ifdef DEBUG_INPUT_EVENTS
|
#ifdef DEBUG_INPUT_EVENTS
|
||||||
SDL_Log("found joystick: %s\n", path);
|
SDL_Log("found joystick: %s\n", path);
|
||||||
#endif
|
#endif
|
||||||
@@ -484,7 +511,7 @@ static void MaybeAddDevice(const char *path)
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsSensor(path, fd)) {
|
if (IsSensor(path, &fd)) {
|
||||||
#ifdef DEBUG_INPUT_EVENTS
|
#ifdef DEBUG_INPUT_EVENTS
|
||||||
SDL_Log("found sensor: %s\n", path);
|
SDL_Log("found sensor: %s\n", path);
|
||||||
#endif
|
#endif
|
||||||
@@ -880,11 +907,24 @@ static void LINUX_ScanSteamVirtualGamepads(void)
|
|||||||
int num_virtual_gamepads = 0;
|
int num_virtual_gamepads = 0;
|
||||||
int virtual_gamepad_slot;
|
int virtual_gamepad_slot;
|
||||||
VirtualGamepadEntry *virtual_gamepads = NULL;
|
VirtualGamepadEntry *virtual_gamepads = NULL;
|
||||||
|
#ifdef SDL_USE_LIBUDEV
|
||||||
|
int class;
|
||||||
|
#endif
|
||||||
|
|
||||||
count = scandir("/dev/input", &entries, filter_entries, NULL);
|
count = scandir("/dev/input", &entries, filter_entries, NULL);
|
||||||
for (i = 0; i < count; ++i) {
|
for (i = 0; i < count; ++i) {
|
||||||
(void)SDL_snprintf(path, SDL_arraysize(path), "/dev/input/%s", entries[i]->d_name);
|
(void)SDL_snprintf(path, SDL_arraysize(path), "/dev/input/%s", entries[i]->d_name);
|
||||||
|
|
||||||
|
#ifdef SDL_USE_LIBUDEV
|
||||||
|
/* Opening input devices can generate synchronous device I/O, so avoid it if we can */
|
||||||
|
class = 0;
|
||||||
|
SDL_zero(inpid);
|
||||||
|
if (SDL_UDEV_GetProductInfo(path, &inpid.vendor, &inpid.product, &inpid.version, &class) &&
|
||||||
|
(inpid.vendor != USB_VENDOR_VALVE || inpid.product != USB_PRODUCT_STEAM_VIRTUAL_GAMEPAD)) {
|
||||||
|
free(entries[i]); /* This should NOT be SDL_free() */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
fd = open(path, O_RDONLY | O_CLOEXEC, 0);
|
fd = open(path, O_RDONLY | O_CLOEXEC, 0);
|
||||||
if (fd >= 0) {
|
if (fd >= 0) {
|
||||||
if (ioctl(fd, EVIOCGID, &inpid) == 0 &&
|
if (ioctl(fd, EVIOCGID, &inpid) == 0 &&
|
||||||
@@ -986,6 +1026,9 @@ static void LINUX_JoystickDetect(void)
|
|||||||
static int LINUX_JoystickInit(void)
|
static int LINUX_JoystickInit(void)
|
||||||
{
|
{
|
||||||
const char *devices = SDL_GetHint(SDL_HINT_JOYSTICK_DEVICE);
|
const char *devices = SDL_GetHint(SDL_HINT_JOYSTICK_DEVICE);
|
||||||
|
#ifdef SDL_USE_LIBUDEV
|
||||||
|
int udev_status = SDL_UDEV_Init();
|
||||||
|
#endif
|
||||||
|
|
||||||
SDL_classic_joysticks = SDL_GetHintBoolean(SDL_HINT_LINUX_JOYSTICK_CLASSIC, SDL_FALSE);
|
SDL_classic_joysticks = SDL_GetHintBoolean(SDL_HINT_LINUX_JOYSTICK_CLASSIC, SDL_FALSE);
|
||||||
|
|
||||||
@@ -1036,7 +1079,7 @@ static int LINUX_JoystickInit(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (enumeration_method == ENUMERATION_LIBUDEV) {
|
if (enumeration_method == ENUMERATION_LIBUDEV) {
|
||||||
if (SDL_UDEV_Init() == 0) {
|
if (udev_status == 0) {
|
||||||
/* Set up the udev callback */
|
/* Set up the udev callback */
|
||||||
if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
|
if (SDL_UDEV_AddCallback(joystick_udev_callback) < 0) {
|
||||||
SDL_UDEV_Quit();
|
SDL_UDEV_Quit();
|
||||||
|
|||||||
@@ -47,6 +47,7 @@
|
|||||||
#define USB_VENDOR_POWERA_ALT 0x20d6
|
#define USB_VENDOR_POWERA_ALT 0x20d6
|
||||||
#define USB_VENDOR_QANBA 0x2c22
|
#define USB_VENDOR_QANBA 0x2c22
|
||||||
#define USB_VENDOR_RAZER 0x1532
|
#define USB_VENDOR_RAZER 0x1532
|
||||||
|
#define USB_VENDOR_SAITEK 0x06a3
|
||||||
#define USB_VENDOR_SHANWAN 0x2563
|
#define USB_VENDOR_SHANWAN 0x2563
|
||||||
#define USB_VENDOR_SHANWAN_ALT 0x20bc
|
#define USB_VENDOR_SHANWAN_ALT 0x20bc
|
||||||
#define USB_VENDOR_SONY 0x054c
|
#define USB_VENDOR_SONY 0x054c
|
||||||
@@ -90,6 +91,7 @@
|
|||||||
#define USB_PRODUCT_NVIDIA_SHIELD_CONTROLLER_V103 0x7210
|
#define USB_PRODUCT_NVIDIA_SHIELD_CONTROLLER_V103 0x7210
|
||||||
#define USB_PRODUCT_NVIDIA_SHIELD_CONTROLLER_V104 0x7214
|
#define USB_PRODUCT_NVIDIA_SHIELD_CONTROLLER_V104 0x7214
|
||||||
#define USB_PRODUCT_RAZER_ATROX 0x0a00
|
#define USB_PRODUCT_RAZER_ATROX 0x0a00
|
||||||
|
#define USB_PRODUCT_RAZER_KITSUNE 0x1012
|
||||||
#define USB_PRODUCT_RAZER_PANTHERA 0x0401
|
#define USB_PRODUCT_RAZER_PANTHERA 0x0401
|
||||||
#define USB_PRODUCT_RAZER_PANTHERA_EVO 0x1008
|
#define USB_PRODUCT_RAZER_PANTHERA_EVO 0x1008
|
||||||
#define USB_PRODUCT_RAZER_RAIJU 0x1000
|
#define USB_PRODUCT_RAZER_RAIJU 0x1000
|
||||||
@@ -103,6 +105,7 @@
|
|||||||
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_PS5_WIRELESS 0x100c
|
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_PS5_WIRELESS 0x100c
|
||||||
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRED 0x1010
|
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRED 0x1010
|
||||||
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRELESS 0x1011
|
#define USB_PRODUCT_RAZER_WOLVERINE_V2_PRO_XBOX_WIRELESS 0x1011
|
||||||
|
#define USB_PRODUCT_SAITEK_CYBORG_V3 0xf622
|
||||||
#define USB_PRODUCT_SHANWAN_DS3 0x0523
|
#define USB_PRODUCT_SHANWAN_DS3 0x0523
|
||||||
#define USB_PRODUCT_SONY_DS3 0x0268
|
#define USB_PRODUCT_SONY_DS3 0x0268
|
||||||
#define USB_PRODUCT_SONY_DS4 0x05c4
|
#define USB_PRODUCT_SONY_DS4 0x05c4
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,30,2,0
|
FILEVERSION 2,30,4,0
|
||||||
PRODUCTVERSION 2,30,2,0
|
PRODUCTVERSION 2,30,4,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
FILEFLAGS 0x0L
|
FILEFLAGS 0x0L
|
||||||
FILEOS 0x40004L
|
FILEOS 0x40004L
|
||||||
@@ -23,12 +23,12 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "\0"
|
VALUE "CompanyName", "\0"
|
||||||
VALUE "FileDescription", "SDL\0"
|
VALUE "FileDescription", "SDL\0"
|
||||||
VALUE "FileVersion", "2, 30, 2, 0\0"
|
VALUE "FileVersion", "2, 30, 4, 0\0"
|
||||||
VALUE "InternalName", "SDL\0"
|
VALUE "InternalName", "SDL\0"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
|
VALUE "LegalCopyright", "Copyright (C) 2024 Sam Lantinga\0"
|
||||||
VALUE "OriginalFilename", "SDL2.dll\0"
|
VALUE "OriginalFilename", "SDL2.dll\0"
|
||||||
VALUE "ProductName", "Simple DirectMedia Layer\0"
|
VALUE "ProductName", "Simple DirectMedia Layer\0"
|
||||||
VALUE "ProductVersion", "2, 30, 2, 0\0"
|
VALUE "ProductVersion", "2, 30, 4, 0\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|||||||
@@ -48,6 +48,7 @@
|
|||||||
#include <dxgi1_6.h>
|
#include <dxgi1_6.h>
|
||||||
#include <dxgidebug.h>
|
#include <dxgidebug.h>
|
||||||
#include <d3d12sdklayers.h>
|
#include <d3d12sdklayers.h>
|
||||||
|
#include <sdkddkver.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "SDL_shaders_d3d12.h"
|
#include "SDL_shaders_d3d12.h"
|
||||||
@@ -58,6 +59,11 @@
|
|||||||
#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
|
#define SDL_COMPOSE_ERROR(str) SDL_STRINGIFY_ARG(__FUNCTION__) ", " str
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* DXGI_PRESENT flags are removed on Xbox */
|
||||||
|
#if defined(__XBOXONE__) || defined(__XBOXSERIES__)
|
||||||
|
#define DXGI_PRESENT_ALLOW_TEARING 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#define SAFE_RELEASE(X) \
|
#define SAFE_RELEASE(X) \
|
||||||
if (X) { \
|
if (X) { \
|
||||||
@@ -78,6 +84,54 @@
|
|||||||
#define D3D_GUID(X) &(X)
|
#define D3D_GUID(X) &(X)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Older MS Windows SDK headers declare some d3d12 functions with the wrong function prototype.
|
||||||
|
* - ID3D12Heap::GetDesc
|
||||||
|
* - ID3D12Resource::GetDesc
|
||||||
|
* - ID3D12DescriptorHeap::GetDesc
|
||||||
|
* (and 9 more)+
|
||||||
|
* This is fixed in SDKs since WDK_NTDDI_VERSION >= NTDDI_WIN10_FE (0x0A00000A)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if !(defined(__MINGW32__) || defined(__XBOXONE__) || defined(__XBOXSERIES__)) \
|
||||||
|
&& (WDK_NTDDI_VERSION < 0x0A00000A)
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(THIS, ...) do { \
|
||||||
|
void (STDMETHODCALLTYPE * func)(ID3D12DescriptorHeap * This, D3D12_CPU_DESCRIPTOR_HANDLE * Handle) = \
|
||||||
|
(void*)(THIS)->lpVtbl->GetCPUDescriptorHandleForHeapStart; \
|
||||||
|
func((THIS), ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(THIS, ...) do { \
|
||||||
|
void (STDMETHODCALLTYPE * func)(ID3D12DescriptorHeap * This, D3D12_GPU_DESCRIPTOR_HANDLE * Handle) = \
|
||||||
|
(void*)(THIS)->lpVtbl->GetGPUDescriptorHandleForHeapStart; \
|
||||||
|
func((THIS), ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12Resource_GetDesc(THIS, ...) do { \
|
||||||
|
void (STDMETHODCALLTYPE * func)(ID3D12Resource * This, D3D12_RESOURCE_DESC * Desc) = \
|
||||||
|
(void*)(THIS)->lpVtbl->GetDesc; \
|
||||||
|
func((THIS), ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MinGW has correct function prototypes in the vtables, but defines wrong functions
|
||||||
|
* Xbox just needs these macros defined as used below (because CINTERFACE doesn't exist)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(THIS, ...) \
|
||||||
|
D3D_CALL_RET(THIS, GetCPUDescriptorHandleForHeapStart, ##__VA_ARGS__);
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(THIS, ...) \
|
||||||
|
D3D_CALL_RET(THIS, GetGPUDescriptorHandleForHeapStart, ##__VA_ARGS__);
|
||||||
|
|
||||||
|
#define D3D_CALL_RET_ID3D12Resource_GetDesc(THIS, ...) \
|
||||||
|
D3D_CALL_RET(THIS, GetDesc, ##__VA_ARGS__);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Set up for C function definitions, even when using C++ */
|
/* Set up for C function definitions, even when using C++ */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -393,10 +447,10 @@ static D3D12_GPU_DESCRIPTOR_HANDLE D3D12_CPUtoGPUHandle(ID3D12DescriptorHeap *he
|
|||||||
SIZE_T offset;
|
SIZE_T offset;
|
||||||
|
|
||||||
/* Calculate the correct offset into the heap */
|
/* Calculate the correct offset into the heap */
|
||||||
D3D_CALL_RET(heap, GetCPUDescriptorHandleForHeapStart, &CPUHeapStart);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(heap, &CPUHeapStart);
|
||||||
offset = CPUHandle.ptr - CPUHeapStart.ptr;
|
offset = CPUHandle.ptr - CPUHeapStart.ptr;
|
||||||
|
|
||||||
D3D_CALL_RET(heap, GetGPUDescriptorHandleForHeapStart, &GPUHandle);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetGPUDescriptorHandleForHeapStart(heap, &GPUHandle);
|
||||||
GPUHandle.ptr += offset;
|
GPUHandle.ptr += offset;
|
||||||
|
|
||||||
return GPUHandle;
|
return GPUHandle;
|
||||||
@@ -427,7 +481,7 @@ static D3D12_CPU_DESCRIPTOR_HANDLE D3D12_GetCurrentRenderTargetView(SDL_Renderer
|
|||||||
}
|
}
|
||||||
|
|
||||||
SDL_zero(rtvDescriptor);
|
SDL_zero(rtvDescriptor);
|
||||||
D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(data->rtvDescriptorHeap, &rtvDescriptor);
|
||||||
rtvDescriptor.ptr += data->currentBackBufferIndex * data->rtvDescriptorSize;
|
rtvDescriptor.ptr += data->currentBackBufferIndex * data->rtvDescriptorSize;
|
||||||
return rtvDescriptor;
|
return rtvDescriptor;
|
||||||
}
|
}
|
||||||
@@ -1047,7 +1101,7 @@ static HRESULT D3D12_CreateDeviceResources(SDL_Renderer *renderer)
|
|||||||
samplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
|
samplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
|
||||||
samplerDesc.MinLOD = 0.0f;
|
samplerDesc.MinLOD = 0.0f;
|
||||||
samplerDesc.MaxLOD = D3D12_FLOAT32_MAX;
|
samplerDesc.MaxLOD = D3D12_FLOAT32_MAX;
|
||||||
D3D_CALL_RET(data->samplerDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &data->nearestPixelSampler);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(data->samplerDescriptorHeap, &data->nearestPixelSampler);
|
||||||
D3D_CALL(data->d3dDevice, CreateSampler, &samplerDesc, data->nearestPixelSampler);
|
D3D_CALL(data->d3dDevice, CreateSampler, &samplerDesc, data->nearestPixelSampler);
|
||||||
|
|
||||||
samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
|
samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
|
||||||
@@ -1336,7 +1390,7 @@ static HRESULT D3D12_CreateWindowSizeDependentResources(SDL_Renderer *renderer)
|
|||||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||||
|
|
||||||
SDL_zero(rtvDescriptor);
|
SDL_zero(rtvDescriptor);
|
||||||
D3D_CALL_RET(data->rtvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &rtvDescriptor);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(data->rtvDescriptorHeap, &rtvDescriptor);
|
||||||
rtvDescriptor.ptr += i * data->rtvDescriptorSize;
|
rtvDescriptor.ptr += i * data->rtvDescriptorSize;
|
||||||
D3D_CALL(data->d3dDevice, CreateRenderTargetView, data->renderTargets[i], &rtvDesc, rtvDescriptor);
|
D3D_CALL(data->d3dDevice, CreateRenderTargetView, data->renderTargets[i], &rtvDesc, rtvDescriptor);
|
||||||
}
|
}
|
||||||
@@ -1550,7 +1604,7 @@ static int D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
resourceViewDesc.Texture2D.MipLevels = textureDesc.MipLevels;
|
resourceViewDesc.Texture2D.MipLevels = textureDesc.MipLevels;
|
||||||
|
|
||||||
textureData->mainSRVIndex = D3D12_GetAvailableSRVIndex(renderer);
|
textureData->mainSRVIndex = D3D12_GetAvailableSRVIndex(renderer);
|
||||||
D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceView);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(rendererData->srvDescriptorHeap, &textureData->mainTextureResourceView);
|
||||||
textureData->mainTextureResourceView.ptr += textureData->mainSRVIndex * rendererData->srvDescriptorSize;
|
textureData->mainTextureResourceView.ptr += textureData->mainSRVIndex * rendererData->srvDescriptorSize;
|
||||||
|
|
||||||
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
||||||
@@ -1559,7 +1613,7 @@ static int D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
textureData->mainTextureResourceView);
|
textureData->mainTextureResourceView);
|
||||||
#if SDL_HAVE_YUV
|
#if SDL_HAVE_YUV
|
||||||
if (textureData->yuv) {
|
if (textureData->yuv) {
|
||||||
D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewU);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(rendererData->srvDescriptorHeap, &textureData->mainTextureResourceViewU);
|
||||||
textureData->mainSRVIndexU = D3D12_GetAvailableSRVIndex(renderer);
|
textureData->mainSRVIndexU = D3D12_GetAvailableSRVIndex(renderer);
|
||||||
textureData->mainTextureResourceViewU.ptr += textureData->mainSRVIndexU * rendererData->srvDescriptorSize;
|
textureData->mainTextureResourceViewU.ptr += textureData->mainSRVIndexU * rendererData->srvDescriptorSize;
|
||||||
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
||||||
@@ -1567,7 +1621,7 @@ static int D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
&resourceViewDesc,
|
&resourceViewDesc,
|
||||||
textureData->mainTextureResourceViewU);
|
textureData->mainTextureResourceViewU);
|
||||||
|
|
||||||
D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewV);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(rendererData->srvDescriptorHeap, &textureData->mainTextureResourceViewV);
|
||||||
textureData->mainSRVIndexV = D3D12_GetAvailableSRVIndex(renderer);
|
textureData->mainSRVIndexV = D3D12_GetAvailableSRVIndex(renderer);
|
||||||
textureData->mainTextureResourceViewV.ptr += textureData->mainSRVIndexV * rendererData->srvDescriptorSize;
|
textureData->mainTextureResourceViewV.ptr += textureData->mainSRVIndexV * rendererData->srvDescriptorSize;
|
||||||
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
||||||
@@ -1581,7 +1635,7 @@ static int D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
|
|
||||||
nvResourceViewDesc.Format = DXGI_FORMAT_R8G8_UNORM;
|
nvResourceViewDesc.Format = DXGI_FORMAT_R8G8_UNORM;
|
||||||
|
|
||||||
D3D_CALL_RET(rendererData->srvDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureResourceViewNV);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(rendererData->srvDescriptorHeap, &textureData->mainTextureResourceViewNV);
|
||||||
textureData->mainSRVIndexNV = D3D12_GetAvailableSRVIndex(renderer);
|
textureData->mainSRVIndexNV = D3D12_GetAvailableSRVIndex(renderer);
|
||||||
textureData->mainTextureResourceViewNV.ptr += textureData->mainSRVIndexNV * rendererData->srvDescriptorSize;
|
textureData->mainTextureResourceViewNV.ptr += textureData->mainSRVIndexNV * rendererData->srvDescriptorSize;
|
||||||
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
D3D_CALL(rendererData->d3dDevice, CreateShaderResourceView,
|
||||||
@@ -1598,7 +1652,7 @@ static int D3D12_CreateTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
renderTargetViewDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
renderTargetViewDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||||
renderTargetViewDesc.Texture2D.MipSlice = 0;
|
renderTargetViewDesc.Texture2D.MipSlice = 0;
|
||||||
|
|
||||||
D3D_CALL_RET(rendererData->textureRTVDescriptorHeap, GetCPUDescriptorHandleForHeapStart, &textureData->mainTextureRenderTargetView);
|
D3D_CALL_RET_ID3D12DescriptorHeap_GetCPUDescriptorHandleForHeapStart(rendererData->textureRTVDescriptorHeap, &textureData->mainTextureRenderTargetView);
|
||||||
textureData->mainTextureRenderTargetView.ptr += textureData->mainSRVIndex * rendererData->rtvDescriptorSize;
|
textureData->mainTextureRenderTargetView.ptr += textureData->mainSRVIndex * rendererData->rtvDescriptorSize;
|
||||||
|
|
||||||
D3D_CALL(rendererData->d3dDevice, CreateRenderTargetView,
|
D3D_CALL(rendererData->d3dDevice, CreateRenderTargetView,
|
||||||
@@ -1663,7 +1717,7 @@ static int D3D12_UpdateTextureInternal(D3D12_RenderData *rendererData, ID3D12Res
|
|||||||
|
|
||||||
/* Create an upload buffer, which will be used to write to the main texture. */
|
/* Create an upload buffer, which will be used to write to the main texture. */
|
||||||
SDL_zero(textureDesc);
|
SDL_zero(textureDesc);
|
||||||
D3D_CALL_RET(texture, GetDesc, &textureDesc);
|
D3D_CALL_RET_ID3D12Resource_GetDesc(texture, &textureDesc);
|
||||||
textureDesc.Width = w;
|
textureDesc.Width = w;
|
||||||
textureDesc.Height = h;
|
textureDesc.Height = h;
|
||||||
|
|
||||||
@@ -1919,7 +1973,7 @@ static int D3D12_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture,
|
|||||||
|
|
||||||
/* Create an upload buffer, which will be used to write to the main texture. */
|
/* Create an upload buffer, which will be used to write to the main texture. */
|
||||||
SDL_zero(textureDesc);
|
SDL_zero(textureDesc);
|
||||||
D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc);
|
D3D_CALL_RET_ID3D12Resource_GetDesc(textureData->mainTexture, &textureDesc);
|
||||||
textureDesc.Width = rect->w;
|
textureDesc.Width = rect->w;
|
||||||
textureDesc.Height = rect->h;
|
textureDesc.Height = rect->h;
|
||||||
|
|
||||||
@@ -2028,7 +2082,7 @@ static void D3D12_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture)
|
|||||||
D3D_CALL(textureData->stagingBuffer, Unmap, 0, NULL);
|
D3D_CALL(textureData->stagingBuffer, Unmap, 0, NULL);
|
||||||
|
|
||||||
SDL_zero(textureDesc);
|
SDL_zero(textureDesc);
|
||||||
D3D_CALL_RET(textureData->mainTexture, GetDesc, &textureDesc);
|
D3D_CALL_RET_ID3D12Resource_GetDesc(textureData->mainTexture, &textureDesc);
|
||||||
textureDesc.Width = textureData->lockedRect.w;
|
textureDesc.Width = textureData->lockedRect.w;
|
||||||
textureDesc.Height = textureData->lockedRect.h;
|
textureDesc.Height = textureData->lockedRect.h;
|
||||||
|
|
||||||
@@ -2739,7 +2793,7 @@ static int D3D12_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect,
|
|||||||
|
|
||||||
/* Create a staging texture to copy the screen's data to: */
|
/* Create a staging texture to copy the screen's data to: */
|
||||||
SDL_zero(textureDesc);
|
SDL_zero(textureDesc);
|
||||||
D3D_CALL_RET(backBuffer, GetDesc, &textureDesc);
|
D3D_CALL_RET_ID3D12Resource_GetDesc(backBuffer, &textureDesc);
|
||||||
textureDesc.Width = rect->w;
|
textureDesc.Width = rect->w;
|
||||||
textureDesc.Height = rect->h;
|
textureDesc.Height = rect->h;
|
||||||
|
|
||||||
|
|||||||
@@ -822,6 +822,7 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
|
|||||||
switch (retCode) {
|
switch (retCode) {
|
||||||
case SDL_ICONV_E2BIG:
|
case SDL_ICONV_E2BIG:
|
||||||
{
|
{
|
||||||
|
const ptrdiff_t diff = (ptrdiff_t) (outbuf - string);
|
||||||
char *oldstring = string;
|
char *oldstring = string;
|
||||||
stringsize *= 2;
|
stringsize *= 2;
|
||||||
string = (char *)SDL_realloc(string, stringsize + sizeof(Uint32));
|
string = (char *)SDL_realloc(string, stringsize + sizeof(Uint32));
|
||||||
@@ -830,8 +831,8 @@ char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inb
|
|||||||
SDL_iconv_close(cd);
|
SDL_iconv_close(cd);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
outbuf = string + (outbuf - oldstring);
|
outbuf = string + diff;
|
||||||
outbytesleft = stringsize - (outbuf - string);
|
outbytesleft = stringsize - diff;
|
||||||
SDL_memset(outbuf, 0, sizeof(Uint32));
|
SDL_memset(outbuf, 0, sizeof(Uint32));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
#include "SDL_stdinc.h"
|
#include "SDL_stdinc.h"
|
||||||
|
|
||||||
#if defined(HAVE_QSORT)
|
#if defined(HAVE_QSORT)
|
||||||
void SDL_qsort(void *base, size_t nmemb, size_t size, int (*compare) (const void *, const void *))
|
void SDL_qsort(void *base, size_t nmemb, size_t size, int (SDLCALL *compare) (const void *, const void *))
|
||||||
{
|
{
|
||||||
if (!base) {
|
if (!base) {
|
||||||
return;
|
return;
|
||||||
@@ -368,7 +368,7 @@ typedef struct { char * first; char * last; } stack_entry;
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
static char * pivot_big(char *first, char *mid, char *last, size_t size,
|
static char * pivot_big(char *first, char *mid, char *last, size_t size,
|
||||||
int compare(const void *, const void *)) {
|
int (SDLCALL * compare)(const void *, const void *)) {
|
||||||
size_t d=(((last-first)/size)>>3)*size;
|
size_t d=(((last-first)/size)>>3)*size;
|
||||||
#ifdef DEBUG_QSORT
|
#ifdef DEBUG_QSORT
|
||||||
fprintf(stderr, "pivot_big: first=%p last=%p size=%lu n=%lu\n", first, (unsigned long)last, size, (unsigned long)((last-first+1)/size));
|
fprintf(stderr, "pivot_big: first=%p last=%p size=%lu n=%lu\n", first, (unsigned long)last, size, (unsigned long)((last-first+1)/size));
|
||||||
@@ -409,7 +409,7 @@ fprintf(stderr,"-> %d %d %d @ %p %p %p\n",*(int*)m1,*(int*)m2,*(int*)m3, m1,m2,m
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void qsort_nonaligned(void *base, size_t nmemb, size_t size,
|
static void qsort_nonaligned(void *base, size_t nmemb, size_t size,
|
||||||
int (*compare)(const void *, const void *)) {
|
int (SDLCALL * compare)(const void *, const void *)) {
|
||||||
|
|
||||||
stack_entry stack[STACK_SIZE];
|
stack_entry stack[STACK_SIZE];
|
||||||
int stacktop=0;
|
int stacktop=0;
|
||||||
@@ -440,7 +440,7 @@ static void qsort_nonaligned(void *base, size_t nmemb, size_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void qsort_aligned(void *base, size_t nmemb, size_t size,
|
static void qsort_aligned(void *base, size_t nmemb, size_t size,
|
||||||
int (*compare)(const void *, const void *)) {
|
int (SDLCALL * compare)(const void *, const void *)) {
|
||||||
|
|
||||||
stack_entry stack[STACK_SIZE];
|
stack_entry stack[STACK_SIZE];
|
||||||
int stacktop=0;
|
int stacktop=0;
|
||||||
@@ -471,7 +471,7 @@ static void qsort_aligned(void *base, size_t nmemb, size_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void qsort_words(void *base, size_t nmemb,
|
static void qsort_words(void *base, size_t nmemb,
|
||||||
int (*compare)(const void *, const void *)) {
|
int (SDLCALL * compare)(const void *, const void *)) {
|
||||||
|
|
||||||
stack_entry stack[STACK_SIZE];
|
stack_entry stack[STACK_SIZE];
|
||||||
int stacktop=0;
|
int stacktop=0;
|
||||||
@@ -523,7 +523,7 @@ fprintf(stderr, "after partitioning first=#%lu last=#%lu\n", (first-(char*)base)
|
|||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
extern void qsortG(void *base, size_t nmemb, size_t size,
|
extern void qsortG(void *base, size_t nmemb, size_t size,
|
||||||
int (*compare)(const void *, const void *)) {
|
int (SDLCALL * compare)(const void *, const void *)) {
|
||||||
|
|
||||||
if (nmemb<=1) return;
|
if (nmemb<=1) return;
|
||||||
if (((size_t)base|size)&(WORD_BYTES-1))
|
if (((size_t)base|size)&(WORD_BYTES-1))
|
||||||
@@ -536,7 +536,7 @@ extern void qsortG(void *base, size_t nmemb, size_t size,
|
|||||||
|
|
||||||
#endif /* HAVE_QSORT */
|
#endif /* HAVE_QSORT */
|
||||||
|
|
||||||
void *SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *))
|
void *SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, int (SDLCALL * compare)(const void *, const void *))
|
||||||
{
|
{
|
||||||
#if defined(HAVE_BSEARCH)
|
#if defined(HAVE_BSEARCH)
|
||||||
return bsearch(key, base, nmemb, size, compare);
|
return bsearch(key, base, nmemb, size, compare);
|
||||||
@@ -569,4 +569,3 @@ void *SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* vi: set ts=4 sw=4 expandtab: */
|
/* vi: set ts=4 sw=4 expandtab: */
|
||||||
|
|
||||||
@@ -77,6 +77,7 @@ static int get_driindex(void)
|
|||||||
int devindex = -1;
|
int devindex = -1;
|
||||||
DIR *folder;
|
DIR *folder;
|
||||||
const char *hint;
|
const char *hint;
|
||||||
|
struct dirent *res;
|
||||||
|
|
||||||
hint = SDL_GetHint(SDL_HINT_KMSDRM_DEVICE_INDEX);
|
hint = SDL_GetHint(SDL_HINT_KMSDRM_DEVICE_INDEX);
|
||||||
if (hint && *hint) {
|
if (hint && *hint) {
|
||||||
@@ -96,7 +97,7 @@ static int get_driindex(void)
|
|||||||
|
|
||||||
SDL_strlcpy(device + kmsdrm_dri_pathsize, kmsdrm_dri_devname,
|
SDL_strlcpy(device + kmsdrm_dri_pathsize, kmsdrm_dri_devname,
|
||||||
sizeof(device) - kmsdrm_dri_devnamesize);
|
sizeof(device) - kmsdrm_dri_devnamesize);
|
||||||
for (struct dirent *res; (res = readdir(folder));) {
|
while((res = readdir(folder)) != NULL) {
|
||||||
if (SDL_memcmp(res->d_name, kmsdrm_dri_devname,
|
if (SDL_memcmp(res->d_name, kmsdrm_dri_devname,
|
||||||
kmsdrm_dri_devnamesize) == 0) {
|
kmsdrm_dri_devnamesize) == 0) {
|
||||||
SDL_strlcpy(device + kmsdrm_dri_pathsize + kmsdrm_dri_devnamesize,
|
SDL_strlcpy(device + kmsdrm_dri_pathsize + kmsdrm_dri_devnamesize,
|
||||||
|
|||||||
@@ -1166,7 +1166,8 @@ static void keyboard_handle_enter(void *data, struct wl_keyboard *keyboard,
|
|||||||
const SDL_Scancode scancode = Wayland_get_scancode_from_key(input, *key + 8);
|
const SDL_Scancode scancode = Wayland_get_scancode_from_key(input, *key + 8);
|
||||||
|
|
||||||
if (scancode != SDL_SCANCODE_UNKNOWN) {
|
if (scancode != SDL_SCANCODE_UNKNOWN) {
|
||||||
for (uint32_t i = 0; i < SDL_arraysize(mod_scancodes); ++i) {
|
uint32_t i;
|
||||||
|
for (i = 0; i < SDL_arraysize(mod_scancodes); ++i) {
|
||||||
if (mod_scancodes[i] == scancode) {
|
if (mod_scancodes[i] == scancode) {
|
||||||
SDL_SendKeyboardKey(SDL_PRESSED, scancode);
|
SDL_SendKeyboardKey(SDL_PRESSED, scancode);
|
||||||
break;
|
break;
|
||||||
@@ -1814,7 +1815,8 @@ static void data_device_handle_drop(void *data, struct wl_data_device *wl_data_d
|
|||||||
char **paths = SDL_DBus_DocumentsPortalRetrieveFiles(buffer, &path_count);
|
char **paths = SDL_DBus_DocumentsPortalRetrieveFiles(buffer, &path_count);
|
||||||
/* If dropped files contain a directory the list is empty */
|
/* If dropped files contain a directory the list is empty */
|
||||||
if (paths && path_count > 0) {
|
if (paths && path_count > 0) {
|
||||||
for (int i = 0; i < path_count; i++) {
|
int i;
|
||||||
|
for (i = 0; i < path_count; i++) {
|
||||||
SDL_SendDropFile(data_device->dnd_window, paths[i]);
|
SDL_SendDropFile(data_device->dnd_window, paths[i]);
|
||||||
}
|
}
|
||||||
dbus->free_string_array(paths);
|
dbus->free_string_array(paths);
|
||||||
|
|||||||
@@ -1373,6 +1373,8 @@ void Wayland_ShowWindow(_THIS, SDL_Window *window)
|
|||||||
data->shell_surface.xdg.roleobj.toplevel = xdg_surface_get_toplevel(data->shell_surface.xdg.surface);
|
data->shell_surface.xdg.roleobj.toplevel = xdg_surface_get_toplevel(data->shell_surface.xdg.surface);
|
||||||
xdg_toplevel_set_app_id(data->shell_surface.xdg.roleobj.toplevel, c->classname);
|
xdg_toplevel_set_app_id(data->shell_surface.xdg.roleobj.toplevel, c->classname);
|
||||||
xdg_toplevel_add_listener(data->shell_surface.xdg.roleobj.toplevel, &toplevel_listener_xdg, data);
|
xdg_toplevel_add_listener(data->shell_surface.xdg.roleobj.toplevel, &toplevel_listener_xdg, data);
|
||||||
|
|
||||||
|
SetMinMaxDimensions(window, SDL_FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -128,6 +128,10 @@ static SDL_Scancode VKeytoScancodeFallback(WPARAM vkey)
|
|||||||
return SDL_SCANCODE_RIGHT;
|
return SDL_SCANCODE_RIGHT;
|
||||||
case VK_DOWN:
|
case VK_DOWN:
|
||||||
return SDL_SCANCODE_DOWN;
|
return SDL_SCANCODE_DOWN;
|
||||||
|
case VK_CONTROL:
|
||||||
|
return SDL_SCANCODE_LCTRL;
|
||||||
|
case VK_V:
|
||||||
|
return SDL_SCANCODE_V;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return SDL_SCANCODE_UNKNOWN;
|
return SDL_SCANCODE_UNKNOWN;
|
||||||
@@ -137,6 +141,11 @@ static SDL_Scancode VKeytoScancodeFallback(WPARAM vkey)
|
|||||||
static SDL_Scancode VKeytoScancode(WPARAM vkey)
|
static SDL_Scancode VKeytoScancode(WPARAM vkey)
|
||||||
{
|
{
|
||||||
switch (vkey) {
|
switch (vkey) {
|
||||||
|
case VK_BACK:
|
||||||
|
return SDL_SCANCODE_BACKSPACE;
|
||||||
|
case VK_CAPITAL:
|
||||||
|
return SDL_SCANCODE_CAPSLOCK;
|
||||||
|
|
||||||
case VK_MODECHANGE:
|
case VK_MODECHANGE:
|
||||||
return SDL_SCANCODE_MODE;
|
return SDL_SCANCODE_MODE;
|
||||||
case VK_SELECT:
|
case VK_SELECT:
|
||||||
@@ -629,6 +638,10 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|||||||
if (nCode < 0 || nCode != HC_ACTION) {
|
if (nCode < 0 || nCode != HC_ACTION) {
|
||||||
return CallNextHookEx(NULL, nCode, wParam, lParam);
|
return CallNextHookEx(NULL, nCode, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
if (hookData->scanCode == 0x21d) {
|
||||||
|
// Skip fake LCtrl when RAlt is pressed
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
switch (hookData->vkCode) {
|
switch (hookData->vkCode) {
|
||||||
case VK_LWIN:
|
case VK_LWIN:
|
||||||
@@ -683,6 +696,39 @@ WIN_KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
#endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/
|
#endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/
|
||||||
|
|
||||||
|
|
||||||
|
// Return 1 if spruious LCtrl is pressed
|
||||||
|
// LCtrl is sent when RAltGR is pressed
|
||||||
|
int skip_bad_lcrtl(WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
MSG next_msg;
|
||||||
|
DWORD msg_time;
|
||||||
|
if (wParam != VK_CONTROL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
// Is this an extended key (i.e. right key)?
|
||||||
|
if (lParam & 0x01000000)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// Here is a trick: "Alt Gr" sends LCTRL, then RALT. We only
|
||||||
|
// want the RALT message, so we try to see if the next message
|
||||||
|
// is a RALT message. In that case, this is a false LCTRL!
|
||||||
|
msg_time = GetMessageTime();
|
||||||
|
if (PeekMessage(&next_msg, NULL, 0, 0, PM_NOREMOVE)) {
|
||||||
|
if (next_msg.message == WM_KEYDOWN ||
|
||||||
|
next_msg.message == WM_SYSKEYDOWN) {
|
||||||
|
if (next_msg.wParam == VK_MENU &&
|
||||||
|
(next_msg.lParam & 0x01000000) &&
|
||||||
|
next_msg.time == msg_time) {
|
||||||
|
// Next message is a RALT down message, which
|
||||||
|
// means that this is NOT a proper LCTRL message!
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK
|
LRESULT CALLBACK
|
||||||
WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
@@ -1000,6 +1046,11 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam);
|
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam);
|
||||||
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
|
if (skip_bad_lcrtl(wParam, lParam)) {
|
||||||
|
returnCode = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Detect relevant keyboard shortcuts */
|
/* Detect relevant keyboard shortcuts */
|
||||||
if (keyboardState[SDL_SCANCODE_LALT] == SDL_PRESSED || keyboardState[SDL_SCANCODE_RALT] == SDL_PRESSED) {
|
if (keyboardState[SDL_SCANCODE_LALT] == SDL_PRESSED || keyboardState[SDL_SCANCODE_RALT] == SDL_PRESSED) {
|
||||||
/* ALT+F4: Close window */
|
/* ALT+F4: Close window */
|
||||||
@@ -1022,6 +1073,11 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||||||
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam);
|
SDL_Scancode code = WindowsScanCodeToSDLScanCode(lParam, wParam);
|
||||||
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
|
if (skip_bad_lcrtl(wParam, lParam)) {
|
||||||
|
returnCode = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (code != SDL_SCANCODE_UNKNOWN) {
|
if (code != SDL_SCANCODE_UNKNOWN) {
|
||||||
if (code == SDL_SCANCODE_PRINTSCREEN &&
|
if (code == SDL_SCANCODE_PRINTSCREEN &&
|
||||||
keyboardState[code] == SDL_RELEASED) {
|
keyboardState[code] == SDL_RELEASED) {
|
||||||
@@ -1957,13 +2013,26 @@ static void WIN_CleanRegisterApp(WNDCLASSEX wcex)
|
|||||||
SDL_Appname = NULL;
|
SDL_Appname = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL CALLBACK WIN_ResourceNameCallback(HMODULE hModule, LPCTSTR lpType, LPTSTR lpName, LONG_PTR lParam)
|
||||||
|
{
|
||||||
|
WNDCLASSEX *wcex = (WNDCLASSEX *)lParam;
|
||||||
|
|
||||||
|
(void)lpType; /* We already know that the resource type is RT_GROUP_ICON. */
|
||||||
|
|
||||||
|
/* We leave hIconSm as NULL as it will allow Windows to automatically
|
||||||
|
choose the appropriate small icon size to suit the current DPI. */
|
||||||
|
wcex->hIcon = LoadIcon(hModule, lpName);
|
||||||
|
|
||||||
|
/* Do not bother enumerating any more. */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Register the class for this application */
|
/* Register the class for this application */
|
||||||
int SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
|
int SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
|
||||||
{
|
{
|
||||||
WNDCLASSEX wcex;
|
WNDCLASSEX wcex;
|
||||||
#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
|
#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
|
||||||
const char *hint;
|
const char *hint;
|
||||||
TCHAR path[MAX_PATH];
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Only do this once... */
|
/* Only do this once... */
|
||||||
@@ -2006,9 +2075,8 @@ int SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
|
|||||||
wcex.hIconSm = LoadIcon(SDL_Instance, MAKEINTRESOURCE(SDL_atoi(hint)));
|
wcex.hIconSm = LoadIcon(SDL_Instance, MAKEINTRESOURCE(SDL_atoi(hint)));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Use the first icon as a default icon, like in the Explorer */
|
/* Use the first icon as a default icon, like in the Explorer. */
|
||||||
GetModuleFileName(SDL_Instance, path, MAX_PATH);
|
EnumResourceNames(SDL_Instance, RT_GROUP_ICON, WIN_ResourceNameCallback, (LONG_PTR)&wcex);
|
||||||
ExtractIconEx(path, 0, &wcex.hIcon, &wcex.hIconSm, 1);
|
|
||||||
}
|
}
|
||||||
#endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/
|
#endif /*!defined(__XBOXONE__) && !defined(__XBOXSERIES__)*/
|
||||||
|
|
||||||
|
|||||||
@@ -317,8 +317,19 @@ static void WarpMouseInternal(Window xwindow, const int x, const int y)
|
|||||||
{
|
{
|
||||||
SDL_VideoData *videodata = (SDL_VideoData *)SDL_GetVideoDevice()->driverdata;
|
SDL_VideoData *videodata = (SDL_VideoData *)SDL_GetVideoDevice()->driverdata;
|
||||||
Display *display = videodata->display;
|
Display *display = videodata->display;
|
||||||
#ifdef SDL_VIDEO_DRIVER_X11_XINPUT2
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
int deviceid = 0;
|
int deviceid = 0;
|
||||||
|
SDL_bool warp_hack = SDL_FALSE;
|
||||||
|
|
||||||
|
/* XWayland will only warp the cursor if it is hidden, so this workaround is required. */
|
||||||
|
if (videodata->is_xwayland && mouse && mouse->cursor_shown) {
|
||||||
|
warp_hack = SDL_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (warp_hack) {
|
||||||
|
X11_ShowCursor(NULL);
|
||||||
|
}
|
||||||
|
#ifdef SDL_VIDEO_DRIVER_X11_XINPUT2
|
||||||
if (X11_Xinput2IsInitialized()) {
|
if (X11_Xinput2IsInitialized()) {
|
||||||
/* It seems XIWarpPointer() doesn't work correctly on multi-head setups:
|
/* It seems XIWarpPointer() doesn't work correctly on multi-head setups:
|
||||||
* https://developer.blender.org/rB165caafb99c6846e53d11c4e966990aaffc06cea
|
* https://developer.blender.org/rB165caafb99c6846e53d11c4e966990aaffc06cea
|
||||||
@@ -335,6 +346,10 @@ static void WarpMouseInternal(Window xwindow, const int x, const int y)
|
|||||||
{
|
{
|
||||||
X11_XWarpPointer(display, None, xwindow, 0, 0, 0, 0, x, y);
|
X11_XWarpPointer(display, None, xwindow, 0, 0, 0, 0, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (warp_hack) {
|
||||||
|
X11_ShowCursor(SDL_GetCursor());
|
||||||
|
}
|
||||||
X11_XSync(display, False);
|
X11_XSync(display, False);
|
||||||
videodata->global_mouse_changed = SDL_TRUE;
|
videodata->global_mouse_changed = SDL_TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,6 +145,12 @@ static int X11_SafetyNetErrHandler(Display *d, XErrorEvent *e)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static SDL_bool X11_IsXWayland(Display *d)
|
||||||
|
{
|
||||||
|
int opcode, event, error;
|
||||||
|
return X11_XQueryExtension(d, "XWAYLAND", &opcode, &event, &error) == True;
|
||||||
|
}
|
||||||
|
|
||||||
static SDL_VideoDevice *X11_CreateDevice(void)
|
static SDL_VideoDevice *X11_CreateDevice(void)
|
||||||
{
|
{
|
||||||
SDL_VideoDevice *device;
|
SDL_VideoDevice *device;
|
||||||
@@ -322,6 +328,8 @@ static SDL_VideoDevice *X11_CreateDevice(void)
|
|||||||
device->Vulkan_CreateSurface = X11_Vulkan_CreateSurface;
|
device->Vulkan_CreateSurface = X11_Vulkan_CreateSurface;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
data->is_xwayland = X11_IsXWayland(x11_display);
|
||||||
|
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,8 @@ typedef struct SDL_VideoData
|
|||||||
SDL_bool is_steam_deck;
|
SDL_bool is_steam_deck;
|
||||||
SDL_bool steam_keyboard_open;
|
SDL_bool steam_keyboard_open;
|
||||||
|
|
||||||
|
SDL_bool is_xwayland;
|
||||||
|
|
||||||
} SDL_VideoData;
|
} SDL_VideoData;
|
||||||
|
|
||||||
extern SDL_bool X11_UseDirectColorVisuals(void);
|
extern SDL_bool X11_UseDirectColorVisuals(void);
|
||||||
|
|||||||
+2
-2
@@ -108,14 +108,14 @@ testutils.lib: testutils.obj
|
|||||||
check: .SYMBOLIC $(TESTS)
|
check: .SYMBOLIC $(TESTS)
|
||||||
@set SDL_AUDIODRIVER=dummy
|
@set SDL_AUDIODRIVER=dummy
|
||||||
@set SDL_VIDEODRIVER=dummy
|
@set SDL_VIDEODRIVER=dummy
|
||||||
@copy "../SDL2.dll" .
|
@copy ..\SDL2.dll .
|
||||||
@for %exe in ($(TESTS)) do %exe
|
@for %exe in ($(TESTS)) do %exe
|
||||||
|
|
||||||
check-quick: .SYMBOLIC $(TESTS)
|
check-quick: .SYMBOLIC $(TESTS)
|
||||||
@set SDL_TESTS_QUICK=1
|
@set SDL_TESTS_QUICK=1
|
||||||
@set SDL_AUDIODRIVER=dummy
|
@set SDL_AUDIODRIVER=dummy
|
||||||
@set SDL_VIDEODRIVER=dummy
|
@set SDL_VIDEODRIVER=dummy
|
||||||
@copy "../SDL2.dll" .
|
@copy ..\SDL2.dll .
|
||||||
@for %exe in ($(TESTS)) do %exe
|
@for %exe in ($(TESTS)) do %exe
|
||||||
|
|
||||||
clean: .SYMBOLIC
|
clean: .SYMBOLIC
|
||||||
|
|||||||
Reference in new issue
Block a user