Fix CGImageCreate returning NULL on iOS 16
This commit is contained in:
1 parent
026e35b842
commit
4c2f9e513b
3 files changed
+9
-16
No files matched your search
@@ -4,18 +4,14 @@
|
|||||||
#import "utils.h"
|
#import "utils.h"
|
||||||
|
|
||||||
@implementation GameSurfaceView
|
@implementation GameSurfaceView
|
||||||
const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) {
|
|
||||||
return gbuffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)displayLayer {
|
- (void)displayLayer {
|
||||||
CGDataProviderRef bitmapProvider = CGDataProviderCreateDirect(NULL, windowWidth * windowHeight * 4, &callbacks);
|
CGDataProviderRef bitmapProvider = CGDataProviderCreateWithData(NULL, gbuffer, windowWidth * windowHeight * 4, NULL);
|
||||||
CGImageRef bitmap = CGImageCreate(windowWidth, windowHeight, 8, 32, 4 * windowWidth, colorSpace, kCGImageAlphaNoneSkipLast | kCGBitmapByteOrder16Little, bitmapProvider, NULL, FALSE, kCGRenderingIntentDefault);
|
CGImageRef bitmap = CGImageCreate(windowWidth, windowHeight, 8, 32, 4 * windowWidth, colorSpace, kCGImageAlphaNoneSkipLast | kCGBitmapByteOrderDefault, bitmapProvider, NULL, FALSE, kCGRenderingIntentDefault);
|
||||||
|
|
||||||
self.layer.contents = (__bridge id) bitmap;
|
self.layer.contents = (__bridge id) bitmap;
|
||||||
CGImageRelease(bitmap);
|
CGImageRelease(bitmap);
|
||||||
CGDataProviderRelease(bitmapProvider);
|
CGDataProviderRelease(bitmapProvider);
|
||||||
// CGColorSpaceRelease(colorSpace);
|
//CGColorSpaceRelease(colorSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithFrame:(CGRect)frame {
|
- (id)initWithFrame:(CGRect)frame {
|
||||||
@@ -23,15 +19,8 @@ const void * _CGDataProviderGetBytePointerCallbackOSMESA(void *info) {
|
|||||||
self.layer.drawsAsynchronously = YES;
|
self.layer.drawsAsynchronously = YES;
|
||||||
self.layer.opaque = YES;
|
self.layer.opaque = YES;
|
||||||
|
|
||||||
if ([[PLProfiles resolveKeyForCurrentProfile:@"renderer"] hasPrefix:@"libOSMesaOverride"]) {
|
if ([[PLProfiles resolveKeyForCurrentProfile:@"renderer"] hasPrefix:@"libOSMesa"]) {
|
||||||
|
|
||||||
colorSpace = CGColorSpaceCreateDeviceRGB();
|
colorSpace = CGColorSpaceCreateDeviceRGB();
|
||||||
|
|
||||||
callbacks.version = 0;
|
|
||||||
callbacks.getBytePointer = _CGDataProviderGetBytePointerCallbackOSMESA;
|
|
||||||
callbacks.releaseBytePointer = _CGDataProviderReleaseBytePointerCallback;
|
|
||||||
callbacks.getBytesAtPosition = NULL;
|
|
||||||
callbacks.releaseInfo = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
|
|||||||
@@ -538,6 +538,10 @@ void CallbackBridge_nativeSendMouseButton(int button, int action, int mods) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CallbackBridge_nativeSendScreenSize(int width, int height) {
|
void CallbackBridge_nativeSendScreenSize(int width, int height) {
|
||||||
|
if (gbuffer) {
|
||||||
|
gbuffer = realloc(gbuffer, 4*width*height + 1);
|
||||||
|
}
|
||||||
|
|
||||||
windowWidth = width;
|
windowWidth = width;
|
||||||
windowHeight = height;
|
windowHeight = height;
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#define RENDERER_NAME_GL4ES "libgl4es_114.dylib"
|
#define RENDERER_NAME_GL4ES "libgl4es_114.dylib"
|
||||||
#define RENDERER_NAME_MTL_ANGLE "libtinygl4angle.dylib"
|
#define RENDERER_NAME_MTL_ANGLE "libtinygl4angle.dylib"
|
||||||
#define RENDERER_NAME_VK_ZINK "libOSMesaOverride.dylib"
|
#define RENDERER_NAME_VK_ZINK "libOSMesa.8.dylib"
|
||||||
|
|
||||||
#define SPECIALBTN_KEYBOARD -1
|
#define SPECIALBTN_KEYBOARD -1
|
||||||
#define SPECIALBTN_TOGGLECTRL -2
|
#define SPECIALBTN_TOGGLECTRL -2
|
||||||
|
|||||||
Reference in new issue
Block a user