From 1af51572afef365edbf0c94d2dbed12c4b435501 Mon Sep 17 00:00:00 2001 From: Sam Gondelman Date: Fri, 24 Jul 2015 17:10:39 -0700 Subject: [PATCH] fixed init crash if you follow very specific startup steps --- interface/src/Application.cpp | 29 +++++++++---------- interface/src/ui/ApplicationCompositor.cpp | 4 ++- .../oculus/Oculus_0_5_DisplayPlugin.cpp | 4 +-- .../src/input-plugins/SixenseManager.h | 4 +-- 4 files changed, 20 insertions(+), 21 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8e02edd130..f67f2ac66b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -535,21 +535,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : container->setFocus(); container->installEventFilter(DependencyManager::get().data()); - // Necessary to call this here so Oculus can get inited before Sixense - getDisplayPlugins(); - - // must be before initializeGL() - _activeInputPlugins.clear(); - auto inputPlugins = getInputPlugins(); - foreach(auto inputPlugin, inputPlugins) { - QString name = inputPlugin->getName(); - if (name == KeyboardMouseDevice::NAME) { - _keyboardMouseDevice = static_cast(inputPlugin.data()); // TODO: this seems super hacky - break; - } - } - updateInputModes(); - _offscreenContext->makeCurrent(); initializeGL(); // initialization continues in initializeGL when OpenGL context is ready @@ -894,6 +879,20 @@ void Application::initializeUi() { resizeGL(); } }); + + // This will prevent the hid_init sixense crash + getActiveDisplayPlugin(); + + // This will set up the input plugins UI + _activeInputPlugins.clear(); + auto inputPlugins = getInputPlugins(); + foreach(auto inputPlugin, inputPlugins) { + QString name = inputPlugin->getName(); + if (name == KeyboardMouseDevice::NAME) { + _keyboardMouseDevice = static_cast(inputPlugin.data()); // TODO: this seems super hacky + } + } + updateInputModes(); } template diff --git a/interface/src/ui/ApplicationCompositor.cpp b/interface/src/ui/ApplicationCompositor.cpp index 38badeaaa4..828d13fe19 100644 --- a/interface/src/ui/ApplicationCompositor.cpp +++ b/interface/src/ui/ApplicationCompositor.cpp @@ -112,7 +112,9 @@ bool raySphereIntersect(const glm::vec3 &dir, const glm::vec3 &origin, float r, } } -ApplicationCompositor::ApplicationCompositor() { +ApplicationCompositor::ApplicationCompositor() : + _alphaPropertyAnimation(new QPropertyAnimation(this, "alpha")) +{ memset(_reticleActive, 0, sizeof(_reticleActive)); memset(_magActive, 0, sizeof(_reticleActive)); memset(_magSizeMult, 0, sizeof(_magSizeMult)); diff --git a/libraries/display-plugins/src/display-plugins/oculus/Oculus_0_5_DisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/oculus/Oculus_0_5_DisplayPlugin.cpp index 48235be2a0..0f76744130 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/Oculus_0_5_DisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/oculus/Oculus_0_5_DisplayPlugin.cpp @@ -56,14 +56,12 @@ void Oculus_0_5_DisplayPlugin::init() { if (!_hmd) { qFatal("Failed to acquire HMD"); } - } void Oculus_0_5_DisplayPlugin::deinit() { - ovr_Shutdown(); - ovrHmd_Destroy(_hmd); _hmd = nullptr; + ovr_Shutdown(); } void Oculus_0_5_DisplayPlugin::activate(PluginContainer * container) { diff --git a/libraries/input-plugins/src/input-plugins/SixenseManager.h b/libraries/input-plugins/src/input-plugins/SixenseManager.h index a49cf6c70a..c6992bc711 100644 --- a/libraries/input-plugins/src/input-plugins/SixenseManager.h +++ b/libraries/input-plugins/src/input-plugins/SixenseManager.h @@ -84,8 +84,6 @@ public: UserInputMapper::Input makeInput(JoystickAxisChannel axis, int index); UserInputMapper::Input makeInput(JointChannel joint); - static const QString NAME; - public slots: void setFilter(bool filter); @@ -120,6 +118,8 @@ private: bool _hydrasConnected; bool _invertButtons = DEFAULT_INVERT_SIXENSE_MOUSE_BUTTONS; + + static const QString NAME; }; #endif // hifi_SixenseManager_h