diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/version b/app_pojavlauncher/src/main/assets/components/lwjgl3/version index 1a3dd0d1b..22f1f8256 100644 --- a/app_pojavlauncher/src/main/assets/components/lwjgl3/version +++ b/app_pojavlauncher/src/main/assets/components/lwjgl3/version @@ -1 +1 @@ -1677787112613 \ No newline at end of file +1677849361119 \ No newline at end of file diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java index 55d8d9416..7716a93e3 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/MainActivity.java @@ -154,6 +154,7 @@ public class MainActivity extends BaseActivity implements ControlButtonMenuListe mVersionId = version; isInputStackCall = Tools.getVersionInfo(mVersionId).arguments != null; + CallbackBridge.nativeSetUseInputStackQueue(isInputStackCall); Tools.getDisplayMetrics(this); windowWidth = Tools.getDisplayFriendlyRes(currentDisplayMetrics.widthPixels, scaleFactor); diff --git a/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java index 948205052..8c7942689 100644 --- a/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/app_pojavlauncher/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -40,7 +40,6 @@ public class CallbackBridge { public static void sendCursorPos(float x, float y) { if (!threadAttached) { - nativeSetUseInputStackQueue(MainActivity.isInputStackCall); threadAttached = CallbackBridge.nativeAttachThreadToOther(true, MainActivity.isInputStackCall); } diff --git a/app_pojavlauncher/src/main/jni/input_bridge_v3.c b/app_pojavlauncher/src/main/jni/input_bridge_v3.c index f7038fa3f..c52e7c727 100644 --- a/app_pojavlauncher/src/main/jni/input_bridge_v3.c +++ b/app_pojavlauncher/src/main/jni/input_bridge_v3.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "log.h" #include "utils.h" @@ -91,7 +92,7 @@ void JNI_OnUnload(JavaVM* vm, void* reserved) { */ //dalvikJNIEnvPtr_JRE = NULL; - runtimeJNIEnvPtr_ANDROID = NULL; + //runtimeJNIEnvPtr_ANDROID = NULL; } #define ADD_CALLBACK_WWIN(NAME) \ @@ -139,7 +140,7 @@ typedef struct { int i3; int i4; } GLFWInputEvent; -static size_t eventCounter = 0; +static atomic_size_t eventCounter = 0; static GLFWInputEvent events[500]; void handleFramebufferSizeJava(long window, int w, int h) { @@ -148,7 +149,8 @@ void handleFramebufferSizeJava(long window, int w, int h) { void pojavPumpEvents(void* window) { //__android_log_print(ANDROID_LOG_INFO, "input_bridge_v3", "pojavPumpEvents %d", eventCounter); - for(size_t i = 0; i < eventCounter; i++) { + size_t counter = atomic_load_explicit(&eventCounter, memory_order_acquire); + for(size_t i = 0; i < counter; i++) { GLFWInputEvent event = events[i]; switch(event.type) { case EVENT_TYPE_CHAR: @@ -183,9 +185,10 @@ void pojavPumpEvents(void* window) { cLastY = cursorY; GLFW_invoke_CursorPos(window, cursorX, cursorY); } + atomic_store_explicit(&eventCounter, counter, memory_order_release); } void pojavRewindEvents() { - eventCounter = 0; + atomic_store_explicit(&eventCounter, 0, memory_order_release); } JNIEXPORT void JNICALL @@ -215,25 +218,20 @@ Java_org_lwjgl_glfw_GLFW_glfwSetCursorPos(JNIEnv *env, jclass clazz, jlong windo void sendData(int type, int i1, int i2, int i3, int i4) { -#ifdef DEBUG - LOGD("Debug: Send data, jnienv.isNull=%d\n", runtimeJNIEnvPtr_ANDROID == NULL); -#endif - if (runtimeJNIEnvPtr_ANDROID == NULL) { - LOGE("BUG: Input is ready but thread is not attached yet."); - return; - } if(type == EVENT_TYPE_CURSOR_POS) { cursorX = i1; cursorY = i2; }else { - if (eventCounter < 499) { - GLFWInputEvent *event = &events[eventCounter++]; + size_t counter = atomic_load_explicit(&eventCounter, memory_order_acquire); + if (counter < 499) { + GLFWInputEvent *event = &events[counter++]; event->type = type; event->i1 = i1; event->i2 = i2; event->i3 = i3; event->i4 = i4; } + atomic_store_explicit(&eventCounter, counter, memory_order_release); } } @@ -298,21 +296,10 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeAttachThread #ifdef DEBUG LOGD("Debug: JNI attaching thread, isUseStackQueue=%d\n", isUseStackQueueBool); #endif - - jboolean result; - - //isUseStackQueueCall = (int) isUseStackQueueBool; - if (isAndroid) { - result = attachThread(true, &runtimeJNIEnvPtr_ANDROID); - } /* else { - result = attachThread(false, &dalvikJNIEnvPtr_JRE); - // getJavaInputBridge(&inputBridgeClass_JRE, &inputBridgeMethod_JRE); - } */ - - if (isUseStackQueueCall && isAndroid && result) { + if (isUseStackQueueCall && isAndroid) { isPrepareGrabPos = true; } - return result; + return true; } JNIEXPORT jstring JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeClipboard(JNIEnv* env, jclass clazz, jint action, jbyteArray copySrc) { @@ -488,10 +475,8 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton( JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScreenSize(JNIEnv* env, jclass clazz, jint width, jint height) { savedWidth = width; savedHeight = height; - __android_log_print(ANDROID_LOG_INFO, "NativeInput","Updated screen size: %i %i", width, height); if (isInputReady) { if (GLFW_invoke_FramebufferSize) { - __android_log_print(ANDROID_LOG_INFO, "NativeInput","Framebuffer submitted"); if (isUseStackQueueCall) { sendData(EVENT_TYPE_FRAMEBUFFER_SIZE, width, height, 0, 0); } else { @@ -500,15 +485,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScreenSize(J } if (GLFW_invoke_WindowSize) { - __android_log_print(ANDROID_LOG_INFO, "NativeInput","Window submitted"); if (isUseStackQueueCall) { sendData(EVENT_TYPE_WINDOW_SIZE, width, height, 0, 0); } else { GLFW_invoke_WindowSize((void*) showingWindow, width, height); } } - }else{ - __android_log_print(ANDROID_LOG_INFO, "NativeInput","INR"); } // return (isInputReady && (GLFW_invoke_FramebufferSize || GLFW_invoke_WindowSize)); diff --git a/app_pojavlauncher/src/main/jni/utils.h b/app_pojavlauncher/src/main/jni/utils.h index 5db4123b0..9ced63c7f 100644 --- a/app_pojavlauncher/src/main/jni/utils.h +++ b/app_pojavlauncher/src/main/jni/utils.h @@ -3,7 +3,6 @@ #include static JavaVM* runtimeJavaVMPtr; -static JNIEnv* runtimeJNIEnvPtr_ANDROID; static JNIEnv* runtimeJNIEnvPtr_JRE; static JavaVM* dalvikJavaVMPtr; @@ -12,7 +11,8 @@ static JNIEnv* dalvikJNIEnvPtr_ANDROID; static long showingWindow; -static bool isInputReady, isCursorEntered, isPrepareGrabPos, isUseStackQueueCall; +static volatile bool isInputReady; +static bool isCursorEntered, isPrepareGrabPos, isUseStackQueueCall; static int savedWidth, savedHeight; diff --git a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java index a995f96f8..74b923867 100644 --- a/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/jre_lwjgl3glfw/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -46,7 +46,6 @@ public class CallbackBridge { public static native void nativeSendData(boolean isAndroid, int type, String data); public static native boolean nativeSetInputReady(boolean ready); public static native String nativeClipboard(int action, byte[] copy); - public static native void nativeAttachThreadToOther(boolean isAndroid, boolean isUseStackQueueBool); public static native void nativeSetGrabbing(boolean grab); }