summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaakko Keränen <jaakko.keranen@iki.fi>2020-09-27 14:44:43 +0300
committerJaakko Keränen <jaakko.keranen@iki.fi>2020-09-27 14:44:55 +0300
commit25c5dccac8d31febaae263befafe6d50d8660342 (patch)
tree46e9c4a44162ce101a87f990300020c4183c7bd0
parent8afa95b0183d041ff90ad2f49805540fe8bd8cba (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.h2
-rw-r--r--src/macos.m19
-rw-r--r--src/ui/window.c2
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
29iBool shouldDefaultToMetalRenderer_MacOS (void);
30
29void setupApplication_MacOS (void); 31void setupApplication_MacOS (void);
30void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count); 32void insertMenuItems_MacOS (const char *menuLabel, int atIndex, const iMenuItem *items, size_t count);
31void handleCommand_MacOS (const char *cmd); 33void 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
41static 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
41static NSString *currentSystemAppearance_(void) { 49static 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
57iBool 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