Add support for iOS ( completely untested )

This commit is contained in:
李通洲 2020-01-20 14:43:08 +08:00
parent 7cd60549dd
commit a34d35d705
No known key found for this signature in database
GPG Key ID: 185E60A519A7E290
2 changed files with 27 additions and 0 deletions

View File

@ -1,10 +1,16 @@
#if defined(PPSSPP_PLATFORM_MAC)
#import <Cocoa/Cocoa.h>
#else
#import <UIKit/UIKit.h>
#endif
#import <QuartzCore/CAMetalLayer.h>
#include "base/logging.h"
#include "SDLCocoaMetalLayer.h"
void *makeWindowMetalCompatible(void *window) {
// https://github.com/KhronosGroup/MoltenVK/issues/78#issuecomment-371118536
#if defined(PPSSPP_PLATFORM_MAC)
NSView *view = ((NSWindow *)window).contentView;
assert([view isKindOfClass:[NSView class]]);
@ -13,4 +19,19 @@ void *makeWindowMetalCompatible(void *window) {
[view setLayer:[CAMetalLayer layer]];
}
return view.layer;
#else
UIView *view = (UIView *)window;
assert([view isKindOfClass:[UIView class]]);
CAMetalLayer *metalLayer = [CAMetalLayer new];
CGSize viewSize = view.frame.size;
metalLayer.frame = view.frame;
metalLayer.opaque = true;
metalLayer.framebufferOnly = true;
metalLayer.drawableSize = viewSize;
metalLayer.pixelFormat = (MTLPixelFormat)80;//BGRA8Unorm==80
[view.layer addSublayer:metalLayer];
return metalLayer;
#endif
}

View File

@ -75,9 +75,15 @@ bool SDLVulkanGraphicsContext::Init(SDL_Window *&window, int x, int y, int mode,
break;
#endif
#if defined(VK_USE_PLATFORM_METAL_EXT)
#if defined(PPSSPP_PLATFORM_MAC)
case SDL_SYSWM_COCOA:
vulkan_->InitSurface(WINDOWSYSTEM_METAL_EXT, makeWindowMetalCompatible(sys_info.info.cocoa.window), nullptr);
break;
#else
case SDL_SYSWM_UIKIT:
vulkan_->InitSurface(WINDOWSYSTEM_METAL_EXT, makeWindowMetalCompatible(sys_info.info.uikit.window), nullptr);
break;
#endif
#endif
default:
fprintf(stderr, "Vulkan subsystem %d not supported\n", sys_info.subsystem);