From 8b77791aeb7caf01765cfcabc024da2bf6fd48ed Mon Sep 17 00:00:00 2001 From: Miku AuahDark Date: Tue, 18 Apr 2023 09:39:33 +0800 Subject: [PATCH] Apply LOVE 11.x-specific patch to SDL2. --- .../main/java/org/libsdl/app/SDLActivity.java | 47 +++++++++++++++---- .../src/jni/SDL2/include/SDL_config_android.h | 7 +-- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/love/src/jni/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java b/love/src/jni/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java index 8d0f8d19..d6513960 100644 --- a/love/src/jni/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java +++ b/love/src/jni/SDL2/android-project/app/src/main/java/org/libsdl/app/SDLActivity.java @@ -204,6 +204,8 @@ public enum NativeState { public static NativeState mNextNativeState; public static NativeState mCurrentNativeState; + public static boolean mExitCalledFromJava; // love2d-mod: allow restarting of the native thread + /** If shared libraries (e.g. SDL or the native application) could not be loaded. */ public static boolean mBrokenLibraries = true; @@ -306,6 +308,7 @@ public static void initialize() { mCursors = new Hashtable(); mLastCursorID = 0; mSDLThread = null; + mExitCalledFromJava = false; // love2d-mod: allow restarting of the native thread mIsResumedCalled = false; mHasFocus = true; mNextNativeState = NativeState.INIT; @@ -378,6 +381,13 @@ public void onClick(DialogInterface dialog,int id) { return; } + startNative(); // love2d-mod: allow restarting of the native thread + } + + // love2d-mod-start: allow restarting of the native thread + public void startNative() { + boolean hadSDLThread = SDLActivity.mSDLThread != null; + // Set up JNI SDL.setupJNI(); @@ -427,7 +437,12 @@ public void onClick(DialogInterface dialog,int id) { SDLActivity.onNativeDropFile(filename); } } + + if (hadSDLThread) { + resumeNativeThread(); + } } + // love2d-mod-end: allow restarting of the native thread protected void pauseNativeThread() { mNextNativeState = NativeState.PAUSED; @@ -595,6 +610,20 @@ protected void onDestroy() { return; } + appQuitFinish(); // love2d-mod: allow restarting of the native thread + super.onDestroy(); + } + + // love2d-mod-start: allow restarting of the native thread + public void resetNative() { + Log.v("SDL", "resetNative()"); + + SDLActivity.mExitCalledFromJava = true; // love2d-mod: allow restarting of the native thread + + appQuitFinish(); + } + + private void appQuitFinish() { if (SDLActivity.mSDLThread != null) { // Send Quit event to "SDLThread" thread @@ -609,9 +638,8 @@ protected void onDestroy() { } SDLActivity.nativeQuit(); - - super.onDestroy(); } + // love2d-mod-end: allow restarting of the native thread @Override public void onBackPressed() { @@ -1885,12 +1913,15 @@ public void run() { Log.v("SDL", "Finished main function"); - if (SDLActivity.mSingleton != null && !SDLActivity.mSingleton.isFinishing()) { - // Let's finish the Activity - SDLActivity.mSDLThread = null; - SDLActivity.mSingleton.finish(); - } // else: Activity is already being destroyed - + // love2d-mod-start: allow restarting of the native thread + if (!SDLActivity.mExitCalledFromJava) { + if (SDLActivity.mSingleton != null && !SDLActivity.mSingleton.isFinishing()) { + // Let's finish the Activity + SDLActivity.mSDLThread = null; + SDLActivity.mSingleton.finish(); + } // else: Activity is already being destroyed + } + // love2d-mod-end: allow restarting of the native thread } } diff --git a/love/src/jni/SDL2/include/SDL_config_android.h b/love/src/jni/SDL2/include/SDL_config_android.h index d88c026b..cd537964 100644 --- a/love/src/jni/SDL2/include/SDL_config_android.h +++ b/love/src/jni/SDL2/include/SDL_config_android.h @@ -143,9 +143,10 @@ #endif /* Enable various audio drivers */ -#define SDL_AUDIO_DRIVER_ANDROID 1 -#define SDL_AUDIO_DRIVER_OPENSLES 1 -#define SDL_AUDIO_DRIVER_AAUDIO 1 +/* love2d-mod: Audio is handled by OpenAL */ +#define SDL_AUDIO_DRIVER_ANDROID 0 +#define SDL_AUDIO_DRIVER_OPENSLES 0 +#define SDL_AUDIO_DRIVER_AAUDIO 0 #define SDL_AUDIO_DRIVER_DUMMY 1 /* Enable various input drivers */