mirror of
https://github.com/love2d/love.git
synced 2026-08-16 08:11:02 +02:00
macOS: fix colors appearing oversaturated on P3 displays.
The fix only applies to macOS 11+ when using OpenGL.
This commit is contained in:
@@ -26,6 +26,8 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
typedef struct SDL_Window SDL_Window;
|
||||
|
||||
namespace love
|
||||
{
|
||||
namespace macos
|
||||
@@ -55,6 +57,12 @@ void requestAttention(bool continuous);
|
||||
void setMetalLayerVSync(void *metallayer, bool vsync);
|
||||
bool getMetalLayerVSync(void *metallayer);
|
||||
|
||||
/**
|
||||
* Explicitly sets the window's color space to be sRGB - which stops the OS
|
||||
* from interpreting the backbuffer output as P3 on P3-capable displays.
|
||||
**/
|
||||
void setWindowSRGBColorSpace(SDL_Window *window);
|
||||
|
||||
} // macos
|
||||
} // love
|
||||
|
||||
|
||||
+20
-3
@@ -27,9 +27,11 @@
|
||||
#import <QuartzCore/CAMetalLayer.h>
|
||||
|
||||
#ifdef LOVE_MACOSX_SDL_DIRECT_INCLUDE
|
||||
# include <SDL.h>
|
||||
#include <SDL.h>
|
||||
#include <SDL_syswm.h>
|
||||
#else
|
||||
# include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL.h>
|
||||
#include <SDL2/SDL_syswm.h>
|
||||
#endif
|
||||
|
||||
namespace love
|
||||
@@ -112,7 +114,22 @@ bool getMetalLayerVSync(void *metallayer)
|
||||
return true;
|
||||
}
|
||||
|
||||
} // osx
|
||||
void setWindowSRGBColorSpace(SDL_Window *window)
|
||||
{
|
||||
@autoreleasepool
|
||||
{
|
||||
// This works on earlier macOS versions, but performance may be worse
|
||||
// (at least, it was back when I tested in December 2016).
|
||||
if (@available(macOS 11.0, *))
|
||||
{
|
||||
SDL_SysWMinfo info = {};
|
||||
if (SDL_GetWindowWMInfo(window, &info))
|
||||
info.info.cocoa.window.colorSpace = [NSColorSpace sRGBColorSpace];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // macos
|
||||
} // love
|
||||
|
||||
#endif // LOVE_MACOS
|
||||
|
||||
Reference in New Issue
Block a user