diff --git a/src/cocoa_platform.h b/src/cocoa_platform.h index 71f3d704..1f5a4e63 100644 --- a/src/cocoa_platform.h +++ b/src/cocoa_platform.h @@ -110,6 +110,7 @@ typedef struct _GLFWwindowNS id layer; GLFWbool maximized; + GLFWbool retina; // Cached window properties to filter out duplicate events int width, height; diff --git a/src/cocoa_window.m b/src/cocoa_window.m index a7d61283..8cf5ec38 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -534,7 +534,7 @@ static const NSRange kEmptyRange = { NSNotFound, 0 }; window->ns.yscale = yscale; _glfwInputWindowContentScale(window, xscale, yscale); - if (window->ns.layer) + if (window->ns.retina && window->ns.layer) [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; } } @@ -842,9 +842,7 @@ static GLFWbool createNativeWindow(_GLFWwindow* window, [window->ns.object setFrameAutosaveName:@(wndconfig->ns.frameName)]; window->ns.view = [[GLFWContentView alloc] initWithGlfwWindow:window]; - - if (wndconfig->ns.retina) - [window->ns.view setWantsBestResolutionOpenGLSurface:YES]; + window->ns.retina = wndconfig->ns.retina; if (fbconfig->transparent) { @@ -1728,7 +1726,9 @@ VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, return VK_ERROR_EXTENSION_NOT_PRESENT; } - [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; + if (window->ns.retina) + [window->ns.layer setContentsScale:[window->ns.object backingScaleFactor]]; + [window->ns.view setLayer:window->ns.layer]; [window->ns.view setWantsLayer:YES]; diff --git a/src/nsgl_context.m b/src/nsgl_context.m index 109dad75..1a709bb5 100755 --- a/src/nsgl_context.m +++ b/src/nsgl_context.m @@ -360,6 +360,9 @@ GLFWbool _glfwCreateContextNSGL(_GLFWwindow* window, forParameter:NSOpenGLContextParameterSurfaceOpacity]; } + if (window->ns.retina) + [window->ns.view setWantsBestResolutionOpenGLSurface:YES]; + [window->context.nsgl.object setView:window->ns.view]; window->context.nsgl.swapIntervalCond = [NSCondition new];