From 0967dae16ccfa807ab56ba8bfabe4476393d05f6 Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Tue, 9 Nov 2021 18:57:03 +0700 Subject: [PATCH] attempt fix blank + updated x64 libs --- app_pojavlauncher/src/main/jni/Android.mk | 2 -- app_pojavlauncher/src/main/jni/egl_bridge.c | 13 +++++----- app_pojavlauncher/src/main/jni/jre_launcher.c | 26 +++---------------- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/app_pojavlauncher/src/main/jni/Android.mk b/app_pojavlauncher/src/main/jni/Android.mk index 849111de1..60f17eb7d 100644 --- a/app_pojavlauncher/src/main/jni/Android.mk +++ b/app_pojavlauncher/src/main/jni/Android.mk @@ -36,8 +36,6 @@ LOCAL_SRC_FILES := \ input_bridge_v3.c \ jre_launcher.c \ utils.c -LOCAL_SHARED_LIBRARIES := xhook -LOCAL_C_INCLUDES := $(LOCAL_PATH)/xhook include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) diff --git a/app_pojavlauncher/src/main/jni/egl_bridge.c b/app_pojavlauncher/src/main/jni/egl_bridge.c index 883f9019f..27d284eb1 100644 --- a/app_pojavlauncher/src/main/jni/egl_bridge.c +++ b/app_pojavlauncher/src/main/jni/egl_bridge.c @@ -664,6 +664,9 @@ void pojavTerminate() { JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setupBridgeWindow(JNIEnv* env, jclass clazz, jobject surface) { potatoBridge.androidWindow = ANativeWindow_fromSurface(env, surface); + char *ptrStr = malloc(sizeof(long)); + sprintf(ptrStr, "%ld", (long) potatoBridge.androidWindow); + setenv("POJAV_WINDOW_PTR", ptrStr, 1); } void* pojavGetCurrentContext() { @@ -762,6 +765,7 @@ bool loadSymbolsVirGL() { } int pojavInit() { + potatoBridge.androidWindow = (void *)atol(getenv("POJAV_WINDOW_PTR")); ANativeWindow_acquire(potatoBridge.androidWindow); savedWidth = ANativeWindow_getWidth(potatoBridge.androidWindow); savedHeight = ANativeWindow_getHeight(potatoBridge.androidWindow); @@ -1032,22 +1036,19 @@ Java_org_lwjgl_glfw_GLFW_nativeEglDetachOnCurrentThread(JNIEnv *env, jclass claz } */ -JNIEXPORT jlong JNICALL -Java_org_lwjgl_glfw_GLFW_nativeEglCreateContext(JNIEnv *env, jclass clazz, jlong contextSrc) { +void* pojavCreateContext(void* contextSrc) { if (config_renderer == RENDERER_GL4ES) { const EGLint ctx_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, atoi(getenv("LIBGL_ES")), EGL_NONE }; EGLContext* ctx = eglCreateContext_p(potatoBridge.eglDisplay, config, (void*)contextSrc, ctx_attribs); - potatoBridge.eglContext = ctx; - printf("EGLBridge: Created CTX pointer = %p\n",ctx); //(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception"); return (long)ctx; } - + if (config_renderer == RENDERER_VK_ZINK || config_renderer == RENDERER_VIRGL) { printf("OSMDroid: generating context\n"); void* ctx = OSMesaCreateContext_p(OSMESA_RGBA,contextSrc); @@ -1082,7 +1083,7 @@ void pojavSwapInterval(int interval) { case RENDERER_VIRGL: { eglSwapInterval_p(potatoBridge.eglDisplay, interval); } break; - + case RENDERER_VK_ZINK: { printf("eglSwapInterval: NOT IMPLEMENTED YET!\n"); // Nothing to do here diff --git a/app_pojavlauncher/src/main/jni/jre_launcher.c b/app_pojavlauncher/src/main/jni/jre_launcher.c index 74a8cf6ca..aa740a5af 100644 --- a/app_pojavlauncher/src/main/jni/jre_launcher.c +++ b/app_pojavlauncher/src/main/jni/jre_launcher.c @@ -33,8 +33,6 @@ // Boardwalk: missing include #include -#include - #include "log.h" #include "utils.h" @@ -85,18 +83,9 @@ typedef jint JLI_Launch_func(int argc, char ** argv, /* main argc, argc */ jint ergo /* ergonomics class policy */ ); -void* (*old_dlopen)(const char *filename, int flags); -void* custom_dlopen(const char *filename, int flags) { - if (flags == (RTLD_LAZY | RTLD_LOCAL)) { - return old_dlopen(filename, RTLD_LAZY | RTLD_GLOBAL); - } else { - return old_dlopen(filename, flags); - } -} - static jint launchJVM(int margc, char** margv) { void* libjli = dlopen("libjli.so", RTLD_LAZY | RTLD_GLOBAL); - + // Boardwalk: silence // LOGD("JLI lib = %x", (int)libjli); if (NULL == libjli) { @@ -170,13 +159,6 @@ JNIEXPORT jint JNICALL Java_com_oracle_dalvik_VMLauncher_launchJVM(JNIEnv *env, CATCHSIG(SIGXFSZ); //Signal trapper ready - // Since we have moved from JNI call to LWJGL call for fixing GL context - // set incorrectly, we're facing another problem: fields in the previously - // loaded pojavexec aren't shared to LWJGL loaded one, is it because - // of RTLD_LOCAL? hook moment. - xhook_register(".*/liblwjgl.so$","dlopen",custom_dlopen,&old_dlopen); - xhook_refresh(1); - // Save dalvik JNIEnv pointer for JVM launch thread dalvikJNIEnvPtr_ANDROID = env; @@ -188,15 +170,15 @@ JNIEXPORT jint JNICALL Java_com_oracle_dalvik_VMLauncher_launchJVM(JNIEnv *env, int argc = (*env)->GetArrayLength(env, argsArray); char **argv = convert_to_char_array(env, argsArray); - + LOGD("Done processing args"); res = launchJVM(argc, argv); LOGD("Going to free args"); free_char_array(env, argsArray, argv); - + LOGD("Free done"); - + return res; }