mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-08 03:53:05 -04:00
Fix compile warnings; pbuffer for 2+ EGL contexts
This commit is contained in:
parent
661272b183
commit
63cbaa7b00
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
|
/.gradle
|
||||||
/build
|
/build
|
||||||
/*/build
|
/*/build
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
@ -61,7 +62,7 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_utils_JREUtils_setupBridgeWindow
|
|||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglGetCurrentContext(JNIEnv* env, jclass clazz) {
|
JNIEXPORT jlong JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglGetCurrentContext(JNIEnv* env, jclass clazz) {
|
||||||
return eglGetCurrentContext();
|
return (jlong) eglGetCurrentContext();
|
||||||
}
|
}
|
||||||
static const EGLint es3_ctx_attribs[] = {
|
static const EGLint es3_ctx_attribs[] = {
|
||||||
EGL_CONTEXT_CLIENT_VERSION, 3,
|
EGL_CONTEXT_CLIENT_VERSION, 3,
|
||||||
@ -147,34 +148,53 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglInit(JNIEnv* env, j
|
|||||||
|
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglMakeCurrent(JNIEnv* env, jclass clazz, jlong window) {
|
JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglMakeCurrent(JNIEnv* env, jclass clazz, jlong window) {
|
||||||
|
EGLContext *currCtx = eglGetCurrentContext();
|
||||||
if (window != 0x1) {
|
printf("EGLBridge: Comparing: thr=%d, this=%p, curr=%p\n", gettid(), window, currCtx);
|
||||||
printf("Making current on window %p\n", window);
|
if (window != 0x1 && currCtx == EGL_NO_CONTEXT || currCtx == (EGLContext *) window) {
|
||||||
EGLBoolean success = eglMakeCurrent(
|
if (potatoBridge.eglContextOld != NULL && potatoBridge.eglContextOld != (void *) window) {
|
||||||
|
// Create new pbuffer per thread
|
||||||
|
// TODO get window size for 2nd+ window!
|
||||||
|
int surfaceWidth, surfaceHeight;
|
||||||
|
eglQuerySurface(potatoBridge.eglDisplay, potatoBridge.eglSurface, EGL_WIDTH, &surfaceWidth);
|
||||||
|
eglQuerySurface(potatoBridge.eglDisplay, potatoBridge.eglSurface, EGL_HEIGHT, &surfaceHeight);
|
||||||
|
int surfaceAttr[] = {
|
||||||
|
EGL_WIDTH, surfaceWidth,
|
||||||
|
EGL_HEIGHT, surfaceHeight,
|
||||||
|
EGL_NONE
|
||||||
|
};
|
||||||
|
potatoBridge.eglSurface = eglCreatePbufferSurface(potatoBridge.eglDisplay, config, surfaceAttr);
|
||||||
|
printf("EGLBridge: created pbuffer surface %p for context %p\n", potatoBridge.eglSurface, window);
|
||||||
|
}
|
||||||
|
potatoBridge.eglContextOld = (void *) window;
|
||||||
|
// eglMakeCurrent(potatoBridge.eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
|
||||||
|
printf("EGLBridge: Making current on window %p on thread %d\n", window, gettid());
|
||||||
|
EGLBoolean success = eglMakeCurrent(
|
||||||
potatoBridge.eglDisplay,
|
potatoBridge.eglDisplay,
|
||||||
potatoBridge.eglSurface,
|
potatoBridge.eglSurface,
|
||||||
potatoBridge.eglSurface,
|
potatoBridge.eglSurface,
|
||||||
/* window==0 ? EGL_NO_CONTEXT : */ (EGLContext *) window
|
/* window==0 ? EGL_NO_CONTEXT : */ (EGLContext *) window
|
||||||
);
|
);
|
||||||
if (success == EGL_FALSE) {
|
if (success == EGL_FALSE) {
|
||||||
printf("Error: eglMakeCurrent() failed: %p\n", eglGetError());
|
printf("EGLBridge: Error: eglMakeCurrent() failed: %p\n", eglGetError());
|
||||||
}
|
} else {
|
||||||
|
printf("EGLBridge: eglMakeCurrent() succeed!\n");
|
||||||
|
}
|
||||||
|
|
||||||
// Test
|
// Test
|
||||||
#ifdef GLES_TEST
|
#ifdef GLES_TEST
|
||||||
glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
|
glClearColor(0.4f, 0.4f, 0.4f, 1.0f);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
eglSwapBuffers(potatoBridge.eglDisplay, potatoBridge.eglSurface);
|
eglSwapBuffers(potatoBridge.eglDisplay, potatoBridge.eglSurface);
|
||||||
printf("First frame error: %p\n", eglGetError());
|
printf("First frame error: %p\n", eglGetError());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// idk this should convert or just `return success;`...
|
// idk this should convert or just `return success;`...
|
||||||
return success == EGL_TRUE ? JNI_TRUE : JNI_FALSE;
|
return success == EGL_TRUE ? JNI_TRUE : JNI_FALSE;
|
||||||
}else{
|
} else {
|
||||||
(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception");
|
// (*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception");
|
||||||
//return JNI_TRUE;
|
return JNI_FALSE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_org_lwjgl_glfw_GLFW_nativeEglDetachOnCurrentThread(JNIEnv *env, jclass clazz) {
|
Java_org_lwjgl_glfw_GLFW_nativeEglDetachOnCurrentThread(JNIEnv *env, jclass clazz) {
|
||||||
@ -185,14 +205,14 @@ JNIEXPORT jlong JNICALL
|
|||||||
Java_org_lwjgl_glfw_GLFW_nativeEglCreateContext(JNIEnv *env, jclass clazz, jlong contextSrc) {
|
Java_org_lwjgl_glfw_GLFW_nativeEglCreateContext(JNIEnv *env, jclass clazz, jlong contextSrc) {
|
||||||
EGLContext* ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es3_ctx_attribs);
|
EGLContext* ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es3_ctx_attribs);
|
||||||
if (ctx == EGL_NO_CONTEXT) {
|
if (ctx == EGL_NO_CONTEXT) {
|
||||||
printf("Could not create ES3 context, fallbacking to ES2\n");
|
printf("EGLBridge: Could not create ES3 context, fallbacking to ES2\n");
|
||||||
setenv("LIBGL_ES", "2", 1);
|
setenv("LIBGL_ES", "2", 1);
|
||||||
ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es2_ctx_attribs);
|
ctx = eglCreateContext(potatoBridge.eglDisplay,config,(void*)contextSrc,es2_ctx_attribs);
|
||||||
} else {
|
} else {
|
||||||
setenv("LIBGL_ES", "3", 1);
|
setenv("LIBGL_ES", "3", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Created CTX pointer = %p\n",ctx);
|
printf("EGLBridge: Created CTX pointer = %p\n",ctx);
|
||||||
//(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception");
|
//(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception");
|
||||||
return (long)ctx;
|
return (long)ctx;
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendChar(JNI
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_CHAR, codepoint, 0, 0, 0);
|
sendData(EVENT_TYPE_CHAR, codepoint, 0, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_Char(showingWindow, (unsigned int) codepoint);
|
GLFW_invoke_Char((void*) showingWindow, (unsigned int) codepoint);
|
||||||
// return lwjgl2_triggerCharEvent(codepoint);
|
// return lwjgl2_triggerCharEvent(codepoint);
|
||||||
}
|
}
|
||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
@ -242,7 +242,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendCharMods
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_CHAR_MODS, (unsigned int) codepoint, mods, 0, 0);
|
sendData(EVENT_TYPE_CHAR_MODS, (unsigned int) codepoint, mods, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_CharMods(showingWindow, codepoint, mods);
|
GLFW_invoke_CharMods((void*) showingWindow, codepoint, mods);
|
||||||
}
|
}
|
||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
}
|
}
|
||||||
@ -263,7 +263,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendCursorPos(JN
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_CURSOR_ENTER, 1, 0, 0, 0);
|
sendData(EVENT_TYPE_CURSOR_ENTER, 1, 0, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_CursorEnter(showingWindow, 1);
|
GLFW_invoke_CursorEnter((void*) showingWindow, 1);
|
||||||
}
|
}
|
||||||
} else if (isGrabbing) {
|
} else if (isGrabbing) {
|
||||||
// Some Minecraft versions does not use GLFWCursorEnterCallback
|
// Some Minecraft versions does not use GLFWCursorEnterCallback
|
||||||
@ -288,7 +288,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendCursorPos(JN
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!isUseStackQueueCall) {
|
if (!isUseStackQueueCall) {
|
||||||
GLFW_invoke_CursorPos(showingWindow, (double) (x), (double) (y));
|
GLFW_invoke_CursorPos((void*) showingWindow, (double) (x), (double) (y));
|
||||||
} else {
|
} else {
|
||||||
sendData(EVENT_TYPE_CURSOR_POS, (isGrabbing ? grabCursorX : x), (isGrabbing ? grabCursorY : y), 0, 0);
|
sendData(EVENT_TYPE_CURSOR_POS, (isGrabbing ? grabCursorX : x), (isGrabbing ? grabCursorY : y), 0, 0);
|
||||||
}
|
}
|
||||||
@ -303,7 +303,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(JNIEnv*
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_KEY, key, scancode, action, mods);
|
sendData(EVENT_TYPE_KEY, key, scancode, action, mods);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_Key(showingWindow, key, scancode, action, mods);
|
GLFW_invoke_Key((void*) showingWindow, key, scancode, action, mods);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,7 +319,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0);
|
sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_MouseButton(showingWindow, button, action, mods);
|
GLFW_invoke_MouseButton((void*) showingWindow, button, action, mods);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -334,7 +334,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScreenSize(J
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_FRAMEBUFFER_SIZE, width, height, 0, 0);
|
sendData(EVENT_TYPE_FRAMEBUFFER_SIZE, width, height, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_FramebufferSize(showingWindow, width, height);
|
GLFW_invoke_FramebufferSize((void*) showingWindow, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -342,7 +342,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScreenSize(J
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_WINDOW_SIZE, width, height, 0, 0);
|
sendData(EVENT_TYPE_WINDOW_SIZE, width, height, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_WindowSize(showingWindow, width, height);
|
GLFW_invoke_WindowSize((void*) showingWindow, width, height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,7 +355,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendScroll(JNIEn
|
|||||||
if (isUseStackQueueCall) {
|
if (isUseStackQueueCall) {
|
||||||
sendData(EVENT_TYPE_SCROLL, xoffset, yoffset, 0, 0);
|
sendData(EVENT_TYPE_SCROLL, xoffset, yoffset, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
GLFW_invoke_Scroll(showingWindow, (double) xoffset, (double) yoffset);
|
GLFW_invoke_Scroll((void*) showingWindow, (double) xoffset, (double) yoffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user