diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java index dd96a958..bb95175f 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/uikit/UIKit.java @@ -151,7 +151,7 @@ public class UIKit { } static { - System.loadLibrary("pojavexec"); + System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); } public static native void refreshAWTBuffer(int[] array); diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java index ea61eaae..79069ab3 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/utils/JREUtils.java @@ -18,6 +18,6 @@ public class JREUtils public static native void saveGLContext(); static { - System.loadLibrary("pojavexec"); + System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); } } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java index a7cc2e0b..dc5de3b9 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/CallbackBridge.java @@ -35,7 +35,7 @@ public class CallbackBridge { // TODO send grab state event to Android static { - System.loadLibrary("pojavexec"); + System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); INPUT_DEBUG_ENABLED = Boolean.parseBoolean(System.getProperty("glfwstub.debugInput", "false")); } diff --git a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java index 2cd30d5a..f7376715 100644 --- a/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java +++ b/JavaApp/src/main/java/org/lwjgl/glfw/GLFW.java @@ -501,7 +501,7 @@ public class GLFW public static long mainContext = 0; static { try { - System.loadLibrary("pojavexec"); + System.load(System.getenv("BUNDLE_PATH") + "/Frameworks/PojavCore.framework/PojavCore"); } catch (UnsatisfiedLinkError e) { e.printStackTrace(); } diff --git a/Makefile b/Makefile index 803e7471..0b0bf712 100644 --- a/Makefile +++ b/Makefile @@ -106,7 +106,7 @@ native: -DCONFIG_COMMIT="$(COMMIT)" \ -DCONFIG_RELEASE=$(RELEASE) \ .. - @cd Natives/build && cmake --build . --config $(CMAKE_BUILD_TYPE) --target awt_headless awt_xawt pojavexec PojavLauncher + @cd Natives/build && cmake --build . --config $(CMAKE_BUILD_TYPE) --target awt_headless awt_xawt PojavCore PojavLauncher @rm Natives/build/libawt_headless.dylib @echo 'Finished build task - native application' @@ -136,7 +136,7 @@ package: native java extras cp -R Natives/resources/* Natives/build/PojavLauncher.app/ || exit 1; \ cp Natives/build/libawt_xawt.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ ( cd Natives/build/PojavLauncher.app/Frameworks; ln -sf libawt_xawt.dylib libawt_headless.dylib ) || exit 1; \ - cp Natives/build/libpojavexec.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ + cp -R Natives/build/PojavCore.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ mkdir Natives/build/PojavLauncher.app/{libs,libs_caciocavallo}; \ cp JavaApp/local_out/launcher.jar Natives/build/PojavLauncher.app/libs/launcher.jar || exit 1; \ cp -R JavaApp/libs/* Natives/build/PojavLauncher.app/libs/ || exit 1; \ @@ -159,7 +159,7 @@ package: native java extras cp -R Natives/PkgInfo Natives/build/PojavLauncher.app/PkgInfo || exit 1; \ cp Natives/build/libawt_xawt.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ ( cd Natives/build/PojavLauncher.app/Frameworks; ln -sf libawt_xawt.dylib libawt_headless.dylib ) || exit 1; \ - cp Natives/build/libpojavexec.dylib Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ + cp -R Natives/build/PojavCore.framework Natives/build/PojavLauncher.app/Frameworks/ || exit 1; \ cp -R Natives/resources/* Natives/build/PojavLauncher.app/ || exit 1; \ cp -R JavaApp/libs Natives/build/PojavLauncher.app/libs || exit 1; \ cp -R JavaApp/libs_caciocavallo Natives/build/PojavLauncher.app/libs_caciocavallo || exit 1; \ @@ -208,19 +208,19 @@ deploy: native java if [ '$(DEVICE_IP)' != '' ]; then \ ldid -Sentitlements.xml Natives/build/PojavLauncher.app/PojavLauncher; \ if [ '$(DEVICE_PORT)' != '' ]; then \ - scp -P $(DEVICE_PORT) -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" Natives/build/libpojavexec.dylib \ + scp -r -P $(DEVICE_PORT) -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" Natives/build/PojavCore.framework \ Natives/build/libawt_xawt.dylib \ Natives/build/PojavLauncher.app/PojavLauncher \ JavaApp/local_out/launcher.jar \ - root@$(DEVICE_IP):/var/tmp; \ - ssh root@$(DEVICE_IP) -p $(DEVICE_PORT) -t "mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && mv /var/tmp/libpojavexec.dylib /Applications/PojavLauncher.app/Frameworks/libpojavexec.dylib && mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && cd /Applications/PojavLauncher.app/Frameworks && ln -sf libawt_xawt.dylib libawt_headless.dylib && killall PojavLauncher && chown -R 501:501 /Applications/PojavLauncher.app/*"; \ + root@$(DEVICE_IP):/var/tmp/; \ + ssh root@$(DEVICE_IP) -p $(DEVICE_PORT) -t "mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && rm -rf /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && mv /var/tmp/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && cd /Applications/PojavLauncher.app/Frameworks && ln -sf libawt_xawt.dylib libawt_headless.dylib && killall PojavLauncher && chown -R 501:501 /Applications/PojavLauncher.app/*"; \ else \ - scp -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" Natives/build/libpojavexec.dylib \ + scp -r -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" Natives/build/PojavCore.framework \ Natives/build/libawt_xawt.dylib \ Natives/build/PojavLauncher.app/PojavLauncher \ JavaApp/local_out/launcher.jar \ - root@$(DEVICE_IP):/var/tmp; \ - ssh root@$(DEVICE_IP) -t "mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && mv /var/tmp/libpojavexec.dylib /Applications/PojavLauncher.app/Frameworks/libpojavexec.dylib && mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && cd /Applications/PojavLauncher.app/Frameworks && ln -sf libawt_xawt.dylib libawt_headless.dylib && killall PojavLauncher && chown -R 501:501 /Applications/PojavLauncher.app/*"; \ + root@$(DEVICE_IP):/var/tmp/; \ + ssh root@$(DEVICE_IP) -t "mv /var/tmp/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/libawt_xawt.dylib && rm -rf /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && mv /var/tmp/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/PojavCore.framework && mv /var/tmp/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher && mv /var/tmp/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar && cd /Applications/PojavLauncher.app/Frameworks && ln -sf libawt_xawt.dylib libawt_headless.dylib && killall PojavLauncher && chown -R 501:501 /Applications/PojavLauncher.app/*"; \ fi; \ else \ echo 'You need to run '\''export DEVICE_IP='\'' to use make deploy.'; \ @@ -231,7 +231,7 @@ deploy: native java sudo cp JavaApp/local_out/launcher.jar /Applications/PojavLauncher.app/libs/launcher.jar; \ sudo cp Natives/build/PojavLauncher.app/PojavLauncher /Applications/PojavLauncher.app/PojavLauncher; \ sudo cp Natives/build/libawt_xawt.dylib /Applications/PojavLauncher.app/Frameworks/; \ - sudo cp Natives/build/libpojavexec.dylib /Applications/PojavLauncher.app/Frameworks/; \ + sudo cp -R Natives/build/PojavCore.framework /Applications/PojavLauncher.app/Frameworks/; \ cd /Applications/PojavLauncher.app/Frameworks; \ sudo ln -sf libawt_xawt.dylib libawt_headless.dylib; \ sudo chown -R 501:501 /Applications/PojavLauncher.app/*; \ diff --git a/Natives/CMakeLists.txt b/Natives/CMakeLists.txt index 709aad0d..8f183f97 100644 --- a/Natives/CMakeLists.txt +++ b/Natives/CMakeLists.txt @@ -28,9 +28,9 @@ target_link_libraries(awt_xawt set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") -set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rpath @executable_path/Frameworks -rpath @loader_path/Frameworks -rpath @loader_path/Frameworks/libpojavexec.dylib.framework") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rpath @executable_path/Frameworks -rpath @loader_path/Frameworks") -add_library(pojavexec SHARED +add_library(PojavCore SHARED AboutLauncherViewController.m AppDelegate.m CustomControlsViewController.m @@ -52,11 +52,14 @@ add_library(pojavexec SHARED log.m utils.m ) -target_link_libraries(pojavexec +set_target_properties(PojavCore PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION CXX +) +target_link_libraries(PojavCore "-F'${CMAKE_CURRENT_LIST_DIR}/resources/Frameworks'" "-framework AuthenticationServices" "-framework CoreGraphics" - "-framework MetalANGLE" "-framework QuartzCore" "-framework UIKit" ) @@ -68,8 +71,9 @@ add_executable(PojavLauncher external/fishhook/fishhook.c ) target_link_libraries(PojavLauncher - "-L'${CMAKE_CURRENT_LIST_DIR}/build'" - "-framework UIKit -lpojavexec" + "-F'${CMAKE_CURRENT_LIST_DIR}/build'" + "-framework PojavCore" + "-framework UIKit" ) set_target_properties(PojavLauncher PROPERTIES MACOSX_BUNDLE TRUE diff --git a/Natives/JavaGUIViewController.h b/Natives/JavaGUIViewController.h index 641206de..14523e52 100644 --- a/Natives/JavaGUIViewController.h +++ b/Natives/JavaGUIViewController.h @@ -1,10 +1,11 @@ #import @interface SurfaceView : UIView { - CALayer* layer; CGColorSpaceRef colorSpace; CGDataProviderDirectCallbacks callbacks; } + +- (void)displayLayer; @end @interface JavaGUIViewController : UIViewController diff --git a/Natives/JavaGUIViewController.m b/Natives/JavaGUIViewController.m index 492e3ff5..fc4fe605 100644 --- a/Natives/JavaGUIViewController.m +++ b/Natives/JavaGUIViewController.m @@ -14,7 +14,7 @@ JNIEXPORT void JNICALL Java_net_kdt_pojavlaunch_uikit_UIKit_refreshAWTBuffer(JNI memcpy(rgbArray, tmpArray, savedWidth * savedHeight * 4); (*env)->ReleaseIntArrayElements(env, jreRgbArray, tmpArray, JNI_ABORT); dispatch_async(dispatch_get_main_queue(), ^{ - [surfaceView displayLayer:surfaceView.layer]; + [surfaceView displayLayer]; }); } @@ -23,12 +23,11 @@ const void * _CGDataProviderGetBytePointerCallbackAWT(void *info) { return (const void *)rgbArray; } -- (void)displayLayer:(CALayer *)theLayer -{ +- (void)displayLayer { CGDataProviderRef bitmapProvider = CGDataProviderCreateDirect(NULL, savedWidth * savedHeight * 4, &callbacks); CGImageRef bitmap = CGImageCreate(savedWidth, savedHeight, 8, 32, 4 * savedWidth, colorSpace, kCGImageAlphaFirst | kCGBitmapByteOrder32Little, bitmapProvider, NULL, FALSE, kCGRenderingIntentDefault); - theLayer.contents = (__bridge id) bitmap; + self.layer.contents = (__bridge id) bitmap; CGImageRelease(bitmap); CGDataProviderRelease(bitmapProvider); // CGColorSpaceRelease(colorSpace); @@ -37,8 +36,7 @@ const void * _CGDataProviderGetBytePointerCallbackAWT(void *info) { - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; - layer = [self layer]; - layer.opaque = YES; + self.layer.opaque = YES; colorSpace = CGColorSpaceCreateDeviceRGB(); diff --git a/Natives/JavaLauncher.m b/Natives/JavaLauncher.m index 6ae2193c..11259ccf 100644 --- a/Natives/JavaLauncher.m +++ b/Natives/JavaLauncher.m @@ -344,13 +344,8 @@ int launchJVM(int argc, char *argv[]) { // Disable overloaded functions hack for Minecraft 1.17+ setenv("LIBGL_NOINTOVLHACK", "1", 1); - // Regal environment variables - setenv("REGAL_GL_VENDOR", "MetalANGLE", 1); - setenv("REGAL_GL_RENDERER", "Regal", 1); - setenv("REGAL_GL_VERSION", "4.5", 1); - setenv("REGAL_LOG_APP", "1", 1); - setenv("REGAL_LOG_DRIVER", "1", 1); - setenv("REGAL_LOG_INTERNAL", "1", 1); + // Override OpenGL version to 4.1 for Zink + setenv("MESA_GL_VERSION_OVERRIDE", "4.1", 1); javaHome_pre = getPreference(@"java_home"); javaHome = [javaHome_pre cStringUsingEncoding:NSUTF8StringEncoding]; @@ -555,7 +550,7 @@ int launchJVM(int argc, char *argv[]) { char *userHome = calloc(1, 2048); char *memMin = calloc(1, 2048); char *memMax = calloc(1, 2048); - snprintf(frameworkPath, 2048, "-Djava.library.path=%s/Frameworks", getenv("BUNDLE_PATH")); + snprintf(frameworkPath, 2048, "-Djava.library.path=%s/Frameworks:%s/Frameworks/libOSMesa.8.dylib.framework", getenv("BUNDLE_PATH"), getenv("BUNDLE_PATH")); snprintf(javaPath, 2048, "%s/bin/java", javaHome); snprintf(userDir, 2048, "-Duser.dir=%s", getenv("POJAV_GAME_DIR")); snprintf(userHome, 2048, "-Duser.home=%s", getenv("POJAV_HOME")); diff --git a/Natives/LauncherPreferencesViewController.m b/Natives/LauncherPreferencesViewController.m index c3266a5d..831a22e1 100644 --- a/Natives/LauncherPreferencesViewController.m +++ b/Natives/LauncherPreferencesViewController.m @@ -46,7 +46,7 @@ UIScrollView *scrollView; NSString *gl4es114 = @"GL4ES 1.1.4 - exports OpenGL 2.1"; NSString *gl4es115 = @"GL4ES 1.1.5 (1.16+) - exports OpenGL 2.1"; NSString *tinygl4angle = @"tinygl4angle (1.17+) - exports OpenGL 3.2 (Core Profile, limited)"; -NSString *zink = @"Zink (Mesa 21.2.1) - exports OpenGL 4.6"; +NSString *zink = @"Zink (Mesa 21.0) - exports OpenGL 4.1"; NSString *java8jben = @"Java 8"; NSString *java16jben = @"Java 16"; NSString *java17jben = @"Java 17"; diff --git a/Natives/SurfaceViewController.h b/Natives/SurfaceViewController.h index 504e06bd..60e80b1c 100644 --- a/Natives/SurfaceViewController.h +++ b/Natives/SurfaceViewController.h @@ -4,14 +4,16 @@ @interface GameSurfaceView : UIView { -CALayer* layer; -CGColorSpaceRef colorSpace; -CGDataProviderDirectCallbacks callbacks; + CALayer* layer; + CGColorSpaceRef colorSpace; + CGDataProviderDirectCallbacks callbacks; } + +- (void)displayLayer; @end @interface SurfaceViewController : UIViewController -@property(nonatomic, strong) UIView* surfaceView; +@property(nonatomic, strong) GameSurfaceView* surfaceView; @end diff --git a/Natives/SurfaceViewController.m b/Natives/SurfaceViewController.m index ef5fa738..3de5b9a1 100644 --- a/Natives/SurfaceViewController.m +++ b/Natives/SurfaceViewController.m @@ -40,12 +40,11 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { return gbuffer; } -- (void)displayLayer:(CALayer *)theLayer -{ +- (void)displayLayer { CGDataProviderRef bitmapProvider = CGDataProviderCreateDirect(NULL, savedWidth * savedHeight * 4, &callbacks); CGImageRef bitmap = CGImageCreate(savedWidth, savedHeight, 8, 32, 4 * savedWidth, colorSpace, kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder16Little, bitmapProvider, NULL, FALSE, kCGRenderingIntentDefault); - theLayer.contents = (__bridge id) bitmap; + self.layer.contents = (__bridge id) bitmap; CGImageRelease(bitmap); CGDataProviderRelease(bitmapProvider); // CGColorSpaceRelease(colorSpace); @@ -55,8 +54,7 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { self = [super initWithFrame:frame]; if ([@(getenv("RENDERER")) hasPrefix:@"libOSMesa"]) { - layer = [self layer]; - layer.opaque = YES; + self.layer.opaque = YES; colorSpace = CGColorSpaceCreateDeviceRGB(); @@ -121,10 +119,8 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { [self.view addSubview:self.surfaceView]; // Enable support for desktop GLSL - eglBindAPI(EGL_OPENGL_API); if ([getPreference(@"disable_gl4es_shaderconv") boolValue]) { setenv("LIBGL_NOSHADERCONV", "1", 1); - NSLog(@"eglBindAPI(EGL_OPENGL_API) error=%x", eglGetError()); } notchOffset = insets.left; @@ -257,15 +253,7 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) { return NO; } -#pragma mark - MetalANGLE stuff - -- (void)dealloc -{ - [MGLContext setCurrentContext:nil]; -} - -- (void)setupGL -{ +- (void)setupGL { callback_SurfaceViewController_launchMinecraft(savedWidth * resolutionScale, savedHeight * resolutionScale); } diff --git a/Natives/egl_bridge.m b/Natives/egl_bridge.m index 3a9170b7..b70e5ff7 100644 --- a/Natives/egl_bridge.m +++ b/Natives/egl_bridge.m @@ -303,6 +303,9 @@ void flipFrame() { case RENDERER_VK_ZINK: { glFinish_p(); + dispatch_async(dispatch_get_main_queue(), ^{ + [((SurfaceViewController *)viewController).surfaceView displayLayer]; + }); } break; } } @@ -394,6 +397,7 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_glfw_GLFW_nativeEglMakeCurrent(JNIEnv* OSMesaPixelStore_p(OSMESA_Y_UP,0); NSLog(@"OSMDroid: vendor: %s",glGetString_p(GL_VENDOR)); NSLog(@"OSMDroid: renderer: %s",glGetString_p(GL_RENDERER)); + NSLog(@"OSMDroid: extensions: %s",glGetString_p(GL_EXTENSIONS)); glClear_p(GL_COLOR_BUFFER_BIT); glClearColor_p(0.4f, 0.4f, 0.4f, 1.0f); flipFrame(); diff --git a/Natives/gl_mesa3d_patch.c b/Natives/gl_mesa3d_patch.c new file mode 100644 index 00000000..23af71b6 --- /dev/null +++ b/Natives/gl_mesa3d_patch.c @@ -0,0 +1,25 @@ +#include +#include +// #include "log.h" + +#include "GL/gl.h" + +void (*glDrawArrays_p) (GLenum mode, GLint first, GLsizei count); + +GLAPI void GLAPIENTRY glDrawArrays(GLenum mode, GLint first, GLsizei count) { + if (!glDrawArrays_p) { + glDrawArrays_p = dlsym(RTLD_NEXT, "glDrawArrays"); + } + + // debug("func=%p, next=%p", glDrawArrays, glDrawArrays_real); + // debug("glDrawArrays mode=%p", mode); + if (mode == GL_TRIANGLE_FAN) { + // debug("ERROR: GL_TRIANGLE_FAN unsupported!"); + + // this is wrong but idk how to deal with it yet... + // minecraft stills works with this for unknown reason + glDrawArrays_real(GL_TRIANGLE_STRIP, first, count); + } else { + glDrawArrays_real(mode, first, count); + } +} diff --git a/Natives/resources/Frameworks/libMoltenVK.dylib.framework/Info.plist b/Natives/resources/Frameworks/libMoltenVK.dylib.framework/Info.plist new file mode 100644 index 00000000..3f2a1a73 Binary files /dev/null and b/Natives/resources/Frameworks/libMoltenVK.dylib.framework/Info.plist differ diff --git a/Natives/resources/Frameworks/libMoltenVK.dylib.framework/libMoltenVK.dylib b/Natives/resources/Frameworks/libMoltenVK.dylib.framework/libMoltenVK.dylib new file mode 100755 index 00000000..d8b0e067 Binary files /dev/null and b/Natives/resources/Frameworks/libMoltenVK.dylib.framework/libMoltenVK.dylib differ diff --git a/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/Info.plist b/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/Info.plist new file mode 100644 index 00000000..0854e5c4 Binary files /dev/null and b/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/Info.plist differ diff --git a/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/libOSMesa.8.dylib b/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/libOSMesa.8.dylib new file mode 100755 index 00000000..61fc3e4d Binary files /dev/null and b/Natives/resources/Frameworks/libOSMesa.8.dylib.framework/libOSMesa.8.dylib differ diff --git a/Natives/resources/Frameworks/libglapi.0.dylib.framework/Info.plist b/Natives/resources/Frameworks/libglapi.0.dylib.framework/Info.plist new file mode 100644 index 00000000..6fb4fc7a Binary files /dev/null and b/Natives/resources/Frameworks/libglapi.0.dylib.framework/Info.plist differ diff --git a/Natives/resources/Frameworks/libglapi.0.dylib.framework/libglapi.0.dylib b/Natives/resources/Frameworks/libglapi.0.dylib.framework/libglapi.0.dylib new file mode 100755 index 00000000..84bd2b62 Binary files /dev/null and b/Natives/resources/Frameworks/libglapi.0.dylib.framework/libglapi.0.dylib differ