diff --git a/launcher/config.kcfg b/launcher/config.kcfg index 5af51f2..85c9b45 100644 --- a/launcher/config.kcfg +++ b/launcher/config.kcfg @@ -49,5 +49,8 @@ SPDX-License-Identifier: CC0-1.0 true + + false + diff --git a/launcher/include/launchersettings.h b/launcher/include/launchersettings.h index b5d5d8a..e5d536f 100644 --- a/launcher/include/launchersettings.h +++ b/launcher/include/launchersettings.h @@ -26,6 +26,7 @@ class LauncherSettings : public QObject Q_PROPERTY(QString preferredProtocol READ preferredProtocol WRITE setPreferredProtocol NOTIFY preferredProtocolChanged) Q_PROPERTY(QString screenshotDir READ screenshotDir WRITE setScreenshotDir NOTIFY screenshotDirChanged) Q_PROPERTY(bool argumentsEncrypted READ argumentsEncrypted WRITE setArgumentsEncrypted NOTIFY encryptedArgumentsChanged) + Q_PROPERTY(bool enableRenderDocCapture READ enableRenderDocCapture WRITE setEnableRenderDocCapture NOTIFY enableRenderDocCaptureChanged) public: explicit LauncherSettings(QObject *parent = nullptr); @@ -63,6 +64,9 @@ public: [[nodiscard]] bool argumentsEncrypted() const; void setArgumentsEncrypted(bool value); + [[nodiscard]] bool enableRenderDocCapture() const; + void setEnableRenderDocCapture(bool value); + [[nodiscard]] QString currentProfile() const; void setCurrentProfile(const QString &value); @@ -80,6 +84,7 @@ Q_SIGNALS: void preferredProtocolChanged(); void screenshotDirChanged(); void encryptedArgumentsChanged(); + void enableRenderDocCaptureChanged(); private: Config *m_config = nullptr; diff --git a/launcher/src/gamerunner.cpp b/launcher/src/gamerunner.cpp index 885232f..f36b6ea 100644 --- a/launcher/src/gamerunner.cpp +++ b/launcher/src/gamerunner.cpp @@ -274,14 +274,16 @@ void GameRunner::launchExecutable(const Profile &profile, QProcess *process, con } #endif + if (m_launcher.settings()->enableRenderDocCapture()) { + env.insert(QStringLiteral("VK_LAYER_RENDERDOC_Capture"), QStringLiteral("VK_LAYER_RENDERDOC_Capture")); + env.insert(QStringLiteral("ENABLE_VULKAN_RENDERDOC_CAPTURE"), QString::number(1)); + } + #if defined(Q_OS_LINUX) env.insert(QStringLiteral("WINEESYNC"), QString::number(1)); env.insert(QStringLiteral("WINEFSYNC"), QString::number(1)); env.insert(QStringLiteral("WINEFSYNC_FUTEX2"), QString::number(1)); - // env.insert(QStringLiteral("VK_LAYER_RENDERDOC_Capture"), QStringLiteral("VK_LAYER_RENDERDOC_Capture")); - // env.insert(QStringLiteral("ENABLE_VULKAN_RENDERDOC_CAPTURE"), QString::number(1)); - const QDir dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); const QString logDir = dataDir.absoluteFilePath(QStringLiteral("log")); diff --git a/launcher/src/launchersettings.cpp b/launcher/src/launchersettings.cpp index a0db988..eae1693 100644 --- a/launcher/src/launchersettings.cpp +++ b/launcher/src/launchersettings.cpp @@ -163,6 +163,20 @@ void LauncherSettings::setArgumentsEncrypted(const bool value) } } +bool LauncherSettings::enableRenderDocCapture() const +{ + return m_config->enableRenderDocCapture(); +} + +void LauncherSettings::setEnableRenderDocCapture(const bool value) +{ + if (m_config->enableRenderDocCapture() != value) { + m_config->setEnableRenderDocCapture(value); + m_config->save(); + Q_EMIT enableRenderDocCaptureChanged(); + } +} + QString LauncherSettings::currentProfile() const { return KSharedConfig::openStateConfig()->group(QStringLiteral("General")).readEntry(QStringLiteral("CurrentProfile")); diff --git a/launcher/ui/Settings/DeveloperSettings.qml b/launcher/ui/Settings/DeveloperSettings.qml index 1fdf3fc..79fd74b 100644 --- a/launcher/ui/Settings/DeveloperSettings.qml +++ b/launcher/ui/Settings/DeveloperSettings.qml @@ -44,9 +44,24 @@ FormCard.FormCardPage { id: encryptArgDelegate text: i18n("Encrypt Game Arguments") + description: i18n("Disable encryption if you want to inspect the raw arguments passed to the game.") checked: LauncherCore.settings.argumentsEncrypted onCheckedChanged: LauncherCore.settings.argumentsEncrypted = checked } + + FormCard.FormDelegateSeparator { + above: encryptArgDelegate + below: renderDocCaptureDelegate + } + + FormCard.FormCheckDelegate { + id: renderDocCaptureDelegate + + text: i18n("Allow RenderDoc Capture") + description: i18n("Inject the RenderDoc capture layer.") + checked: LauncherCore.settings.enableRenderDocCapture + onCheckedChanged: LauncherCore.settings.enableRenderDocCapture = checked + } } FormCard.FormHeader {