From cab32e7e67c2a78d10e0961f746ee7408978fb43 Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Thu, 1 Oct 2020 18:45:13 +0200 Subject: [PATCH] UI: Disable QT's implicit colourspace conversion on macOS Fixes issues as described in https://bugreports.qt.io/browse/QTBUG-47660 and halves CPU usage of OBS' UI by about 40-50%. --- UI/platform-osx.mm | 7 +++++++ UI/platform.hpp | 1 + UI/window-basic-main.cpp | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/UI/platform-osx.mm b/UI/platform-osx.mm index 18de5e7e9..228e38fe0 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -144,6 +144,13 @@ bool IsAlwaysOnTop(QWidget *window) return (window->windowFlags() & Qt::WindowStaysOnTopHint) != 0; } +void disableColorSpaceConversion(QWidget *window) +{ + NSView *view = + (__bridge NSView *)reinterpret_cast(window->winId()); + view.window.colorSpace = NSColorSpace.sRGBColorSpace; +} + void SetAlwaysOnTop(QWidget *window, bool enable) { Qt::WindowFlags flags = window->windowFlags(); diff --git a/UI/platform.hpp b/UI/platform.hpp index 6100e6fc2..df218183f 100644 --- a/UI/platform.hpp +++ b/UI/platform.hpp @@ -67,4 +67,5 @@ QString GetMonitorName(const QString &id); void EnableOSXVSync(bool enable); void EnableOSXDockIcon(bool enable); void InstallNSApplicationSubclass(); +void disableColorSpaceConversion(QWidget *window); #endif diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index a93b21363..183422349 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -1867,6 +1867,10 @@ void OBSBasic::OBSInit() SystemTray(true); #endif +#ifdef __APPLE__ + disableColorSpaceConversion(this); +#endif + bool has_last_version = config_has_user_value(App()->GlobalConfig(), "General", "LastVersion"); bool first_run =