macOS: fix colors appearing oversaturated on P3 displays.

The fix only applies to macOS 11+ when using OpenGL.
This commit is contained in:
slime
2022-09-30 15:17:46 -03:00
committed by Sasha Szpakowski
parent 9963d1247c
commit f6e9277a6d
3 changed files with 31 additions and 2 deletions
+8
View File
@@ -27,6 +27,8 @@
#include <string>
typedef struct SDL_Window SDL_Window;
namespace love
{
namespace macosx
@@ -55,6 +57,12 @@ std::string getExecutablePath();
**/
void requestAttention(bool continuous);
/**
* 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);
} // macosx
} // love
+19 -2
View File
@@ -26,9 +26,11 @@
#import <Cocoa/Cocoa.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
@@ -93,6 +95,21 @@ void requestAttention(bool continuous)
}
}
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];
}
}
}
} // osx
} // love