From 48fea0cee4efd167b9b446afcf4f0d06413cee12 Mon Sep 17 00:00:00 2001 From: Alex Szpakowski Date: Sun, 31 Dec 2017 15:21:25 -0400 Subject: [PATCH] macOS: Fix MoltenVK Metal view resizing, and allow the metal view to be used without vulkan. --- include/SDL_config_macosx.h | 7 ++++++- src/video/cocoa/SDL_cocoametalview.h | 10 +++++----- src/video/cocoa/SDL_cocoametalview.m | 13 +++++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/include/SDL_config_macosx.h b/include/SDL_config_macosx.h index 2257c3c6c8557..bb8bb5b201077 100644 --- a/include/SDL_config_macosx.h +++ b/include/SDL_config_macosx.h @@ -184,7 +184,12 @@ #endif #ifndef SDL_VIDEO_RENDER_METAL +/* Metal only supported on 64-bit architectures with 10.11+ */ +#if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) #define SDL_VIDEO_RENDER_METAL 1 +#else +#define SDL_VIDEO_RENDER_METAL 0 +#endif #endif /* Enable OpenGL support */ @@ -209,7 +214,7 @@ #if TARGET_CPU_X86_64 && (MAC_OS_X_VERSION_MAX_ALLOWED >= 101100) #define SDL_VIDEO_VULKAN 1 #else -#define SDL_VIDEO_VULKAN 0 +#define SDL_VIDEO_VULKAN 0 #endif /* Enable system power support */ diff --git a/src/video/cocoa/SDL_cocoametalview.h b/src/video/cocoa/SDL_cocoametalview.h index 745dea3513c27..8550ebe1c174a 100644 --- a/src/video/cocoa/SDL_cocoametalview.h +++ b/src/video/cocoa/SDL_cocoametalview.h @@ -32,11 +32,11 @@ #import "../SDL_sysvideo.h" #import "SDL_cocoawindow.h" -#if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA +#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) -#include -#include -#include +#import +#import +#import #define METALVIEW_TAG 255 @@ -57,7 +57,7 @@ SDL_cocoametalview* Cocoa_Mtl_AddMetalView(SDL_Window* window); void Cocoa_Mtl_GetDrawableSize(SDL_Window * window, int * w, int * h); -#endif /* SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA */ +#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) */ #endif /* SDL_cocoametalview_h_ */ diff --git a/src/video/cocoa/SDL_cocoametalview.m b/src/video/cocoa/SDL_cocoametalview.m index 562eecca84a59..8078803d6884a 100644 --- a/src/video/cocoa/SDL_cocoametalview.m +++ b/src/video/cocoa/SDL_cocoametalview.m @@ -28,7 +28,7 @@ #import "SDL_cocoametalview.h" -#if SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA +#if SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) #include "SDL_assert.h" @@ -44,7 +44,7 @@ + (Class)layerClass } /* Indicate the view wants to draw using a backing layer instead of drawRect. */ --(BOOL) wantsUpdateLayer +- (BOOL)wantsUpdateLayer { return YES; } @@ -52,7 +52,7 @@ -(BOOL) wantsUpdateLayer /* When the wantsLayer property is set to YES, this method will be invoked to * return a layer instance. */ --(CALayer*) makeBackingLayer +- (CALayer*)makeBackingLayer { return [self.class.layerClass layer]; } @@ -74,8 +74,9 @@ - (instancetype)initWithFrame:(NSRect)frame } /* Set the size of the metal drawables when the view is resized. */ -- (void)resizeSubviewsWithOldSize:(NSSize)oldSize { - [super resizeSubviewsWithOldSize:oldSize]; +- (void)resizeWithOldSuperviewSize:(NSSize)oldSize +{ + [super resizeWithOldSuperviewSize:oldSize]; [self updateDrawableSize]; } @@ -123,6 +124,6 @@ - (void)updateDrawableSize } } -#endif /* SDL_VIDEO_VULKAN && SDL_VIDEO_DRIVER_COCOA */ +#endif /* SDL_VIDEO_DRIVER_COCOA && (SDL_VIDEO_VULKAN || SDL_VIDEO_RENDER_METAL) */ /* vi: set ts=4 sw=4 expandtab: */