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 {