diff options
author | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-09-27 14:44:43 +0300 |
---|---|---|
committer | Jaakko Keränen <jaakko.keranen@iki.fi> | 2020-09-27 14:44:55 +0300 |
commit | 25c5dccac8d31febaae263befafe6d50d8660342 (patch) | |
tree | 46e9c4a44162ce101a87f990300020c4183c7bd0 | |
parent | 8afa95b0183d041ff90ad2f49805540fe8bd8cba (diff) |
macOS: 10.13 should use OpenGL renderer
There appears to be a problem with SDL's Metal renderer under 10.13 (segfault on window creation).
-rw-r--r-- | src/macos.h | 2 | ||||
-rw-r--r-- | src/macos.m | 19 | ||||
-rw-r--r-- | src/ui/window.c | 2 |
3 files changed, 18 insertions, 5 deletions
diff --git a/src/macos.h b/src/macos.h index 07990090..700d50f8 100644 --- a/src/macos.h +++ b/src/macos.h | |||
@@ -26,6 +26,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ | |||
26 | 26 | ||
27 | /* Platform-specific functionality for macOS */ | 27 | /* Platform-specific functionality for macOS */ |
28 | 28 | ||
29 | iBool shouldDefaultToMetalRenderer_MacOS (void); | ||
30 | |||
29 | void setupApplication_MacOS (void); | 31 | void setupApplication_MacOS (void); |
30 | void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count); | 32 | void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count); |
31 | void handleCommand_MacOS (const char *cmd); | 33 | void handleCommand_MacOS (const char *cmd); |
diff --git a/src/macos.m b/src/macos.m index 975ba928..1d972ebd 100644 --- a/src/macos.m +++ b/src/macos.m | |||
@@ -38,14 +38,25 @@ enum iTouchBarVariant { | |||
38 | default_TouchBarVariant, | 38 | default_TouchBarVariant, |
39 | }; | 39 | }; |
40 | 40 | ||
41 | static iInt2 macVer_(void) { | ||
42 | if ([[NSProcessInfo processInfo] respondsToSelector:@selector(operatingSystemVersion)]) { | ||
43 | const NSOperatingSystemVersion ver = [[NSProcessInfo processInfo] operatingSystemVersion]; | ||
44 | return init_I2(ver.majorVersion, ver.minorVersion); | ||
45 | } | ||
46 | return init_I2(10, 10); | ||
47 | } | ||
48 | |||
41 | static NSString *currentSystemAppearance_(void) { | 49 | static NSString *currentSystemAppearance_(void) { |
42 | /* This API does not exist on 10.13. */ | 50 | /* This API does not exist on 10.13. */ |
43 | @try { | 51 | if ([NSApp respondsToSelector:@selector(effectiveAppearance)]) { |
44 | return [[NSApp effectiveAppearance] name]; | 52 | return [[NSApp effectiveAppearance] name]; |
45 | } | 53 | } |
46 | @catch (NSException *) { | 54 | return @"NSAppearanceNameAqua"; |
47 | return @"NSAppearanceNameAqua"; | 55 | } |
48 | } | 56 | |
57 | iBool shouldDefaultToMetalRenderer_MacOS(void) { | ||
58 | const iInt2 ver = macVer_(); | ||
59 | return ver.x > 10 || ver.y > 13; | ||
49 | } | 60 | } |
50 | 61 | ||
51 | /*----------------------------------------------------------------------------------------------*/ | 62 | /*----------------------------------------------------------------------------------------------*/ |
diff --git a/src/ui/window.c b/src/ui/window.c index b1fd3a07..97d56ec5 100644 --- a/src/ui/window.c +++ b/src/ui/window.c | |||
@@ -522,7 +522,7 @@ void init_Window(iWindow *d, iRect rect) { | |||
522 | d->isDrawFrozen = iTrue; | 522 | d->isDrawFrozen = iTrue; |
523 | uint32_t flags = 0; | 523 | uint32_t flags = 0; |
524 | #if defined (iPlatformApple) | 524 | #if defined (iPlatformApple) |
525 | SDL_SetHint(SDL_HINT_RENDER_DRIVER, "metal"); | 525 | SDL_SetHint(SDL_HINT_RENDER_DRIVER, shouldDefaultToMetalRenderer_MacOS() ? "metal" : "opengl"); |
526 | #else | 526 | #else |
527 | flags |= SDL_WINDOW_OPENGL; | 527 | flags |= SDL_WINDOW_OPENGL; |
528 | #endif | 528 | #endif |