- libpojavexec.dylib is now PojavCore.framework.
- More changes for Zink renderer. Note that Mesa 21.0 is included instead of 21.2.1 due to the new version seems to be broken, only display glClearColor.
This commit is contained in:
Duy Tran Khanh committed 2021-09-17 07:00:14 +07:00
1 parent 8ffbc4f653
commit b2ffd5edc3
20 files changed
+73 -56

No files matched your search

@@ -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);
@@ -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");
}
}
@@ -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"));
}
@@ -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();
}
+10 -10
View File
@@ -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=<your iOS 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/*; \
+10 -6
View File
@@ -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
+2 -1
View File
@@ -1,10 +1,11 @@
#import <UIKit/UIKit.h>
@interface SurfaceView : UIView {
CALayer* layer;
CGColorSpaceRef colorSpace;
CGDataProviderDirectCallbacks callbacks;
}
- (void)displayLayer;
@end
@interface JavaGUIViewController : UIViewController
+4 -6
View File
@@ -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();
+3 -8
View File
@@ -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"));
+1 -1
View File
@@ -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";
+6 -4
View File
@@ -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
+4 -16
View File
@@ -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);
}
+4
View File
@@ -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();
+25
View File
@@ -0,0 +1,25 @@
#include <assert.h>
#include <dlfcn.h>
// #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);
}
}