Refactor egl_bridge.m: no longer preloading gl4es
This commit is contained in:
1 parent
7220af520b
commit
a08563ee36
1 file changed
+37
-38
+37
-38
@@ -70,10 +70,10 @@ int (*vtest_main_p) (int, const char*[]);
|
||||
void (*vtest_swap_buffers_p) (void);
|
||||
void* egl_make_current(void* window);
|
||||
|
||||
#define RENDERER_VULKAN 0
|
||||
#define RENDERER_MTL_ANGLE 1
|
||||
#define RENDERER_VK_ZINK 2
|
||||
#define RENDERER_VIRGL 3
|
||||
#define RENDERER_VULKAN 4
|
||||
|
||||
int config_renderer;
|
||||
|
||||
@@ -167,9 +167,9 @@ void dlsym_OSMesa(void* dl_handle) {
|
||||
glFinish_p = dlsym(dl_handle,"glFinish");
|
||||
}
|
||||
|
||||
void loadSymbols() {
|
||||
void loadSymbols(int renderer) {
|
||||
char fileName[2048];
|
||||
switch (config_renderer) {
|
||||
switch (renderer) {
|
||||
case RENDERER_VK_ZINK:
|
||||
sprintf((char *)fileName, "%s/Frameworks/%s", getenv("BUNDLE_PATH"), getenv("POJAV_RENDERER"));
|
||||
break;
|
||||
@@ -183,7 +183,7 @@ void loadSymbols() {
|
||||
NSLog(@"DlLoader: unable to load: %s", dlerror());
|
||||
return;
|
||||
}
|
||||
switch(config_renderer) {
|
||||
switch(renderer) {
|
||||
case RENDERER_VK_ZINK:
|
||||
dlsym_OSMesa(dl_handle);
|
||||
break;
|
||||
@@ -194,11 +194,8 @@ void loadSymbols() {
|
||||
}
|
||||
|
||||
void loadSymbolsVirGL() {
|
||||
config_renderer = RENDERER_MTL_ANGLE;
|
||||
loadSymbols();
|
||||
config_renderer = RENDERER_VK_ZINK;
|
||||
loadSymbols();
|
||||
config_renderer = RENDERER_VIRGL;
|
||||
loadSymbols(RENDERER_MTL_ANGLE);
|
||||
loadSymbols(RENDERER_VK_ZINK);
|
||||
|
||||
char fileName[2048];
|
||||
sprintf((char *)fileName, "%s/Frameworks/libvirgl_test_server.dylib", getenv("BUNDLE_PATH"));
|
||||
@@ -222,24 +219,24 @@ jboolean pojavInit_OpenGL() {
|
||||
if (config_renderer) return JNI_TRUE;
|
||||
|
||||
NSString *renderer = @(getenv("POJAV_RENDERER"));
|
||||
JNI_LWJGL_changeRenderer(renderer.UTF8String);
|
||||
BOOL isAuto = [renderer isEqualToString:@"auto"];
|
||||
/* if ([renderer isEqualToString:@"libOSMesa.8.dylib"]) {
|
||||
config_renderer = RENDERER_VIRGL;
|
||||
setenv("GALLIUM_DRIVER", "virpipe", 1);
|
||||
loadSymbolsVirGL();
|
||||
} else */ if (isAuto || [renderer isEqualToString:@ RENDERER_NAME_GL4ES]) {
|
||||
// At this point, if renderer is still auto (unspecified major version), pick gl4es
|
||||
config_renderer = RENDERER_MTL_ANGLE;
|
||||
setenv("POJAV_RENDERER", RENDERER_NAME_GL4ES, 1);
|
||||
loadSymbols();
|
||||
renderer = @ RENDERER_NAME_GL4ES;
|
||||
setenv("POJAV_RENDERER", renderer.UTF8String, 1);
|
||||
} else if ([renderer isEqualToString:@ RENDERER_NAME_MTL_ANGLE]) {
|
||||
config_renderer = RENDERER_MTL_ANGLE;
|
||||
loadSymbols();
|
||||
} else if ([renderer hasPrefix:@"libOSMesa"]) {
|
||||
config_renderer = RENDERER_VK_ZINK;
|
||||
setenv("GALLIUM_DRIVER","zink",1);
|
||||
loadSymbols();
|
||||
}
|
||||
JNI_LWJGL_changeRenderer(renderer.UTF8String);
|
||||
loadSymbols(config_renderer);
|
||||
|
||||
if (config_renderer == RENDERER_MTL_ANGLE || config_renderer == RENDERER_VIRGL) {
|
||||
if (potatoBridge.eglDisplay == EGL_NO_DISPLAY) {
|
||||
@@ -250,21 +247,11 @@ jboolean pojavInit_OpenGL() {
|
||||
}
|
||||
}
|
||||
|
||||
// Pre-load the renderer library
|
||||
// FIXME: gl4es has to be pre-loaded if it is going to be used later,
|
||||
// or glCheckFramebufferStatus will return an error
|
||||
void *renderer_handle = dlopen(getenv("POJAV_RENDERER"), RTLD_GLOBAL);
|
||||
NSDebugLog(@"%s=%p, error=%s", getenv("POJAV_RENDERER"), renderer_handle, dlerror());
|
||||
|
||||
// Set back to the previous value
|
||||
setenv("POJAV_RENDERER", renderer.UTF8String, 1);
|
||||
if (isAuto) {
|
||||
JNI_LWJGL_changeRenderer(RENDERER_NAME_GL4ES);
|
||||
}
|
||||
// Obtain the renderer library handle
|
||||
void *renderer_handle = dlopen(renderer.UTF8String, RTLD_GLOBAL);
|
||||
NSDebugLog(@"%s=%p, error=%s", renderer.UTF8String, renderer_handle, dlerror());
|
||||
|
||||
NSDebugLog(@"EGLBridge: Initializing");
|
||||
// printf("EGLBridge: ANativeWindow pointer = %p\n", potatoBridge.androidWindow);
|
||||
//(*env)->ThrowNew(env,(*env)->FindClass(env,"java/lang/Exception"),"Trace exception");
|
||||
if (!eglInitialize_p(potatoBridge.eglDisplay, NULL, NULL)) {
|
||||
NSDebugLog(@"EGLBridge: Error eglInitialize() failed: 0x%x", eglGetError_p());
|
||||
return JNI_FALSE;
|
||||
@@ -293,7 +280,7 @@ jboolean pojavInit_OpenGL() {
|
||||
assert(num_configs > 0);
|
||||
|
||||
if (!eglGetConfigAttrib_p(potatoBridge.eglDisplay, config, EGL_NATIVE_VISUAL_ID, &vid)) {
|
||||
NSLog(@"EGLBridge: Error eglGetConfigAttrib() failed: 0x%x", eglGetError_p());
|
||||
NSDebugLog(@"EGLBridge: Error eglGetConfigAttrib() failed: 0x%x", eglGetError_p());
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
@@ -370,18 +357,26 @@ void pojavSetWindowHint(int hint, int value) {
|
||||
// pojavInit_Vulkan();
|
||||
break;
|
||||
case GLFW_OPENGL_API:
|
||||
pojavInit_OpenGL();
|
||||
/* Nothing to do: initialization is called in pojavCreateContext */
|
||||
// pojavInit_OpenGL();
|
||||
break;
|
||||
default:
|
||||
NSLog(@"GLFW: Unimplemented API 0x%x", value);
|
||||
abort();
|
||||
}
|
||||
} else if (strcmp(getenv("POJAV_RENDERER"), "auto")==0 && hint == GLFW_CONTEXT_VERSION_MAJOR && value >= 3) {
|
||||
// Free unused gl4es library
|
||||
void *renderer_handle = dlopen(RENDERER_NAME_GL4ES, RTLD_GLOBAL);
|
||||
dlclose(renderer_handle);
|
||||
|
||||
JNI_LWJGL_changeRenderer(RENDERER_NAME_MTL_ANGLE);
|
||||
} else if (strcmp(getenv("POJAV_RENDERER"), "auto")==0 && hint == GLFW_CONTEXT_VERSION_MAJOR) {
|
||||
switch (value) {
|
||||
case 1:
|
||||
case 2:
|
||||
setenv("POJAV_RENDERER", RENDERER_NAME_GL4ES, 1);
|
||||
JNI_LWJGL_changeRenderer(RENDERER_NAME_GL4ES);
|
||||
break;
|
||||
// case 4: use Zink?
|
||||
default:
|
||||
setenv("POJAV_RENDERER", RENDERER_NAME_MTL_ANGLE, 1);
|
||||
JNI_LWJGL_changeRenderer(RENDERER_NAME_MTL_ANGLE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -483,12 +478,16 @@ void pojavMakeCurrent(void* window) {
|
||||
return;
|
||||
}
|
||||
|
||||
// should not reach here
|
||||
NSLog(@"Error: Invalid renderer %d, aborting.", config_renderer);
|
||||
abort();
|
||||
if (window) {
|
||||
// should not reach here
|
||||
NSLog(@"Error: Invalid renderer %d, aborting.", config_renderer);
|
||||
abort();
|
||||
}
|
||||
}
|
||||
|
||||
void* pojavCreateContext(void* contextSrc) {
|
||||
pojavInit_OpenGL();
|
||||
|
||||
if (config_renderer == RENDERER_VULKAN) {
|
||||
return (__bridge void *)(((SurfaceViewController *)currentWindow().rootViewController).surfaceView.layer);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user