Now, SDL2 is not recommended and suggested to use SDL3
with sdl2-compat.
--
Takashi Yano <[email protected]>
NAME="SDL3"
VERSION=3.2.20
RELEASE=1
LICENSE="Zlib"
CATEGORY="Libs"
SUMMARY="Simple DirectMedia Layer core library"
DESCRIPTION="This is the Simple DirectMedia Layer, a general API that provides
low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL,
and 2D framebuffer across multiple platforms."
HOMEPAGE="http://www.libsdl.org/"
SRC_URI="https://github.com/libsdl-org/SDL/releases/download/release-${VERSION}/SDL3-${VERSION}.tar.gz"
inherit cmake
PKG_NAMES="libSDL3_0 libSDL3-devel"
libSDL3_0_REQUIRES="libdbus1_3 libGL1 libsamplerate0 libX11_6 libXcursor1
libXext6 libXi6 libXinerama1 libXrandr2 libXss1" # libaudio2 libpulse-simple0
libSDL3_0_CONTENTS="usr/bin/cygSDL3-0.dll usr/share/doc/ usr/share/licenses/"
libSDL3_devel_CONTENTS="usr/include/ usr/lib/"
DISTCLEANFILES="acinclude/l*.m4"
DIFF_EXCLUDES="SDL_config.h"
CYGCMAKE_ARGS="
-DSDL_JACK=OFF
-DSDL_SNDIO=OFF
"
ACLOCAL_FLAGS="-I acinclude"
NO_AUTOHEADER=1
CYGCONF_ARGS="
--enable-pthreads
--enable-pthread-sem
--disable-arts
--disable-arts-shared
--enable-esd
--enable-esd-shared
--enable-nas
--enable-nas-shared
--enable-oss
--enable-pulseaudio
--enable-pulseaudio-shared
--enable-libsamplerate
--enable-libsamplerate-shared
--enable-video-dummy
--enable-video-opengl
--enable-video-opengles
--enable-video-x11
--enable-video-x11-scrnsaver
--enable-video-x11-xcursor
--enable-video-x11-xinput
--enable-video-x11-xrandr
--enable-video-x11-xshape
--enable-x11-shared
--enable-xinput
--enable-render-d3d
--disable-jack
--disable-sndio
"
DOCS="README-SDL.txt README-porting.txt"
BUILD_REQUIRES="libX11-devel libGL-devel libEGL-devel libsamplerate-devel
libesd-devel nas"
--- origsrc/SDL3-3.2.20/CMakeLists.txt 2025-08-05 01:58:55.000000000 +0900
+++ src/SDL3-3.2.20/CMakeLists.txt 2025-08-26 14:36:35.689597000 +0900
@@ -367,9 +367,9 @@ dep_option(SDL_WAYLAND_LIBDECOR_SHARED
dep_option(SDL_RPI "Use Raspberry Pi video driver" ON
"SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
dep_option(SDL_ROCKCHIP "Use ROCKCHIP Hardware Acceleration video
driver" ON "SDL_VIDEO;UNIX_SYS;SDL_CPU_ARM32 OR SDL_CPU_ARM64" OFF)
dep_option(SDL_COCOA "Use Cocoa video driver" ON "APPLE" OFF)
-dep_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ON
"SDL_AUDIO OR SDL_VIDEO;WINDOWS" OFF)
-dep_option(SDL_XINPUT "Use Xinput for Windows" ON "WINDOWS" OFF)
-dep_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ON
"WINDOWS;SDL_AUDIO" OFF)
+dep_option(SDL_DIRECTX "Use DirectX for Windows audio/video" ON
"SDL_AUDIO OR SDL_VIDEO;WINDOWS OR CYGWIN" OFF)
+dep_option(SDL_XINPUT "Use Xinput for Windows" ON "WINDOWS OR
CYGWIN" OFF)
+dep_option(SDL_WASAPI "Use the Windows WASAPI audio driver" ON
"SDL_AUDIO" OFF)
dep_option(SDL_RENDER_D3D "Enable the Direct3D 9 render driver" ON
"SDL_RENDER;SDL_DIRECTX" OFF)
dep_option(SDL_RENDER_D3D11 "Enable the Direct3D 11 render driver" ON
"SDL_RENDER;SDL_DIRECTX" OFF)
dep_option(SDL_RENDER_D3D12 "Enable the Direct3D 12 render driver" ON
"SDL_RENDER;SDL_DIRECTX" OFF)
@@ -480,7 +480,7 @@ else()
endif()
endif()
-if(CYGWIN)
+if(FALSE AND CYGWIN)
# We build SDL on cygwin without the UNIX emulation layer
sdl_include_directories(PUBLIC SYSTEM "/usr/include/mingw")
cmake_push_check_state()
@@ -1262,7 +1262,7 @@ if(SDL_CAMERA)
#endif()
endif()
-if(UNIX OR APPLE)
+if(UNIX OR APPLE OR CYGWIN)
# Relevant for Unix/Darwin only
set(DYNAPI_NEEDS_DLOPEN 1)
CheckDLOPEN()
@@ -1273,7 +1273,7 @@ if(UNIX OR APPLE)
endif()
endif()
-if(UNIX OR APPLE OR HAIKU OR RISCOS)
+if(UNIX OR APPLE OR HAIKU OR RISCOS OR CYGWIN)
CheckO_CLOEXEC()
endif()
@@ -1567,7 +1567,7 @@ elseif(EMSCRIPTEN)
CheckPTHREAD()
CheckLibUnwind()
-elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
+elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
if(SDL_AUDIO)
if(NETBSD)
set(SDL_AUDIO_DRIVER_NETBSD 1)
@@ -1609,7 +1609,7 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS
set(HAVE_SDL_TRAY TRUE)
endif()
- if(UNIX)
+ if(UNIX OR CYGWIN)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/unix/*.c")
check_c_source_compiles("
@@ -1901,6 +1901,136 @@ elseif(UNIX AND NOT APPLE AND NOT RISCOS
set (HAVE_VSNPRINTF 0)
set (USE_POSIX_SPAWN 1)
endif()
+
+ if (CYGWIN)
+ check_c_source_compiles("
+ #include <windows.h>
+ int main(int argc, char **argv) { return 0; }" HAVE_WIN32_CC)
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/core/windows/*.c")
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/main/windows/*.c")
+ sdl_link_dependency(base LIBS kernel32 user32 gdi32 winmm imm32 ole32
oleaut32 version uuid advapi32 setupapi shell32 dxguid)
+ endif()
+
+ if(CYGWIN AND SDL_DIRECTX)
+ cmake_push_check_state()
+
+ #check_include_file(d3d9.h HAVE_D3D9_H)
+ #check_include_file(d3d11_1.h HAVE_D3D11_H)
+ #check_include_file(ddraw.h HAVE_DDRAW_H)
+ #check_include_file(dsound.h HAVE_DSOUND_H)
+ #check_include_file(dinput.h HAVE_DINPUT_H)
+ set(HAVE_D3D9_H TRUE)
+ set(HAVE_D3D11_H TRUE)
+ set(HAVE_DDRAW_H TRUE)
+ set(HAVE_DSOUND_H TRUE)
+ set(HAVE_DINPUT_H TRUE)
+ if(SDL_CPU_ARM32) # !!! FIXME: this should probably check if we're !(x86
or x86-64) instead of arm.
+ set(HAVE_DINPUT_H 0)
+ endif()
+ check_include_file(dxgi.h HAVE_DXGI_H)
+ cmake_pop_check_state()
+ if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR
HAVE_DINPUT_H)
+ set(HAVE_DIRECTX TRUE)
+ if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
+ if(CMAKE_SIZEOF_VOID_P EQUAL 8)
+ set(PROCESSOR_ARCH "x64")
+ else()
+ set(PROCESSOR_ARCH "x86")
+ endif()
+
sdl_link_directories("$<BUILD_INTERFACE:$$ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH}>")
+ sdl_include_directories(PRIVATE SYSTEM
"$<BUILD_INTERFACE:$ENV{DXSDK_DIR}\\Include>")
+ endif()
+ endif()
+ endif()
+
+ if(CYGWIN AND SDL_XINPUT)
+ # xinput.h may need windows.h, but does not include it itself.
+ check_c_source_compiles("
+ #include <windows.h>
+ #include <xinput.h>
+ int main(int argc, char **argv) { return 0; }" HAVE_XINPUT_H)
+ endif()
+
+ if(CYGWIN AND SDL_VIDEO)
+ set(SDL_VIDEO_DRIVER_WINDOWS 1)
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/video/windows/*.c")
+
+ CheckOpenVR()
+
+ if(SDL_RENDER_D3D AND HAVE_D3D9_H)
+ set(SDL_VIDEO_RENDER_D3D 1)
+ set(HAVE_RENDER_D3D TRUE)
+ endif()
+ if(SDL_RENDER_D3D11 AND HAVE_D3D11_H)
+ set(SDL_VIDEO_RENDER_D3D11 1)
+ set(HAVE_RENDER_D3D11 TRUE)
+ endif()
+ if(SDL_RENDER_D3D12)
+ set(SDL_VIDEO_RENDER_D3D12 1)
+ set(HAVE_RENDER_D3D12 TRUE)
+ endif()
+ set(HAVE_SDL_VIDEO TRUE)
+ endif()
+
+ if(CYGWIN AND SDL_VIDEO)
+ if(SDL_OPENGL)
+ set(SDL_VIDEO_OPENGL 1)
+ set(SDL_VIDEO_OPENGL_WGL 1)
+ set(SDL_VIDEO_RENDER_OGL 1)
+ set(HAVE_OPENGL TRUE)
+ endif()
+
+ if(SDL_OPENGLES)
+ set(SDL_VIDEO_OPENGL_EGL 1)
+ set(SDL_VIDEO_OPENGL_ES2 1)
+ set(SDL_VIDEO_RENDER_OGL_ES2 1)
+ set(HAVE_OPENGLES TRUE)
+ endif()
+
+ if(SDL_VULKAN)
+ set(SDL_VIDEO_VULKAN 1)
+ set(HAVE_VULKAN TRUE)
+ if(SDL_RENDER_VULKAN)
+ set(SDL_VIDEO_RENDER_VULKAN 1)
+ set(HAVE_RENDER_VULKAN TRUE)
+ endif()
+ endif()
+ endif()
+
+ if(CYGWIN AND SDL_HIDAPI)
+ CheckHIDAPI()
+ endif()
+
+ if(CYGWIN AND SDL_JOYSTICK)
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/windows/*.c")
+
+ set(SDL_JOYSTICK_RAWINPUT 1)
+ if(HAVE_DINPUT_H)
+ set(SDL_JOYSTICK_DINPUT 1)
+ sdl_link_dependency(joystick LIBS dinput8)
+ endif()
+ if(HAVE_XINPUT_H)
+ set(SDL_JOYSTICK_XINPUT 1)
+ set(HAVE_XINPUT TRUE)
+ endif()
+ if(HAVE_WINDOWS_GAMING_INPUT_H)
+ set(SDL_JOYSTICK_WGI 1)
+ endif()
+ if(HAVE_GAMEINPUT_H)
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/joystick/gdk/*.c")
+ set(SDL_JOYSTICK_GAMEINPUT 1)
+ endif()
+ set(HAVE_SDL_JOYSTICK TRUE)
+
+ if(SDL_HAPTIC)
+ if(HAVE_DINPUT_H)
+ sdl_glob_sources("${SDL3_SOURCE_DIR}/src/haptic/windows/*.c")
+ set(SDL_HAPTIC_DINPUT 1)
+ set(HAVE_SDL_HAPTIC TRUE)
+ endif()
+ endif()
+ endif()
+
elseif(WINDOWS)
check_c_source_compiles("
#include <windows.h>
@@ -1930,7 +2060,7 @@ elseif(WINDOWS)
if(DEFINED MSVC_VERSION AND NOT ${MSVC_VERSION} LESS 1700)
set(USE_WINSDK_DIRECTX TRUE)
endif()
- if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
+ if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
if("$ENV{DXSDK_DIR}" STREQUAL "")
message(FATAL_ERROR "DIRECTX requires the \$DXSDK_DIR environment
variable to be set")
endif()
@@ -1949,7 +2079,7 @@ elseif(WINDOWS)
cmake_pop_check_state()
if(HAVE_D3D9_H OR HAVE_D3D11_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR
HAVE_DINPUT_H)
set(HAVE_DIRECTX TRUE)
- if(NOT MINGW AND NOT USE_WINSDK_DIRECTX)
+ if(NOT MINGW AND NOT CYGWIN AND NOT USE_WINSDK_DIRECTX)
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(PROCESSOR_ARCH "x64")
else()
@@ -2943,7 +3073,7 @@ if (SDL_DIALOG)
if(ANDROID)
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/android/SDL_androiddialog.c)
set(HAVE_SDL_DIALOG TRUE)
- elseif(UNIX AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
+ elseif((UNIX OR CYGWIN) AND NOT APPLE AND NOT RISCOS AND NOT HAIKU)
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_unixdialog.c)
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_portaldialog.c)
sdl_sources(${SDL3_SOURCE_DIR}/src/dialog/unix/SDL_zenitydialog.c)
@@ -2961,7 +3091,7 @@ if (SDL_DIALOG)
endif()
sdl_sources("${SDL3_SOURCE_DIR}/src/process/SDL_process.c")
-if(WINDOWS)
+if(WINDOWS AND NOT CYGWIN)
sdl_glob_sources("${SDL3_SOURCE_DIR}/src/process/windows/*.c")
set(SDL_PROCESS_WINDOWS 1)
set(HAVE_SDL_PROCESS TRUE)
--- origsrc/SDL3-3.2.20/cmake/sdlchecks.cmake 2025-06-27 07:43:29.000000000
+0900
+++ src/SDL3-3.2.20/cmake/sdlchecks.cmake 2025-08-25 15:51:53.858383400
+0900
@@ -22,6 +22,35 @@ macro(FindLibraryAndSONAME _LIB)
if(APPLE)
string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*dylib$" "\\1.dylib"
_LIB_REGEXD "${_LIB_JUSTNAME}")
+ elseif(CYGWIN)
+ set(_LIB_LIBDIR "/usr/bin")
+ string(REGEX MATCH "libpulse\\.dll\\.a" LIBPULSE ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libX11\\.dll\\.a" LIBX11 ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXext\\.dll\\.a" LIBXEXT ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXcursor\\.dll\\.a" LIBXCURSOR ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXi\\.dll\\.a" LIBXI ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXfixes\\.dll\\.a" LIBXFIXES ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXrandr\\.dll\\.a" LIBXRANDR ${_LIB_JUSTNAME})
+ string(REGEX MATCH "libXrender\\.dll\\.a" LIBXRENDER ${_LIB_JUSTNAME})
+ if(LIBPULSE)
+ set(_LIB_REGEXD "cygpulse-0.dll")
+ elseif(LIBX11)
+ set(_LIB_REGEXD "cygX11-6.dll")
+ elseif(LIBXEXT)
+ set(_LIB_REGEXD "cygXext-6.dll")
+ elseif(LIBXCURSOR)
+ set(_LIB_REGEXD "cygXcursor-1.dll")
+ elseif(LIBXI)
+ set(_LIB_REGEXD "cygXi-6.dll")
+ elseif(LIBXFIXES)
+ set(_LIB_REGEXD "cygXfixes-3.dll")
+ elseif(LIBXRANDR)
+ set(_LIB_REGEXD "cygXrandr-2.dll")
+ elseif(LIBXRENDER)
+ set(_LIB_REGEXD "cygXrender-1.dll")
+ else()
+ message(FATAL_ERROR "Please fix sdlchecks.cmake: " ${_LIB_JUSTNAME})
+ endif()
else()
string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*$" "\\1" _LIB_REGEXD
"${_LIB_JUSTNAME}")
endif()
--- origsrc/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h 2025-02-05
06:57:41.000000000 +0900
+++ src/SDL3-3.2.20/include/SDL3/SDL_platform_defines.h 2025-08-25
15:51:53.862384700 +0900
@@ -112,8 +112,7 @@
#undef SDL_PLATFORM_LINUX
#endif
-#if defined(__unix__) || defined(__unix) || defined(unix)
-
+#if defined(__unix__) || defined(__unix) || defined(unix) ||
defined(__CYGWIN__)
/**
* A preprocessor macro that is only defined if compiling for a Unix-like
* system.
@@ -317,7 +316,7 @@
#define SDL_PLATFORM_CYGWIN 1
#endif
-#if defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)
+#if defined(_WIN32)
/**
* A preprocessor macro that is only defined if compiling for Windows.
--- origsrc/SDL3-3.2.20/include/SDL3/SDL_system.h 2025-01-22
03:12:25.000000000 +0900
+++ src/SDL3-3.2.20/include/SDL3/SDL_system.h 2025-08-25 15:51:53.865394400
+0900
@@ -49,7 +49,7 @@ extern "C" {
/*
* Platform specific functions for Windows
*/
-#if defined(SDL_PLATFORM_WINDOWS)
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
typedef struct tagMSG MSG;
--- origsrc/SDL3-3.2.20/src/SDL.c 2025-07-12 23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/SDL.c 2025-08-25 15:51:53.869395100 +0900
@@ -65,7 +65,7 @@
// Initialization/Cleanup routines
#include "timer/SDL_timer_c.h"
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
extern bool SDL_HelperWindowCreate(void);
extern void SDL_HelperWindowDestroy(void);
#endif
@@ -317,7 +317,7 @@ bool SDL_InitSubSystem(SDL_InitFlags fla
SDL_DBus_Init();
#endif
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
if (flags & (SDL_INIT_HAPTIC | SDL_INIT_JOYSTICK)) {
if (!SDL_HelperWindowCreate()) {
goto quit_and_error;
@@ -653,7 +653,7 @@ void SDL_Quit(void)
SDL_bInMainQuit = true;
// Quit all subsystems
-#ifdef SDL_PLATFORM_WINDOWS
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
SDL_HelperWindowDestroy();
#endif
SDL_QuitSubSystem(SDL_INIT_EVERYTHING);
--- origsrc/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c 2025-02-15
07:16:10.000000000 +0900
+++ src/SDL3-3.2.20/src/audio/dsp/SDL_dspaudio.c 2025-08-25
15:51:53.873386600 +0900
@@ -166,7 +166,11 @@ static bool DSP_OpenDevice(SDL_AudioDevi
while ((0x01U << frag_spec) < device->buffer_size) {
frag_spec++;
}
+#ifdef __CYGWIN__
+ frag_spec |= 0x00040000; // four fragments for cygwin to avoid choppy sound
+#else
frag_spec |= 0x00020000; // two fragments, for low latency
+#endif
// Set the audio buffering parameters
#ifdef DEBUG_AUDIO
--- origsrc/SDL3-3.2.20/src/core/SDL_core_unsupported.c 2025-02-04
10:03:26.000000000 +0900
+++ src/SDL3-3.2.20/src/core/SDL_core_unsupported.c 2025-08-25
15:51:53.876396700 +0900
@@ -76,7 +76,7 @@ void SDL_GDKResumeGPU(SDL_GPUDevice *dev
#endif
-#if !defined(SDL_PLATFORM_WINDOWS)
+#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
SDL_DECLSPEC bool SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void
*hInst);
bool SDL_RegisterApp(const char *name, Uint32 style, void *hInst)
--- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.c 2025-07-12
23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/core/windows/SDL_windows.c 2025-08-25
15:51:53.880397700 +0900
@@ -20,7 +20,7 @@
*/
#include "SDL_internal.h"
-#if defined(SDL_PLATFORM_WINDOWS)
+#if defined(SDL_PLATFORM_WINDOWS) || defined(SDL_PLATFORM_CYGWIN)
#include "SDL_windows.h"
--- origsrc/SDL3-3.2.20/src/core/windows/SDL_windows.h 2025-03-20
13:23:06.000000000 +0900
+++ src/SDL3-3.2.20/src/core/windows/SDL_windows.h 2025-08-25
15:51:53.884398500 +0900
@@ -74,6 +74,24 @@
#undef _WIN32_WINNT
#define _WIN32_WINNT 0xA00
#define WINVER _WIN32_WINNT
+
+#elif defined(SDL_PLATFORM_CYGWIN)
+#ifndef STRICT
+#define STRICT 1
+#endif
+#ifndef UNICODE
+#define UNICODE 1
+#endif
+#undef WINVER
+#undef _WIN32_WINNT
+#if defined(SDL_VIDEO_RENDER_D3D12) || defined(HAVE_DXGI1_6_H)
+#define _WIN32_WINNT 0xA00 // For D3D12, 0xA00 is required
+#elif defined(HAVE_SHELLSCALINGAPI_H)
+#define _WIN32_WINNT 0x603 // For DPI support
+#else
+#define _WIN32_WINNT 0x501 // Need 0x410 for AlphaBlend() and 0x500 for
EnumDisplayDevices(), 0x501 for raw input
+#endif
+#define WINVER _WIN32_WINNT
#endif
// See https://github.com/libsdl-org/SDL/pull/7607
@@ -92,6 +110,10 @@
#include <windows.h>
#include <basetyps.h> // for REFIID with broken mingw.org headers
#include <mmreg.h>
+#ifdef __CYGWIN__
+#define SDL_WINAPI_FAMILY_PHONE 0
+#define IUnknown_QueryInterface(This,riid,ppvObject)
(This)->lpVtbl->QueryInterface(This,riid,ppvObject)
+#endif
// Routines to convert from UTF8 to native Windows text
#define WIN_StringToUTF8W(S) SDL_iconv_string("UTF-8", "UTF-16LE", (const char
*)(S), (SDL_wcslen(S) + 1) * sizeof(WCHAR))
--- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi.c 2025-02-07 02:46:15.000000000
+0900
+++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi.c 2025-08-25 15:51:53.887399000
+0900
@@ -510,7 +510,7 @@ extern SDL_NORETURN void SDL_ExitProcess
static void SDL_InitDynamicAPILocked(void)
{
// this can't use SDL_getenv_unsafe_REAL, because it might allocate memory
before the app can set their allocator.
-#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__)
+#if defined(WIN32) || defined(_WIN32)
// We've always used LoadLibraryA for this, so this has never worked with
Unicode paths on Windows. Sorry.
char envbuf[512]; // overflows will just report as environment variable
being unset, but LoadLibraryA has a MAX_PATH of 260 anyhow, apparently.
const DWORD rc = GetEnvironmentVariableA(SDL_DYNAMIC_API_ENVVAR, envbuf,
(DWORD) sizeof (envbuf));
--- origsrc/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h 2025-01-02
00:45:52.000000000 +0900
+++ src/SDL3-3.2.20/src/dynapi/SDL_dynapi_unsupported.h 2025-08-25
15:51:53.891400100 +0900
@@ -23,7 +23,7 @@
#define SDL_dynapi_unsupported_h_
-#if !defined(SDL_PLATFORM_WINDOWS)
+#if !defined(SDL_PLATFORM_WINDOWS) && !defined(SDL_PLATFORM_CYGWIN)
typedef struct ID3D12Device ID3D12Device;
typedef void *SDL_WindowsMessageHook;
#endif
--- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c
2025-07-12 23:48:56.000000000 +0900
+++ src/SDL3-3.2.20/src/joystick/windows/SDL_dinputjoystick.c 2025-08-26
12:09:01.045765300 +0900
@@ -376,6 +376,8 @@ DIEFFECT *CreateRumbleEffectData(Sint16
FreeRumbleEffectData(effect);
return NULL;
}
+ effect->rgdwAxes[0] = DIJOFS_X;
+ effect->rgdwAxes[1] = DIJOFS_Y;
effect->rglDirection = (LONG *)SDL_calloc(effect->cAxes, sizeof(LONG));
if (!effect->rglDirection) {
@@ -913,26 +915,29 @@ bool SDL_DINPUT_JoystickRumble(SDL_Joyst
return SDL_Unsupported();
}
- if (joystick->hwdata->ff_initialized) {
+ if (!joystick->hwdata->ff_initialized) {
+ if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) {
+ return false;
+ }
+ joystick->hwdata->ff_initialized = true;
+ }
+ do {
DIPERIODIC *periodic = ((DIPERIODIC
*)joystick->hwdata->ffeffect->lpvTypeSpecificParams);
periodic->dwMagnitude = CONVERT_MAGNITUDE(magnitude);
+ joystick->hwdata->ffeffect->rglDirection[0] = low_frequency_rumble;
+ joystick->hwdata->ffeffect->rglDirection[1] = high_frequency_rumble;
- result =
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref,
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS));
+ result =
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref,
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION |
DIEP_TYPESPECIFICPARAMS));
if (result == DIERR_INPUTLOST) {
result =
IDirectInputDevice8_Acquire(joystick->hwdata->InputDevice);
if (SUCCEEDED(result)) {
- result =
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref,
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_TYPESPECIFICPARAMS));
+ result =
IDirectInputEffect_SetParameters(joystick->hwdata->ffeffect_ref,
joystick->hwdata->ffeffect, (DIEP_DURATION | DIEP_DIRECTION |
DIEP_TYPESPECIFICPARAMS));
}
}
if (FAILED(result)) {
return SetDIerror("IDirectInputDevice8::SetParameters", result);
}
- } else {
- if (!SDL_DINPUT_JoystickInitRumble(joystick, magnitude)) {
- return false;
- }
- joystick->hwdata->ff_initialized = true;
- }
+ } while (false);
result = IDirectInputEffect_Start(joystick->hwdata->ffeffect_ref, 1, 0);
if (result == DIERR_INPUTLOST || result == DIERR_NOTEXCLUSIVEACQUIRED) {
--- origsrc/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c
2025-01-03 03:25:18.000000000 +0900
+++ src/SDL3-3.2.20/src/joystick/windows/SDL_windowsjoystick.c 2025-08-25
15:51:53.895401300 +0900
@@ -54,10 +54,14 @@
// local variables
static bool s_bJoystickThread = false;
+#ifndef __CYGWIN__
static SDL_Condition *s_condJoystickThread = NULL;
+#endif
static SDL_Mutex *s_mutexJoyStickEnum = NULL;
+#ifndef __CYGWIN__
static SDL_Thread *s_joystickThread = NULL;
static bool s_bJoystickThreadQuit = false;
+#endif
static Uint64 s_lastDeviceChange = 0;
static GUID GUID_DEVINTERFACE_HID = { 0x4D1E55B2L, 0xF16F, 0x11CF, { 0x88,
0xCB, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } };
@@ -190,6 +194,7 @@ static bool SDL_CreateDeviceNotification
return true;
}
+#ifndef __CYGWIN__
static bool SDL_WaitForDeviceNotification(SDL_DeviceNotificationData *data,
SDL_Mutex *mutex)
{
MSG msg;
@@ -210,6 +215,7 @@ static bool SDL_WaitForDeviceNotificatio
SDL_LockMutex(mutex);
return (lastret != -1);
}
+#endif
#endif // !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
@@ -217,6 +223,7 @@ static bool SDL_WaitForDeviceNotificatio
static SDL_DeviceNotificationData s_notification_data;
#endif
+#ifndef __CYGWIN__
// Function/thread to scan the system for joysticks.
static int SDLCALL SDL_JoystickThread(void *_data)
{
@@ -269,10 +276,12 @@ static int SDLCALL SDL_JoystickThread(vo
return 1;
}
+#endif
// spin up the thread to detect hotplug of devices
static bool SDL_StartJoystickThread(void)
{
+#ifndef __CYGWIN__
s_mutexJoyStickEnum = SDL_CreateMutex();
if (!s_mutexJoyStickEnum) {
return false;
@@ -288,11 +297,13 @@ static bool SDL_StartJoystickThread(void
if (!s_joystickThread) {
return false;
}
+#endif
return true;
}
static void SDL_StopJoystickThread(void)
{
+#ifndef __CYGWIN__
if (!s_joystickThread) {
return;
}
@@ -316,6 +327,7 @@ static void SDL_StopJoystickThread(void)
s_mutexJoyStickEnum = NULL;
s_joystickThread = NULL;
+#endif
}
void WINDOWS_AddJoystickDevice(JoyStick_DeviceData *device)
--- origsrc/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c
2025-03-06 15:39:31.000000000 +0900
+++ src/SDL3-3.2.20/src/render/direct3d11/SDL_render_d3d11.c 2025-08-25
15:51:53.899402300 +0900
@@ -18,6 +18,10 @@
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
+#ifdef __CYGWIN__
+#define MESA_EGL_NO_X11_HEADERS
+#endif
+
#include "SDL_internal.h"
#ifdef SDL_VIDEO_RENDER_D3D11
@@ -921,7 +925,7 @@ static HRESULT D3D11_CreateSwapChain(SDL
goto done;
}
} else {
-#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
+#if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK) ||
defined(SDL_PLATFORM_CYGWIN)
HWND hwnd =
(HWND)SDL_GetPointerProperty(SDL_GetWindowProperties(renderer->window),
SDL_PROP_WINDOW_WIN32_HWND_POINTER, NULL);
if (!hwnd) {
SDL_SetError("Couldn't get window handle");
--- origsrc/SDL3-3.2.20/src/video/directx/d3d12.h 2024-08-30
09:33:52.000000000 +0900
+++ src/SDL3-3.2.20/src/video/directx/d3d12.h 2025-08-25 15:51:53.908403900
+0900
@@ -11,7 +11,9 @@
/* File created by MIDL compiler version 8.01.0628 */
-
+#ifdef __CYGWIN__
+#define _WIN32
+#endif
/* verify that the <rpcndr.h> version is high enough to compile this file*/
#ifndef __REQUIRED_RPCNDR_H_VERSION__