From 931cad34d166f5ebc33b04d262e7678f45971b84 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Mon, 28 Mar 2016 12:05:58 -0700 Subject: [PATCH] Check plugin activation success --- .../Basic2DWindowOpenGLDisplayPlugin.cpp | 6 +++--- .../display-plugins/Basic2DWindowOpenGLDisplayPlugin.h | 2 +- .../src/display-plugins/OpenGLDisplayPlugin.cpp | 9 ++++++--- .../src/display-plugins/OpenGLDisplayPlugin.h | 5 +++-- .../src/display-plugins/hmd/HmdDisplayPlugin.cpp | 5 +++-- .../src/display-plugins/hmd/HmdDisplayPlugin.h | 2 +- .../src/display-plugins/stereo/StereoDisplayPlugin.cpp | 5 +++-- .../src/display-plugins/stereo/StereoDisplayPlugin.h | 2 +- libraries/plugins/src/plugins/DisplayPlugin.cpp | 4 ++-- libraries/plugins/src/plugins/DisplayPlugin.h | 2 +- libraries/plugins/src/plugins/Plugin.h | 4 +++- plugins/hifiNeuron/src/NeuronPlugin.cpp | 8 ++++++-- plugins/hifiNeuron/src/NeuronPlugin.h | 2 +- plugins/hifiSdl2/src/SDL2Manager.cpp | 8 ++++++-- plugins/hifiSdl2/src/SDL2Manager.h | 4 +--- plugins/hifiSixense/src/SixenseManager.cpp | 5 ++++- plugins/hifiSixense/src/SixenseManager.h | 2 +- plugins/oculus/src/OculusBaseDisplayPlugin.cpp | 7 +++++-- plugins/oculus/src/OculusBaseDisplayPlugin.h | 2 +- plugins/openvr/src/OpenVrDisplayPlugin.cpp | 10 ++++++++-- plugins/openvr/src/OpenVrDisplayPlugin.h | 2 +- plugins/openvr/src/ViveControllerManager.cpp | 5 ++++- plugins/openvr/src/ViveControllerManager.h | 4 +--- 23 files changed, 66 insertions(+), 39 deletions(-) diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp index 63cb1b80a4..3e3efec4a2 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp @@ -19,9 +19,7 @@ const QString Basic2DWindowOpenGLDisplayPlugin::NAME("Desktop"); static const QString FULLSCREEN = "Fullscreen"; -void Basic2DWindowOpenGLDisplayPlugin::internalActivate() { - Parent::internalActivate(); - +bool Basic2DWindowOpenGLDisplayPlugin::internalActivate() { _framerateActions.clear(); _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), FULLSCREEN, [this](bool clicked) { @@ -33,6 +31,8 @@ void Basic2DWindowOpenGLDisplayPlugin::internalActivate() { }, true, false); updateFramerate(); + + return Parent::internalActivate(); } void Basic2DWindowOpenGLDisplayPlugin::submitSceneTexture(uint32_t frameIndex, const gpu::TexturePointer& sceneTexture) { diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h index 90b32a1924..40c6eb4381 100644 --- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h @@ -22,7 +22,7 @@ public: virtual float getTargetFrameRate() override { return _framerateTarget ? (float) _framerateTarget : TARGET_FRAMERATE_Basic2DWindowOpenGL; } - virtual void internalActivate() override; + virtual bool internalActivate() override; virtual void submitSceneTexture(uint32_t frameIndex, const gpu::TexturePointer& sceneTexture) override; diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp index d842dc553b..8049e2d5a5 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp @@ -219,7 +219,7 @@ void OpenGLDisplayPlugin::cleanupForSceneTexture(const gpu::TexturePointer& scen } -void OpenGLDisplayPlugin::activate() { +bool OpenGLDisplayPlugin::activate() { if (!_cursorsData.size()) { auto& cursorManager = Cursor::Manager::instance(); for (const auto iconId : cursorManager.registeredIcons()) { @@ -238,7 +238,9 @@ void OpenGLDisplayPlugin::activate() { // Child classes may override this in order to do things like initialize // libraries, etc - internalActivate(); + if (!internalActivate()) { + return false; + } #if THREADED_PRESENT @@ -263,7 +265,8 @@ void OpenGLDisplayPlugin::activate() { customizeContext(); _container->makeRenderingContextCurrent(); #endif - DisplayPlugin::activate(); + + return DisplayPlugin::activate(); } void OpenGLDisplayPlugin::deactivate() { diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h index 7295b07ad3..b9628deb6c 100644 --- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h @@ -32,7 +32,7 @@ public: // These must be final to ensure proper ordering of operations // between the main thread and the presentation thread - void activate() override final; + bool activate() override final; void deactivate() override final; bool eventFilter(QObject* receiver, QEvent* event) override; @@ -77,7 +77,8 @@ protected: virtual void customizeContext(); virtual void uncustomizeContext(); - virtual void internalActivate() {} + // Returns true on successful activation + virtual bool internalActivate() { return true; } virtual void internalDeactivate() {} virtual void cleanupForSceneTexture(const gpu::TexturePointer& sceneTexture); // Plugin specific functionality to send the composed scene to the output window or device diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp index b022b10887..5be3f0d96a 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp @@ -32,7 +32,7 @@ glm::uvec2 HmdDisplayPlugin::getRecommendedUiSize() const { return CompositorHelper::VIRTUAL_SCREEN_SIZE; } -void HmdDisplayPlugin::internalActivate() { +bool HmdDisplayPlugin::internalActivate() { _monoPreview = _container->getBoolSetting("monoPreview", DEFAULT_MONO_VIEW); _container->addMenuItem(PluginType::DISPLAY_PLUGIN, MENU_PATH(), MONO_PREVIEW, @@ -41,7 +41,8 @@ void HmdDisplayPlugin::internalActivate() { _container->setBoolSetting("monoPreview", _monoPreview); }, true, _monoPreview); _container->removeMenu(FRAMERATE); - Parent::internalActivate(); + + return Parent::internalActivate(); } void HmdDisplayPlugin::customizeContext() { diff --git a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h index fede16c3a5..080a44bc66 100644 --- a/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.h @@ -33,7 +33,7 @@ protected: virtual bool isHmdMounted() const = 0; virtual void postPreview() {}; - void internalActivate() override; + bool internalActivate() override; void compositeOverlay() override; void compositePointer() override; void internalPresent() override; diff --git a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp index ae9f18e20d..66a4ba4835 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.cpp @@ -58,7 +58,7 @@ glm::mat4 StereoDisplayPlugin::getEyeProjection(Eye eye, const glm::mat4& basePr static const QString FRAMERATE = DisplayPlugin::MENU_PATH() + ">Framerate"; std::vector _screenActions; -void StereoDisplayPlugin::internalActivate() { +bool StereoDisplayPlugin::internalActivate() { auto screens = qApp->screens(); _screenActions.resize(screens.size()); for (int i = 0; i < screens.size(); ++i) { @@ -77,7 +77,8 @@ void StereoDisplayPlugin::internalActivate() { _screen = qApp->primaryScreen(); _container->setFullscreen(_screen); - Parent::internalActivate(); + + return Parent::internalActivate(); } void StereoDisplayPlugin::updateScreen() { diff --git a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h index 6563c2ae89..3b481dce97 100644 --- a/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h +++ b/libraries/display-plugins/src/display-plugins/stereo/StereoDisplayPlugin.h @@ -29,7 +29,7 @@ public: // virtual glm::mat4 getEyeToHeadTransform(Eye eye) const override; protected: - virtual void internalActivate() override; + virtual bool internalActivate() override; virtual void internalDeactivate() override; void updateScreen(); diff --git a/libraries/plugins/src/plugins/DisplayPlugin.cpp b/libraries/plugins/src/plugins/DisplayPlugin.cpp index 3860639614..c7fa5f5671 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.cpp +++ b/libraries/plugins/src/plugins/DisplayPlugin.cpp @@ -4,11 +4,11 @@ #include "PluginContainer.h" -void DisplayPlugin::activate() { - Parent::activate(); +bool DisplayPlugin::activate() { if (isHmd() && (getHmdScreen() >= 0)) { _container->showDisplayPluginsTools(); } + return Parent::activate(); } void DisplayPlugin::deactivate() { diff --git a/libraries/plugins/src/plugins/DisplayPlugin.h b/libraries/plugins/src/plugins/DisplayPlugin.h index e5ac78036e..f4f28176c7 100644 --- a/libraries/plugins/src/plugins/DisplayPlugin.h +++ b/libraries/plugins/src/plugins/DisplayPlugin.h @@ -59,7 +59,7 @@ class DisplayPlugin : public Plugin { Q_OBJECT using Parent = Plugin; public: - void activate() override; + bool activate() override; void deactivate() override; virtual bool isHmd() const { return false; } virtual int getHmdScreen() const { return -1; } diff --git a/libraries/plugins/src/plugins/Plugin.h b/libraries/plugins/src/plugins/Plugin.h index ee10ce331c..fb5bf0ba55 100644 --- a/libraries/plugins/src/plugins/Plugin.h +++ b/libraries/plugins/src/plugins/Plugin.h @@ -38,8 +38,10 @@ public: virtual void deinit(); /// Called when a plugin is being activated for use. May be called multiple times. - virtual void activate() { + /// Returns true if plugin was successfully activated. + virtual bool activate() { _active = true; + return _active; } /// Called when a plugin is no longer being used. May be called multiple times. diff --git a/plugins/hifiNeuron/src/NeuronPlugin.cpp b/plugins/hifiNeuron/src/NeuronPlugin.cpp index e2143dbdcf..f2b8c04827 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.cpp +++ b/plugins/hifiNeuron/src/NeuronPlugin.cpp @@ -451,10 +451,10 @@ bool NeuronPlugin::isSupported() const { #endif } -void NeuronPlugin::activate() { -#ifdef HAVE_NEURON +bool NeuronPlugin::activate() { InputPlugin::activate(); +#ifdef HAVE_NEURON // register with userInputMapper auto userInputMapper = DependencyManager::get(); userInputMapper->registerDevice(_inputDevice); @@ -473,11 +473,15 @@ void NeuronPlugin::activate() { if (!_socketRef) { // error qCCritical(inputplugins) << "NeuronPlugin: error connecting to " << _serverAddress.c_str() << ":" << _serverPort << ", error = " << BRGetLastErrorMessage(); + return false; } else { qCDebug(inputplugins) << "NeuronPlugin: success connecting to " << _serverAddress.c_str() << ":" << _serverPort; BRRegisterAutoSyncParmeter(_socketRef, Cmd_CombinationMode); + return true; } +#else + return false; #endif } diff --git a/plugins/hifiNeuron/src/NeuronPlugin.h b/plugins/hifiNeuron/src/NeuronPlugin.h index afe8530b07..99859dcacb 100644 --- a/plugins/hifiNeuron/src/NeuronPlugin.h +++ b/plugins/hifiNeuron/src/NeuronPlugin.h @@ -31,7 +31,7 @@ public: virtual const QString& getName() const override { return NAME; } const QString& getID() const override { return NEURON_ID_STRING; } - virtual void activate() override; + virtual bool activate() override; virtual void deactivate() override; virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } diff --git a/plugins/hifiSdl2/src/SDL2Manager.cpp b/plugins/hifiSdl2/src/SDL2Manager.cpp index 58da2c5df0..7091b20d21 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.cpp +++ b/plugins/hifiSdl2/src/SDL2Manager.cpp @@ -99,15 +99,19 @@ void SDL2Manager::deinit() { #endif } -void SDL2Manager::activate() { +bool SDL2Manager::activate() { + InputPlugin::activate(); + #ifdef HAVE_SDL2 auto userInputMapper = DependencyManager::get(); for (auto joystick : _openJoysticks) { userInputMapper->registerDevice(joystick); emit joystickAdded(joystick.get()); } + return true; +#else + return false; #endif - InputPlugin::activate(); } void SDL2Manager::deactivate() { diff --git a/plugins/hifiSdl2/src/SDL2Manager.h b/plugins/hifiSdl2/src/SDL2Manager.h index a88e41128d..5e3e16d090 100644 --- a/plugins/hifiSdl2/src/SDL2Manager.h +++ b/plugins/hifiSdl2/src/SDL2Manager.h @@ -34,9 +34,7 @@ public: virtual void init() override; virtual void deinit() override; - /// Called when a plugin is being activated for use. May be called multiple times. - virtual void activate() override; - /// Called when a plugin is no longer being used. May be called multiple times. + virtual bool activate() override; virtual void deactivate() override; virtual void pluginFocusOutEvent() override; diff --git a/plugins/hifiSixense/src/SixenseManager.cpp b/plugins/hifiSixense/src/SixenseManager.cpp index 9fdce3add4..eb55d84664 100644 --- a/plugins/hifiSixense/src/SixenseManager.cpp +++ b/plugins/hifiSixense/src/SixenseManager.cpp @@ -79,7 +79,7 @@ bool SixenseManager::isSupported() const { #endif } -void SixenseManager::activate() { +bool SixenseManager::activate() { InputPlugin::activate(); #ifdef HAVE_SIXENSE @@ -101,6 +101,9 @@ void SixenseManager::activate() { loadSettings(); _sixenseLoaded = (sixenseInit() == SIXENSE_SUCCESS); + return _sixenseLoaded; +#else + return false; #endif } diff --git a/plugins/hifiSixense/src/SixenseManager.h b/plugins/hifiSixense/src/SixenseManager.h index 5106c87836..a46614b17a 100644 --- a/plugins/hifiSixense/src/SixenseManager.h +++ b/plugins/hifiSixense/src/SixenseManager.h @@ -32,7 +32,7 @@ public: virtual const QString& getName() const override { return NAME; } virtual const QString& getID() const override { return HYDRA_ID_STRING; } - virtual void activate() override; + virtual bool activate() override; virtual void deactivate() override; virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp index 1ed5c9f22a..e23d8cade6 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.cpp +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.cpp @@ -34,8 +34,11 @@ void OculusBaseDisplayPlugin::customizeContext() { Parent::customizeContext(); } -void OculusBaseDisplayPlugin::internalActivate() { +bool OculusBaseDisplayPlugin::internalActivate() { _session = acquireOculusSession(); + if (!_session) { + return false; + } _hmdDesc = ovr_GetHmdDesc(_session); @@ -81,7 +84,7 @@ void OculusBaseDisplayPlugin::internalActivate() { // This must come after the initialization, so that the values calculated // above are available during the customizeContext call (when not running // in threaded present mode) - Parent::internalActivate(); + return Parent::internalActivate(); } void OculusBaseDisplayPlugin::internalDeactivate() { diff --git a/plugins/oculus/src/OculusBaseDisplayPlugin.h b/plugins/oculus/src/OculusBaseDisplayPlugin.h index 5455b61a60..d21b0561bc 100644 --- a/plugins/oculus/src/OculusBaseDisplayPlugin.h +++ b/plugins/oculus/src/OculusBaseDisplayPlugin.h @@ -24,7 +24,7 @@ public: protected: void customizeContext() override; - void internalActivate() override; + bool internalActivate() override; void internalDeactivate() override; protected: diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.cpp b/plugins/openvr/src/OpenVrDisplayPlugin.cpp index 0e7541066e..c4d8b252f0 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.cpp +++ b/plugins/openvr/src/OpenVrDisplayPlugin.cpp @@ -41,14 +41,18 @@ bool OpenVrDisplayPlugin::isSupported() const { return !isOculusPresent() && vr::VR_IsHmdPresent(); } -void OpenVrDisplayPlugin::internalActivate() { +bool OpenVrDisplayPlugin::internalActivate() { Parent::internalActivate(); + _container->setIsOptionChecked(StandingHMDSensorMode, true); if (!_system) { _system = acquireOpenVrSystem(); } - Q_ASSERT(_system); + if (!_system) { + qWarning() << "Failed to initialize OpenVR"; + return false; + } _system->GetRecommendedRenderTargetSize(&_renderTargetSize.x, &_renderTargetSize.y); // Recommended render target size is per-eye, so double the X size for @@ -86,6 +90,8 @@ void OpenVrDisplayPlugin::internalActivate() { } else { qDebug() << "OpenVR: error could not get chaperone pointer"; } + + return true; } void OpenVrDisplayPlugin::internalDeactivate() { diff --git a/plugins/openvr/src/OpenVrDisplayPlugin.h b/plugins/openvr/src/OpenVrDisplayPlugin.h index 78b76cb78d..022af5b06d 100644 --- a/plugins/openvr/src/OpenVrDisplayPlugin.h +++ b/plugins/openvr/src/OpenVrDisplayPlugin.h @@ -30,7 +30,7 @@ public: virtual void updateHeadPose(uint32_t frameIndex) override; protected: - void internalActivate() override; + bool internalActivate() override; void internalDeactivate() override; void hmdPresent() override; diff --git a/plugins/openvr/src/ViveControllerManager.cpp b/plugins/openvr/src/ViveControllerManager.cpp index 2e2c0face0..c1ed5aa880 100644 --- a/plugins/openvr/src/ViveControllerManager.cpp +++ b/plugins/openvr/src/ViveControllerManager.cpp @@ -53,8 +53,9 @@ bool ViveControllerManager::isSupported() const { return !isOculusPresent() && vr::VR_IsHmdPresent(); } -void ViveControllerManager::activate() { +bool ViveControllerManager::activate() { InputPlugin::activate(); + _container->addMenu(MENU_PATH); _container->addMenuItem(PluginType::INPUT_PLUGIN, MENU_PATH, RENDER_CONTROLLERS, [this] (bool clicked) { this->setRenderControllers(clicked); }, @@ -122,6 +123,8 @@ void ViveControllerManager::activate() { auto userInputMapper = DependencyManager::get(); userInputMapper->registerDevice(_inputDevice); _registeredWithInputMapper = true; + + return true; } void ViveControllerManager::deactivate() { diff --git a/plugins/openvr/src/ViveControllerManager.h b/plugins/openvr/src/ViveControllerManager.h index 480fbfeb90..d3645304c5 100644 --- a/plugins/openvr/src/ViveControllerManager.h +++ b/plugins/openvr/src/ViveControllerManager.h @@ -37,7 +37,7 @@ public: virtual bool isJointController() const override { return true; } const QString& getName() const override { return NAME; } - virtual void activate() override; + virtual bool activate() override; virtual void deactivate() override; virtual void pluginFocusOutEvent() override { _inputDevice->focusOutEvent(); } @@ -111,8 +111,6 @@ private: std::shared_ptr _inputDevice { std::make_shared(_system) }; static const QString NAME; - - }; #endif // hifi__ViveControllerManager