From ed58d6f34e1902b4457379fa1b7558c134540e83 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 5 Nov 2023 10:49:49 +0100 Subject: [PATCH 1/3] Disable Oculus plugin by default and add a setting to enable it --- .../hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- .../hifi/tablet/TabletGeneralPreferences.qml | 2 +- interface/src/ui/PreferencesDialog.cpp | 9 +++++++++ .../plugins/src/plugins/PluginManager.cpp | 18 ++++++++++++------ libraries/plugins/src/plugins/PluginManager.h | 5 +++++ plugins/openvr/src/OpenVrHelpers.cpp | 19 +++++++++++-------- 6 files changed, 39 insertions(+), 16 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 861de001d83..82f48724172 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -17,7 +17,7 @@ PreferencesDialog { id: root objectName: "GeneralPreferencesDialog" title: "General Settings" - showCategories: ["User Interface", "Mouse Sensitivity", "HMD", "Snapshots", "Privacy"] + showCategories: ["User Interface", "Mouse Sensitivity", "HMD", "Snapshots", "Privacy", "Plugins"] property var settings: Settings { category: root.objectName property alias x: root.x diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index 1d15fe8b238..4576c8cbbb9 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -38,6 +38,6 @@ StackView { TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" - showCategories: ["User Interface", "Mouse Sensitivity", "HMD", "Snapshots", "Privacy"] + showCategories: ["User Interface", "Mouse Sensitivity", "HMD", "Snapshots", "Privacy", "Plugins"] } } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 9340f593919..8597cb5717f 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include "scripting/RenderScriptingInterface.h" @@ -637,4 +638,12 @@ void setupPreferences() { preferences->addPreference(preference); } } + + static const QString PLUGIN_CATEGORY{ "Plugins" }; + auto pluginManager = PluginManager::getInstance(); + { + auto getter = [pluginManager]()->bool { return pluginManager->getEnableOculusPluginSetting(); }; + auto setter = [pluginManager](bool value) { pluginManager->setEnableOculusPluginSetting(value); }; + preferences->addPreference(new CheckPreference(PLUGIN_CATEGORY, "Enable Oculus Platform Plugin", getter, setter)); + } } diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index f53b3ccf13e..6f5cd111cd7 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -211,18 +211,24 @@ const OculusPlatformPluginPointer PluginManager::getOculusPlatformPlugin() { static OculusPlatformPluginPointer oculusPlatformPlugin; static std::once_flag once; std::call_once(once, [&] { - // Now grab the dynamic plugins - for (auto loader : getLoadedPlugins()) { - OculusPlatformProvider* oculusPlatformProvider = qobject_cast(loader->instance()); - if (oculusPlatformProvider) { - oculusPlatformPlugin = oculusPlatformProvider->getOculusPlatformPlugin(); - break; + // Now grab the dynamic plugins if the setting allows it + if (_enableOculusPluginSetting.get()) { + for (auto loader : getLoadedPlugins()) { + OculusPlatformProvider* oculusPlatformProvider = qobject_cast(loader->instance()); + if (oculusPlatformProvider) { + oculusPlatformPlugin = oculusPlatformProvider->getOculusPlatformPlugin(); + break; + } } } }); return oculusPlatformPlugin; } +void PluginManager::setEnableOculusPluginSetting(bool value) { + _enableOculusPluginSetting.set(value); +} + DisplayPluginList PluginManager::getAllDisplayPlugins() { return _displayPlugins; } diff --git a/libraries/plugins/src/plugins/PluginManager.h b/libraries/plugins/src/plugins/PluginManager.h index d3040f1d9b7..26c98ce5dbb 100644 --- a/libraries/plugins/src/plugins/PluginManager.h +++ b/libraries/plugins/src/plugins/PluginManager.h @@ -54,6 +54,9 @@ class PluginManager : public QObject, public Dependency { void setPluginFilter(PluginFilter pluginFilter) { _pluginFilter = pluginFilter; } Q_INVOKABLE DisplayPluginList getAllDisplayPlugins(); + bool getEnableOculusPluginSetting() { return _enableOculusPluginSetting.get(); } + void setEnableOculusPluginSetting(bool value); + signals: void inputDeviceRunningChanged(const QString& pluginName, bool isRunning, const QStringList& runningDevices); @@ -76,6 +79,8 @@ class PluginManager : public QObject, public Dependency { Setting::Handle _enableScriptingPlugins { "private/enableScriptingPlugins", (bool)qgetenv("enableScriptingPlugins").toInt() }; + + Setting::Handle _enableOculusPluginSetting { "enableOculusPluginSetting", false }; }; // TODO: we should define this value in CMake, and then use CMake diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index d22aecaa1fa..4bfc9370c92 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -50,15 +50,18 @@ static const uint32_t RELEASE_OPENVR_HMD_DELAY_MS = 5000; bool isOculusPresent() { bool result = false; -#ifdef Q_OS_WIN - HANDLE oculusServiceEvent = ::OpenEventW(SYNCHRONIZE, FALSE, L"OculusHMDConnected"); - // The existence of the service indicates a running Oculus runtime - if (oculusServiceEvent) { - // A signaled event indicates a connected HMD - if (WAIT_OBJECT_0 == ::WaitForSingleObject(oculusServiceEvent, 0)) { - result = true; +#ifdef Q_OS_WIN + // Only check for Oculus presence if Oculus plugin is enabled + if (PluginManager::getInstance()->getEnableOculusPluginSetting()) { + HANDLE oculusServiceEvent = ::OpenEventW(SYNCHRONIZE, FALSE, L"OculusHMDConnected"); + // The existence of the service indicates a running Oculus runtime + if (oculusServiceEvent) { + // A signaled event indicates a connected HMD + if (WAIT_OBJECT_0 == ::WaitForSingleObject(oculusServiceEvent, 0)) { + result = true; + } + ::CloseHandle(oculusServiceEvent); } - ::CloseHandle(oculusServiceEvent); } #endif return result; From 2ad99f91ff638d84a6fc15e3d7b22f5a3f744aa1 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 5 Nov 2023 17:29:23 +0100 Subject: [PATCH 2/3] Add missing include --- plugins/openvr/src/OpenVrHelpers.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index 4bfc9370c92..b5d25a64cd4 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -23,6 +23,8 @@ #include #include #include +#include + #include #include "../../interface/src/Menu.h" From 9d5da2710100cadbb6446c07e09fa4f585090e0f Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 5 Nov 2023 21:04:45 +0100 Subject: [PATCH 3/3] Added logging to Oculus Plugin setting --- libraries/plugins/src/plugins/PluginManager.cpp | 3 +++ plugins/openvr/src/OpenVrHelpers.cpp | 3 +++ 2 files changed, 6 insertions(+) diff --git a/libraries/plugins/src/plugins/PluginManager.cpp b/libraries/plugins/src/plugins/PluginManager.cpp index 6f5cd111cd7..c1ca853563b 100644 --- a/libraries/plugins/src/plugins/PluginManager.cpp +++ b/libraries/plugins/src/plugins/PluginManager.cpp @@ -213,6 +213,7 @@ const OculusPlatformPluginPointer PluginManager::getOculusPlatformPlugin() { std::call_once(once, [&] { // Now grab the dynamic plugins if the setting allows it if (_enableOculusPluginSetting.get()) { + qCDebug(plugins) << "PluginManager::getOculusPlatformPlugin: Oculus plugin enabled by a setting"; for (auto loader : getLoadedPlugins()) { OculusPlatformProvider* oculusPlatformProvider = qobject_cast(loader->instance()); if (oculusPlatformProvider) { @@ -220,6 +221,8 @@ const OculusPlatformPluginPointer PluginManager::getOculusPlatformPlugin() { break; } } + } else { + qCDebug(plugins) << "PluginManager::getOculusPlatformPlugin: Oculus plugin disabled by a setting"; } }); return oculusPlatformPlugin; diff --git a/plugins/openvr/src/OpenVrHelpers.cpp b/plugins/openvr/src/OpenVrHelpers.cpp index b5d25a64cd4..d5cb7d6c8f5 100644 --- a/plugins/openvr/src/OpenVrHelpers.cpp +++ b/plugins/openvr/src/OpenVrHelpers.cpp @@ -55,6 +55,7 @@ bool isOculusPresent() { #ifdef Q_OS_WIN // Only check for Oculus presence if Oculus plugin is enabled if (PluginManager::getInstance()->getEnableOculusPluginSetting()) { + qDebug() << "isOculusPresent: Oculus plugin enabled by a setting"; HANDLE oculusServiceEvent = ::OpenEventW(SYNCHRONIZE, FALSE, L"OculusHMDConnected"); // The existence of the service indicates a running Oculus runtime if (oculusServiceEvent) { @@ -64,6 +65,8 @@ bool isOculusPresent() { } ::CloseHandle(oculusServiceEvent); } + } else { + qDebug() << "isOculusPresent: Oculus plugin disabled by a setting"; } #endif return result;