diff --git a/gfx/common/metal/MenuDisplay.m b/gfx/common/metal/MenuDisplay.m index bb69b314a8..c340744cfa 100644 --- a/gfx/common/metal/MenuDisplay.m +++ b/gfx/common/metal/MenuDisplay.m @@ -5,7 +5,7 @@ #import "Context.h" #import "MenuDisplay.h" #import "ShaderTypes.h" -#import "menu_driver.h" +//#import "menu_driver.h" #import /* TODO(sgc): this dependency is incorrect */ #import "../metal_common.h" diff --git a/gfx/common/metal/View.m b/gfx/common/metal/View.m index 475983bc86..7c6bfd9f10 100644 --- a/gfx/common/metal/View.m +++ b/gfx/common/metal/View.m @@ -23,9 +23,14 @@ - (NSString *)debugDescription { +#if defined(HAVE_COCOATOUCH) + NSString *sizeDesc = [NSString stringWithFormat:@"width: %f, height: %f",_size.width,_size.height]; +#else + NSString *sizeDesc = NSStringFromSize(_size); +#endif return [NSString stringWithFormat:@"( format = %@, frame = %@ )", NSStringFromRPixelFormat(_format), - NSStringFromSize(_size)]; + sizeDesc]; } @end diff --git a/gfx/common/metal_common.m b/gfx/common/metal_common.m index 892f3b7487..3240df3dd3 100644 --- a/gfx/common/metal_common.m +++ b/gfx/common/metal_common.m @@ -27,7 +27,8 @@ #import "metal_common.h" #import "../../ui/drivers/cocoa/cocoa_common.h" -#import "Context.h" +//#import "Context.h" +#include "metal/Context.h" #ifdef HAVE_MENU #import "../../menu/menu_driver.h" @@ -50,9 +51,11 @@ @implementation MetalView +#if !defined(HAVE_COCOATOUCH) - (void)keyDown:(NSEvent*)theEvent { } +#endif /* Stop the annoying sound when pressing a key. */ - (BOOL)acceptsFirstResponder @@ -690,7 +693,11 @@ typedef struct MTLALIGN(16) switch (i) { case RARCH_WRAP_BORDER: +#if defined(HAVE_COCOATOUCH) + sd.sAddressMode = MTLSamplerAddressModeClampToZero; +#else sd.sAddressMode = MTLSamplerAddressModeClampToBorderColor; +#endif break; case RARCH_WRAP_EDGE: @@ -1010,7 +1017,9 @@ typedef struct MTLALIGN(16) if (buffer_sem->stage_mask & SLANG_STAGE_FRAGMENT_MASK) [rce setFragmentBuffer:buffer offset:0 atIndex:buffer_sem->binding]; +#if !defined(HAVE_COCOATOUCH) [buffer didModifyRange:NSMakeRange(0, buffer.length)]; +#endif } } @@ -1343,7 +1352,11 @@ typedef struct MTLALIGN(16) if (size == 0) continue; +#if defined(HAVE_COCOATOUCH) + id buf = [_context.device newBufferWithLength:size options:MTLResourceStorageModeShared]; +#else id buf = [_context.device newBufferWithLength:size options:MTLResourceStorageModeManaged]; +#endif STRUCT_ASSIGN(_engine.pass[i].buffers[j], buf); } } @finally @@ -1459,7 +1472,11 @@ typedef struct MTLALIGN(16) NSUInteger needed = sizeof(SpriteVertex) * count * 4; if (!_vert || _vert.length < needed) { +#if defined(HAVE_COCOATOUCH) + _vert = [_context.device newBufferWithLength:needed options:MTLResourceStorageModeShared]; +#else _vert = [_context.device newBufferWithLength:needed options:MTLResourceStorageModeManaged]; +#endif } for (NSUInteger i = 0; i < count; i++) @@ -1477,11 +1494,13 @@ typedef struct MTLALIGN(16) - (void)drawWithEncoder:(id)rce { +#if !defined(HAVE_COCOATOUCH) if (_vertDirty) { [_vert didModifyRange:NSMakeRange(0, _vert.length)]; _vertDirty = NO; } +#endif NSUInteger count = _images.count; for (NSUInteger i = 0; i < count; ++i) diff --git a/gfx/drivers_context/cocoa_gl_ctx.m b/gfx/drivers_context/cocoa_gl_ctx.m index 59e6b8fceb..cd81639c09 100644 --- a/gfx/drivers_context/cocoa_gl_ctx.m +++ b/gfx/drivers_context/cocoa_gl_ctx.m @@ -23,7 +23,7 @@ #else #include #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) #include #include #include @@ -115,7 +115,7 @@ void nsview_set_ptr(CocoaView *p) g_instance = p; } -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) static NSOpenGLPixelFormat* g_format; void *glcontext_get_ptr(void) @@ -239,7 +239,7 @@ float get_backing_scale_factor(void) return backing_scale_def; backing_scale_def = 1.0f; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) screen = (BRIDGE RAScreen*)get_chosen_screen(); if (screen) @@ -268,7 +268,7 @@ void cocoagl_gfx_ctx_update(void) { case GFX_CTX_OPENGL_API: #if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_OPENGL_CORE) -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) #if MAC_OS_X_VERSION_10_7 CGLUpdateContext(g_hw_ctx.CGLContextObj); CGLUpdateContext(g_context.CGLContextObj); @@ -298,7 +298,7 @@ static void cocoagl_gfx_ctx_destroy(void *data) #if defined(HAVE_OPENGL) || defined(HAVE_OPENGLES) || defined(HAVE_OPENGL_CORE) [GLContextClass clearCurrentContext]; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) [g_context clearDrawable]; RELEASE(g_context); RELEASE(g_format); @@ -339,7 +339,7 @@ static void cocoagl_gfx_ctx_show_mouse(void *data, bool state) { (void)data; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) if (state) [NSCursor unhide]; else @@ -368,7 +368,7 @@ float cocoagl_gfx_ctx_get_native_scale(void) return ret; } -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) static void cocoagl_gfx_ctx_update_title(void *data) { const ui_window_t *window = ui_companion_driver_get_window_ptr(); @@ -391,7 +391,7 @@ static bool cocoagl_gfx_ctx_get_metrics(void *data, enum display_metric_types ty float *value) { RAScreen *screen = (BRIDGE RAScreen*)get_chosen_screen(); -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) NSDictionary *description = [screen deviceDescription]; NSSize display_pixel_size = [[description objectForKey:NSDeviceSize] sizeValue]; CGSize display_physical_size = CGDisplayScreenSize( @@ -481,7 +481,7 @@ static void cocoagl_gfx_ctx_input_driver(void *data, static void cocoagl_gfx_ctx_get_video_size(void *data, unsigned* width, unsigned* height) { float screenscale = cocoagl_gfx_ctx_get_native_scale(); -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) CGRect size, cgrect; GLsizei backingPixelWidth, backingPixelHeight; #if defined(HAVE_COCOA_METAL) @@ -629,7 +629,7 @@ static void cocoagl_gfx_ctx_swap_buffers(void *data) if (!(--g_fast_forward_skips < 0)) return; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) [g_context flushBuffer]; [g_hw_ctx flushBuffer]; #elif defined(HAVE_COCOATOUCH) @@ -691,12 +691,12 @@ static void *cocoagl_gfx_ctx_get_context_data(void *data) static bool cocoagl_gfx_ctx_set_video_mode(void *data, unsigned width, unsigned height, bool fullscreen) { -#if defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && defined(HAVE_COCOA_METAL) NSView *g_view = apple_platform.renderView; #elif defined(HAVE_COCOA) CocoaView *g_view = (CocoaView*)nsview_get_ptr(); #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) cocoa_ctx_data_t *cocoa_ctx = (cocoa_ctx_data_t*)data; cocoa_ctx->width = width; cocoa_ctx->height = height; @@ -707,7 +707,7 @@ static bool cocoagl_gfx_ctx_set_video_mode(void *data, case GFX_CTX_OPENGL_API: case GFX_CTX_OPENGL_ES_API: { -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) if ([g_view respondsToSelector: @selector(setWantsBestResolutionOpenGLSurface:)]) [g_view setWantsBestResolutionOpenGLSurface:YES]; @@ -783,7 +783,7 @@ static bool cocoagl_gfx_ctx_set_video_mode(void *data, break; } -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) static bool has_went_fullscreen = false; /* TODO: Screen mode support. */ @@ -913,7 +913,7 @@ const gfx_ctx_driver_t gfx_ctx_cocoagl = { NULL, /* get_video_output_next */ cocoagl_gfx_ctx_get_metrics, NULL, /* translate_aspect */ -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) cocoagl_gfx_ctx_update_title, #else NULL, /* update_title */ diff --git a/gfx/drivers_font/metal_raster_font.m b/gfx/drivers_font/metal_raster_font.m index 724d8d4fff..6f85873981 100644 --- a/gfx/drivers_font/metal_raster_font.m +++ b/gfx/drivers_font/metal_raster_font.m @@ -79,18 +79,32 @@ { _buffer = [_context.device newBufferWithBytes:_atlas->buffer length:(NSUInteger)(_stride * _atlas->height) - options:MTLResourceStorageModeManaged]; + options: +#if defined(HAVE_COCOATOUCH) + MTLResourceStorageModeShared +#else + MTLResourceStorageModeManaged +#endif + ]; // Even though newBufferWithBytes will copy the initial contents // from our atlas, it doesn't seem to invalidate the buffer when // doing so, causing corrupted text rendering if we hit this code // path. To work around it we manually invalidate the buffer. +#if !defined(HAVE_COCOATOUCH) [_buffer didModifyRange:NSMakeRange(0, _buffer.length)]; +#endif } else { _buffer = [_context.device newBufferWithLength:(NSUInteger)(_stride * _atlas->height) - options:MTLResourceStorageModeManaged]; + options: +#if defined(HAVE_COCOATOUCH) + MTLResourceStorageModeShared +#else + MTLResourceStorageModeManaged +#endif + ]; void *dst = _buffer.contents; void *src = _atlas->buffer; for (unsigned i = 0; i < _atlas->height; i++) @@ -99,7 +113,9 @@ dst += _stride; src += _atlas->width; } - [_buffer didModifyRange:NSMakeRange(0, _buffer.length)]; +#if !defined(HAVE_COCOATOUCH) + [_buffer didModifyRange:NSMakeRange(0, _buffer.length)]; +#endif } MTLTextureDescriptor *td = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR8Unorm @@ -111,7 +127,13 @@ _capacity = 12000; _vert = [_context.device newBufferWithLength:sizeof(SpriteVertex) * - _capacity options:MTLResourceStorageModeManaged]; + _capacity options: +#if defined(HAVE_COCOATOUCH) + MTLResourceStorageModeShared +#else + MTLResourceStorageModeManaged +#endif + ]; if (![self _initializeState]) { return nil; @@ -181,7 +203,9 @@ NSUInteger offset = glyph->atlas_offset_y; NSUInteger len = glyph->height * _stride; +#if !defined(HAVE_COCOATOUCH) [_buffer didModifyRange:NSMakeRange(offset, len)]; +#endif _atlas->dirty = false; } @@ -324,7 +348,9 @@ static INLINE void write_quad6(SpriteVertex *pv, - (void)_flush { NSUInteger start = _offset * sizeof(SpriteVertex); +#if !defined(HAVE_COCOATOUCH) [_vert didModifyRange:NSMakeRange(start, sizeof(SpriteVertex) * _vertices)]; +#endif id rce = _context.rce; [rce pushDebugGroup:@"render fonts"]; diff --git a/gfx/gfx_display.c b/gfx/gfx_display.c index 143f6560e6..8cca39e36c 100644 --- a/gfx/gfx_display.c +++ b/gfx/gfx_display.c @@ -304,7 +304,7 @@ float gfx_display_get_dpi_scale_internal(unsigned width, unsigned height) * unfortunate, and needs to be fixed at the gfx context driver * level. Until this is done, all we can do is fallback to using * the old legacy 'magic number' scaling on Mac platforms. */ -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) if (true) { scale = (diagonal_pixels / 6.5f) / 212.0f; diff --git a/griffin/griffin_objc.m b/griffin/griffin_objc.m index a30e582489..97c61d82cb 100644 --- a/griffin/griffin_objc.m +++ b/griffin/griffin_objc.m @@ -41,7 +41,7 @@ #else -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) #include "../ui/drivers/cocoa/ui_cocoa_window.m" #include "../ui/drivers/cocoa/ui_cocoa_browser_window.m" #include "../ui/drivers/cocoa/ui_cocoa_application.m" diff --git a/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj b/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj index 49ccf0538e..5918ae3249 100644 --- a/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj +++ b/pkg/apple/RetroArch_iOS11.xcodeproj/project.pbxproj @@ -26,6 +26,12 @@ 9204BE201D319EF300BD49DB /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AFAE3116C1D4EA009DE44C /* OpenGLES.framework */; }; 9204BE231D319EF300BD49DB /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 967894611788EBD800D6CA69 /* InfoPlist.strings */; }; 9204BE261D319EF300BD49DB /* iOS/modules in Resources */ = {isa = PBXBuildFile; fileRef = 83EB675F19EEAF050096F441 /* iOS/modules */; }; + 9210C2F224B3A19100E6FE7C /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9210C2F024B3A19100E6FE7C /* MetalKit.framework */; }; + 9210C2F324B3A19100E6FE7C /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9210C2F124B3A19100E6FE7C /* Metal.framework */; }; + 9210C2F624B3A32D00E6FE7C /* griffin_cpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9210C2F424B3A32D00E6FE7C /* griffin_cpp.cpp */; }; + 9210C2F724B3A32D00E6FE7C /* griffin_cpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9210C2F424B3A32D00E6FE7C /* griffin_cpp.cpp */; }; + 9210C2F824B3A32D00E6FE7C /* griffin_glslang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9210C2F524B3A32D00E6FE7C /* griffin_glslang.cpp */; }; + 9210C2F924B3A32D00E6FE7C /* griffin_glslang.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9210C2F524B3A32D00E6FE7C /* griffin_glslang.cpp */; }; 9222F1FF2314BA7C0097C0FD /* assets.zip in Resources */ = {isa = PBXBuildFile; fileRef = 9222F1FE2314BA7C0097C0FD /* assets.zip */; }; 9222F2002314BA7C0097C0FD /* assets.zip in Resources */ = {isa = PBXBuildFile; fileRef = 9222F1FE2314BA7C0097C0FD /* assets.zip */; }; 9222F2092315DAD50097C0FD /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9222F2082315DAD50097C0FD /* Launch Screen.storyboard */; }; @@ -85,7 +91,11 @@ 696012F119F3389A006A1088 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; 69D31DE31A547EC800EF4C92 /* iOS/Resources/Media.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = iOS/Resources/Media.xcassets; sourceTree = SOURCE_ROOT; }; 83EB675F19EEAF050096F441 /* iOS/modules */ = {isa = PBXFileReference; lastKnownFileType = folder; path = iOS/modules; sourceTree = SOURCE_ROOT; }; - 9204BE2B1D319EF300BD49DB /* RetroArch.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RetroArch.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9204BE2B1D319EF300BD49DB /* RADEBUG.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RADEBUG.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9210C2F024B3A19100E6FE7C /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; + 9210C2F124B3A19100E6FE7C /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; + 9210C2F424B3A32D00E6FE7C /* griffin_cpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_cpp.cpp; path = ../../griffin/griffin_cpp.cpp; sourceTree = ""; }; + 9210C2F524B3A32D00E6FE7C /* griffin_glslang.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_glslang.cpp; path = ../../griffin/griffin_glslang.cpp; sourceTree = ""; }; 9222F1FE2314BA7C0097C0FD /* assets.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = assets.zip; sourceTree = ""; }; 9222F2082315DAD50097C0FD /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = ""; }; 9222F20A2315DD3D0097C0FD /* retroarch_logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = retroarch_logo.png; sourceTree = ""; }; @@ -153,6 +163,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9210C2F224B3A19100E6FE7C /* MetalKit.framework in Frameworks */, + 9210C2F324B3A19100E6FE7C /* Metal.framework in Frameworks */, 92CC05C721FEDD0B00FF79F0 /* MobileCoreServices.framework in Frameworks */, 92CC05C521FEDC9F00FF79F0 /* CFNetwork.framework in Frameworks */, 9204BE121D319EF300BD49DB /* libz.dylib in Frameworks */, @@ -343,7 +355,7 @@ 96AFAE2616C1D4EA009DE44C /* Products */ = { isa = PBXGroup; children = ( - 9204BE2B1D319EF300BD49DB /* RetroArch.app */, + 9204BE2B1D319EF300BD49DB /* RADEBUG.app */, 926C77D721FD1E6500103EDE /* RetroArchTV.app */, ); name = Products; @@ -352,6 +364,8 @@ 96AFAE2816C1D4EA009DE44C /* Frameworks */ = { isa = PBXGroup; children = ( + 9210C2F124B3A19100E6FE7C /* Metal.framework */, + 9210C2F024B3A19100E6FE7C /* MetalKit.framework */, 92CC05C621FEDD0B00FF79F0 /* MobileCoreServices.framework */, 92CC05C421FEDC9F00FF79F0 /* CFNetwork.framework */, 926C77F021FD26E800103EDE /* GameController.framework */, @@ -398,6 +412,8 @@ children = ( 50521A431AA23BF500185CC9 /* griffin_objc.m */, 501232C9192E5FC40063A359 /* griffin.c */, + 9210C2F424B3A32D00E6FE7C /* griffin_cpp.cpp */, + 9210C2F524B3A32D00E6FE7C /* griffin_glslang.cpp */, ); name = griffin; sourceTree = ""; @@ -420,7 +436,7 @@ ); name = RetroArchiOS11; productName = RetroArch; - productReference = 9204BE2B1D319EF300BD49DB /* RetroArch.app */; + productReference = 9204BE2B1D319EF300BD49DB /* RADEBUG.app */; productType = "com.apple.product-type.application"; }; 926C77D621FD1E6500103EDE /* RetroArchTV */ = { @@ -554,6 +570,7 @@ 92CC05B621FE3C1700FF79F0 /* GCDWebServerMultiPartFormRequest.m in Sources */, 92CC05AC21FE3C1700FF79F0 /* GCDWebServerErrorResponse.m in Sources */, 92CC05A621FE3C1700FF79F0 /* GCDWebServerFunctions.m in Sources */, + 9210C2F824B3A32D00E6FE7C /* griffin_glslang.cpp in Sources */, 92CC05A821FE3C1700FF79F0 /* GCDWebServer.m in Sources */, 9204BE0D1D319EF300BD49DB /* griffin_objc.m in Sources */, 9204BE101D319EF300BD49DB /* griffin.c in Sources */, @@ -562,6 +579,7 @@ 92CC05C221FE3C6D00FF79F0 /* WebServer.m in Sources */, 92CC05BA21FE3C1700FF79F0 /* GCDWebServerFileRequest.m in Sources */, 92CC05AE21FE3C1700FF79F0 /* GCDWebServerFileResponse.m in Sources */, + 9210C2F624B3A32D00E6FE7C /* griffin_cpp.cpp in Sources */, 92CC05B221FE3C1700FF79F0 /* GCDWebServerStreamedResponse.m in Sources */, 92CC05A221FE3C1700FF79F0 /* GCDWebServerResponse.m in Sources */, ); @@ -578,6 +596,7 @@ 92CC05B721FE3C1700FF79F0 /* GCDWebServerMultiPartFormRequest.m in Sources */, 92CC05AD21FE3C1700FF79F0 /* GCDWebServerErrorResponse.m in Sources */, 92CC05A721FE3C1700FF79F0 /* GCDWebServerFunctions.m in Sources */, + 9210C2F924B3A32D00E6FE7C /* griffin_glslang.cpp in Sources */, 92CC05A921FE3C1700FF79F0 /* GCDWebServer.m in Sources */, 926C77EA21FD20C100103EDE /* griffin_objc.m in Sources */, 926C77EB21FD20C400103EDE /* griffin.c in Sources */, @@ -586,6 +605,7 @@ 92CC05C321FE3C6D00FF79F0 /* WebServer.m in Sources */, 92CC05BB21FE3C1700FF79F0 /* GCDWebServerFileRequest.m in Sources */, 92CC05AF21FE3C1700FF79F0 /* GCDWebServerFileResponse.m in Sources */, + 9210C2F724B3A32D00E6FE7C /* griffin_cpp.cpp in Sources */, 92CC05B321FE3C1700FF79F0 /* GCDWebServerStreamedResponse.m in Sources */, 92CC05A321FE3C1700FF79F0 /* GCDWebServerResponse.m in Sources */, ); @@ -610,11 +630,13 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LIBRARY = "libstdc++"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; - CURRENT_PROJECT_VERSION = 1.8.5; + CURRENT_PROJECT_VERSION = 1.8.9; + DEPS_DIR = "$(SRCBASE)/deps"; DEVELOPMENT_TEAM = R72X3BF4KE; ENABLE_BITCODE = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; @@ -626,12 +648,18 @@ ../../deps/stb, ../../deps/rcheevos/include, ../../deps, + "$(DEPS_DIR)/glslang", + "$(DEPS_DIR)/SPIRV-Cross", + "$(DEPS_DIR)/glslang/glslang/glslang/Public", + "$(DEPS_DIR)/glslang/glslang/glslang/OSDependent/Unix", + "$(DEPS_DIR)/glslang/glslang/SPIRV", + "$(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent", ); INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_NO_PIE = YES; LIBRARY_SEARCH_PATHS = ""; - MARKETING_VERSION = 1.8.5; + MARKETING_VERSION = 1.8.9; ONLY_ACTIVE_ARCH = NO; OTHER_CFLAGS = ( "-DDONT_WANT_ARM_OPTIMIZATIONS", @@ -690,10 +718,20 @@ "-DHAVE_MFI", "-DHAVE_BTSTACK", "-DHAVE_KEYMAPPER", + "-DHAVE_COCOA_METAL", + "-DHAVE_METAL", + "-DHAVE_SLANG", + "-DHAVE_SPIRV_CROSS", + "-DHAVE_GLSLANG", + "-DWANT_GLSLANG", + "-DGLSLANG_OSINCLUDE_UNIX", + "-DENABLE_HLSL", + "-DHAVE_BUILTINGLSLANG", ); - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.ios.RetroArch; - PRODUCT_NAME = RetroArch; + PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchDBUG; + PRODUCT_NAME = RADEBUG; PROVISIONING_PROFILE = ""; + SRCBASE = "$(SRCROOT)/../.."; VALID_ARCHS = "armv7 arm64"; WARNING_CFLAGS = "-Wno-invalid-source-encoding"; WRAPPER_EXTENSION = app; @@ -705,11 +743,13 @@ buildSettings = { ARCHS = "$(ARCHS_STANDARD)"; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_CXX_LIBRARY = "libstdc++"; + CLANG_CXX_LANGUAGE_STANDARD = "c++0x"; + CLANG_CXX_LIBRARY = "libc++"; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_RESOURCE_RULES_PATH = "$(SDKROOT)/ResourceRules.plist"; - CURRENT_PROJECT_VERSION = 1.8.5; + CURRENT_PROJECT_VERSION = 1.8.9; + DEPS_DIR = "$(SRCBASE)/deps"; DEVELOPMENT_TEAM = R72X3BF4KE; ENABLE_BITCODE = NO; GCC_PRECOMPILE_PREFIX_HEADER = NO; @@ -721,12 +761,18 @@ ../../deps/stb, ../../deps/rcheevos/include, ../../deps, + "$(DEPS_DIR)/glslang", + "$(DEPS_DIR)/SPIRV-Cross", + "$(DEPS_DIR)/glslang/glslang/glslang/Public", + "$(DEPS_DIR)/glslang/glslang/glslang/OSDependent/Unix", + "$(DEPS_DIR)/glslang/glslang/SPIRV", + "$(DEPS_DIR)/glslang/glslang/glslang/MachineIndependent", ); INFOPLIST_FILE = "$(SRCROOT)/iOS/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_NO_PIE = YES; LIBRARY_SEARCH_PATHS = ""; - MARKETING_VERSION = 1.8.5; + MARKETING_VERSION = 1.8.9; "OTHER_CFLAGS[arch=*]" = ( "-DNS_BLOCK_ASSERTIONS=1", "-DNDEBUG", @@ -788,9 +834,10 @@ "-DHAVE_BTSTACK", "-DHAVE_KEYMAPPER", ); - PRODUCT_BUNDLE_IDENTIFIER = com.libretro.dist.ios.RetroArch; - PRODUCT_NAME = RetroArch; + PRODUCT_BUNDLE_IDENTIFIER = com.libretro.RetroArchDBUG; + PRODUCT_NAME = RADEBUG; PROVISIONING_PROFILE = ""; + SRCBASE = "$(SRCROOT)/../.."; VALID_ARCHS = "armv7 arm64"; WARNING_CFLAGS = "-Wno-invalid-source-encoding"; WRAPPER_EXTENSION = app; @@ -828,7 +875,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.8.5; + CURRENT_PROJECT_VERSION = 1.8.9; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = R72X3BF4KE; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -850,7 +897,7 @@ ); INFOPLIST_FILE = "$(SRCROOT)/tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.8.5; + MARKETING_VERSION = 1.8.9; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -950,7 +997,7 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1.8.5; + CURRENT_PROJECT_VERSION = 1.8.9; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = R72X3BF4KE; ENABLE_NS_ASSERTIONS = NO; @@ -972,7 +1019,7 @@ ); INFOPLIST_FILE = "$(SRCROOT)/tvOS/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - MARKETING_VERSION = 1.8.5; + MARKETING_VERSION = 1.8.9; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; OTHER_CFLAGS = ( diff --git a/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Debug.xcscheme b/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Debug.xcscheme index 63abbb2ea4..ee9e3b4bee 100644 --- a/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Debug.xcscheme +++ b/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Debug.xcscheme @@ -15,7 +15,7 @@ @@ -27,19 +27,17 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - diff --git a/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Release.xcscheme b/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Release.xcscheme index 54573fab59..b970cdcaef 100644 --- a/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Release.xcscheme +++ b/pkg/apple/RetroArch_iOS11.xcodeproj/xcshareddata/xcschemes/RetroArch iOS Release.xcscheme @@ -15,7 +15,7 @@ @@ -27,19 +27,17 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - - - - + + - - diff --git a/retroarch.c b/retroarch.c index c8ed7369e8..fc216d8713 100644 --- a/retroarch.c +++ b/retroarch.c @@ -920,7 +920,7 @@ static const ui_companion_driver_t *ui_companion_drivers[] = { #if defined(_WIN32) && !defined(_XBOX) && !defined(__WINRT__) &ui_companion_win32, #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) &ui_companion_cocoa, #endif #ifdef HAVE_COCOATOUCH diff --git a/ui/drivers/cocoa/apple_platform.h b/ui/drivers/cocoa/apple_platform.h index 0bdc062051..c6f062cb2c 100644 --- a/ui/drivers/cocoa/apple_platform.h +++ b/ui/drivers/cocoa/apple_platform.h @@ -5,6 +5,7 @@ #import #import +#if !defined(HAVE_COCOATOUCH) @interface WindowListener : NSResponder @end @@ -22,6 +23,7 @@ } @end +#endif @protocol ApplePlatform @@ -48,6 +50,36 @@ extern id apple_platform; id apple_platform; + +#if defined(HAVE_COCOATOUCH) +#if defined(HAVE_COCOA_METAL) +@interface RetroArch_iOS : UINavigationController { + UIView *_renderView; + apple_view_type_t _vt; +} +#else +@interface RetroArch_iOS : UINavigationController +#endif + +@property (nonatomic) UIWindow* window; +@property (nonatomic) NSString* documentsDirectory; +@property (nonatomic) RAMenuBase* mainmenu; +@property (nonatomic) int menu_count; + ++ (RetroArch_iOS*)get; + +- (void)showGameView; +- (void)toggleUI; +- (void)supportOtherAudioSessions; + +- (void)refreshSystemConfig; +- (void)mainMenuPushPop: (bool)pushp; +- (void)mainMenuRefresh; +@end + +#else @interface RetroArch_OSX : NSObject { NSWindow *_window; apple_view_type_t _vt; @@ -55,6 +87,8 @@ id apple_platform; id _sleepActivity; WindowListener *_listener; } +#endif + #elif defined(HAVE_COCOA) id apple_platform; #if (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__))) @@ -67,7 +101,7 @@ id apple_platform; } #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) @property(nonatomic, retain) NSWindow IBOutlet *window; @end diff --git a/ui/drivers/cocoa/cocoa_common.h b/ui/drivers/cocoa/cocoa_common.h index b785221c6a..2b8282109d 100644 --- a/ui/drivers/cocoa/cocoa_common.h +++ b/ui/drivers/cocoa/cocoa_common.h @@ -81,25 +81,6 @@ typedef enum apple_view_type { + (CocoaView*)get; @end -@interface RetroArch_iOS : UINavigationController - -@property (nonatomic) UIWindow* window; -@property (nonatomic) NSString* documentsDirectory; -@property (nonatomic) RAMenuBase* mainmenu; -@property (nonatomic) int menu_count; - -+ (RetroArch_iOS*)get; - -- (void)showGameView; -- (void)toggleUI; -- (void)supportOtherAudioSessions; - -- (void)refreshSystemConfig; -- (void)mainMenuPushPop: (bool)pushp; -- (void)mainMenuRefresh; -@end - void get_ios_version(int *major, int *minor); #endif @@ -112,7 +93,7 @@ typedef struct } apple_frontend_settings_t; extern apple_frontend_settings_t apple_frontend_settings; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) #include @interface CocoaView : NSView diff --git a/ui/drivers/cocoa/cocoa_common.m b/ui/drivers/cocoa/cocoa_common.m index 848eae740d..bc946d28b4 100644 --- a/ui/drivers/cocoa/cocoa_common.m +++ b/ui/drivers/cocoa/cocoa_common.m @@ -46,13 +46,13 @@ void *glkitview_init(void); @implementation CocoaView -#if defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && defined(HAVE_COCOA_METAL) - (BOOL)layer:(CALayer *)layer shouldInheritContentsScale:(CGFloat)newScale fromWindow:(NSWindow *)window { return YES; } #endif -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) - (void)scrollWheel:(NSEvent *)theEvent { cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data(); (void)apple; @@ -74,7 +74,7 @@ void *glkitview_init(void); { self = [super init]; -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) [self setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; #endif @@ -83,7 +83,7 @@ void *glkitview_init(void); cocoa_view.data = (CocoaView*)self; [self registerForDraggedTypes:[NSArray arrayWithObjects:NSColorPboardType, NSFilenamesPboardType, nil]]; -#elif defined(HAVE_COCOA_METAL) +#elif !defined(HAVE_COCOATOUCH) && defined(HAVE_COCOA_METAL) [self registerForDraggedTypes:@[NSColorPboardType, NSFilenamesPboardType]]; #elif defined(HAVE_COCOATOUCH) self.view = (BRIDGE GLKView*)glkitview_init(); @@ -108,7 +108,7 @@ void *glkitview_init(void); return self; } -#if defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL) +#if !defined(HAVE_COCOATOUCH) && (defined(HAVE_COCOA) || defined(HAVE_COCOA_METAL)) - (void)setFrame:(NSRect)frameRect { [super setFrame:frameRect]; @@ -169,7 +169,7 @@ void *glkitview_init(void); #elif TARGET_OS_IOS -(void) showNativeMenu { dispatch_async(dispatch_get_main_queue(), ^{ - [[RetroArch_iOS get] toggleUI]; +// [[RetroArch_iOS get] toggleUI]; }); } diff --git a/ui/drivers/ui_cocoatouch.m b/ui/drivers/ui_cocoatouch.m index 8a9cad2eb1..58d2ba0c39 100644 --- a/ui/drivers/ui_cocoatouch.m +++ b/ui/drivers/ui_cocoatouch.m @@ -26,6 +26,7 @@ #include #include "cocoa/cocoa_common.h" +#include "cocoa/apple_platform.h" #include "../ui_companion_driver.h" #include "../../configuration.h" #include "../../frontend/frontend.h" @@ -317,6 +318,66 @@ enum @implementation RetroArch_iOS +#pragma mark - ApplePlatform + +#ifdef HAVE_COCOA_METAL +-(id)renderView { + return _renderView; +} +-(bool)hasFocus { + return YES; +} +- (void)setViewType:(apple_view_type_t)vt { + if (vt == _vt) + return; + + RARCH_LOG("[Cocoa]: change view type: %d ? %d\n", _vt, vt); + + _vt = vt; + if (_renderView != nil) + { +// _renderView.wantsLayer = NO; +// _renderView.layer = nil; + [_renderView removeFromSuperview]; +// self.window.contentView = nil; + _renderView = nil; + } + + switch (vt) { + case APPLE_VIEW_TYPE_VULKAN: + case APPLE_VIEW_TYPE_METAL: + { + MetalView *v = [MetalView new]; + v.paused = YES; + v.enableSetNeedsDisplay = NO; + _renderView = v; + } + break; + + case APPLE_VIEW_TYPE_OPENGL: + { + _renderView = [CocoaView get]; + break; + } + + case APPLE_VIEW_TYPE_NONE: + default: + return; + } + +// _renderView.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; + [_renderView setFrame:self.window.bounds]; + + [self.window addSubview:_renderView]; +// self.window.contentView.nextResponder = _listener; +} + +- (apple_view_type_t)viewType { + return _vt; +} + +#endif + + (RetroArch_iOS*)get { return (RetroArch_iOS*)[[UIApplication sharedApplication] delegate];