Add a renderer selection option for macOS

There are numerous conflicting reports about which Mac renderer works best (even on the same systems!). I give up, just let the users figure it out.
This commit is contained in:
Cameron Gutman
2026-07-18 16:38:40 -05:00
parent c0c4d60565
commit 4453e4aef1
10 changed files with 116 additions and 7 deletions
+4
View File
@@ -51,6 +51,7 @@
#define SER_CAPTURESYSKEYS "capturesyskeys"
#define SER_KEEPAWAKE "keepawake"
#define SER_LANGUAGE "language"
#define SER_RENDERER "renderer"
#define CURRENT_DEFAULT_VER 2
@@ -159,6 +160,8 @@ void StreamingPreferences::reload()
static_cast<int>(VideoCodecConfig::VCC_AUTO)).toInt());
videoDecoderSelection = static_cast<VideoDecoderSelection>(settings.value(SER_VIDEODEC,
static_cast<int>(VideoDecoderSelection::VDS_AUTO)).toInt());
rendererSelection = static_cast<RendererSelection>(settings.value(SER_RENDERER,
static_cast<int>(RendererSelection::RS_AUTO)).toInt());
windowMode = static_cast<WindowMode>(settings.value(SER_WINDOWMODE,
// Try to load from the old preference value too
static_cast<int>(settings.value(SER_FULLSCREEN, true).toBool() ?
@@ -347,6 +350,7 @@ void StreamingPreferences::save()
settings.setValue(SER_YUV444, enableYUV444);
settings.setValue(SER_VIDEOCFG, static_cast<int>(videoCodecConfig));
settings.setValue(SER_VIDEODEC, static_cast<int>(videoDecoderSelection));
settings.setValue(SER_RENDERER, static_cast<int>(rendererSelection));
settings.setValue(SER_WINDOWMODE, static_cast<int>(windowMode));
settings.setValue(SER_UIDISPLAYMODE, static_cast<int>(uiDisplayMode));
settings.setValue(SER_LANGUAGE, static_cast<int>(language));
+14
View File
@@ -44,6 +44,17 @@ public:
};
Q_ENUM(VideoDecoderSelection)
// Mac only (for now)
enum RendererSelection
{
RS_PROBE_ONLY = -1, // Only valid for probing decoder properties
RS_AUTO,
RS_VULKAN,
RS_METAL,
RS_AVSBDL
};
Q_ENUM(RendererSelection)
enum WindowMode
{
WM_FULLSCREEN,
@@ -134,6 +145,7 @@ public:
Q_PROPERTY(bool enableHdr MEMBER enableHdr NOTIFY enableHdrChanged)
Q_PROPERTY(bool enableYUV444 MEMBER enableYUV444 NOTIFY enableYUV444Changed)
Q_PROPERTY(VideoDecoderSelection videoDecoderSelection MEMBER videoDecoderSelection NOTIFY videoDecoderSelectionChanged)
Q_PROPERTY(RendererSelection rendererSelection MEMBER rendererSelection NOTIFY rendererSelectionChanged)
Q_PROPERTY(WindowMode windowMode MEMBER windowMode NOTIFY windowModeChanged)
Q_PROPERTY(WindowMode recommendedFullScreenMode MEMBER recommendedFullScreenMode CONSTANT)
Q_PROPERTY(UIDisplayMode uiDisplayMode MEMBER uiDisplayMode NOTIFY uiDisplayModeChanged)
@@ -187,6 +199,7 @@ public:
UIDisplayMode uiDisplayMode;
Language language;
CaptureSysKeysMode captureSysKeysMode;
RendererSelection rendererSelection;
signals:
void displayModeChanged();
@@ -224,6 +237,7 @@ signals:
void captureSysKeysModeChanged();
void keepAwakeChanged();
void languageChanged();
void rendererSelectionChanged();
private:
explicit StreamingPreferences(QQmlEngine *qmlEngine);