From 69f1cfbcb9125aa9d449a5d01b3734bcd51309e8 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 4 Nov 2015 12:04:34 -0800 Subject: [PATCH 1/6] Fixes for Mac build and crash on startup For some reason the qt code gen is getting confused by the #if 0 in 3DConnextionClient.h, so I added a stub implementation. In Application.cpp the change of moving idle into paintGL had a sideeffect of calling OffscreenGlCanvas before it was initialized. To work around this I added a guard to prevent calling idle before all the gl windows/widgets have been initialized. --- interface/src/Application.cpp | 12 ++++++------ interface/src/Application.h | 3 ++- interface/src/devices/3DConnexionClient.h | 15 +++++++++++++++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d31d9de4a0..556664ec10 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -940,14 +940,12 @@ void Application::initializeGL() { qCDebug(interfaceapp) << "Created Display Window."; // initialize glut for shape drawing; Qt apparently initializes it on OS X - #ifndef __APPLE__ - static bool isInitialized = false; - if (isInitialized) { + if (_isGLInitialized) { return; } else { - isInitialized = true; + _isGLInitialized = true; } - #endif + // Where the gpuContext is initialized and where the TRUE Backend is created and assigned gpu::Context::init(); _gpuContext = std::make_shared(); @@ -1059,7 +1057,9 @@ void Application::paintGL() { _lastFramesPerSecondUpdate = now; } - idle(now); + if (_isGLInitialized) { + idle(now); + } PROFILE_RANGE(__FUNCTION__); PerformanceTimer perfTimer("paintGL"); diff --git a/interface/src/Application.h b/interface/src/Application.h index 212687c11e..5a5d5a015c 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -414,7 +414,7 @@ private: bool _dependencyManagerIsSetup; - OffscreenGlCanvas* _offscreenContext; + OffscreenGlCanvas* _offscreenContext {nullptr}; DisplayPluginPointer _displayPlugin; InputPluginList _activeInputPlugins; @@ -548,6 +548,7 @@ private: quint64 _lastSimsPerSecondUpdate = 0; bool _isForeground = true; // starts out assumed to be in foreground bool _inPaint = false; + bool _isGLInitialized {false}; }; #endif // hifi_Application_h diff --git a/interface/src/devices/3DConnexionClient.h b/interface/src/devices/3DConnexionClient.h index 03a43d4c64..b6fa6a37c3 100755 --- a/interface/src/devices/3DConnexionClient.h +++ b/interface/src/devices/3DConnexionClient.h @@ -220,4 +220,19 @@ public: #endif +#include +#include + +// stub +class ConnexionClient : public QObject { + Q_OBJECT +public: + static ConnexionClient& getInstance(); + void init() {}; + void destroy() {}; + bool Is3dmouseAttached() { return false; }; +public slots: + void toggleConnexion(bool shouldEnable) {}; +}; + #endif // defined(hifi_3DConnexionClient_h) From d46d521d81e65b62a47b13740cd94a8438a6e020 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Wed, 4 Nov 2015 15:10:23 -0800 Subject: [PATCH 2/6] Added #else branch to #if 0 --- interface/src/devices/3DConnexionClient.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/src/devices/3DConnexionClient.h b/interface/src/devices/3DConnexionClient.h index b6fa6a37c3..7435739bca 100755 --- a/interface/src/devices/3DConnexionClient.h +++ b/interface/src/devices/3DConnexionClient.h @@ -218,7 +218,7 @@ public: void handleAxisEvent(); }; -#endif +#else // #if 0 #include #include @@ -235,4 +235,6 @@ public slots: void toggleConnexion(bool shouldEnable) {}; }; +#endif + #endif // defined(hifi_3DConnexionClient_h) From 8d16f60b15ee192e07bfffa2bbc8b4c556e6b920 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 5 Nov 2015 09:02:39 -0800 Subject: [PATCH 3/6] Removed hardcoded define HAVE_3DCONNEXIONCLIENT This should be set from cmake, right? --- libraries/input-plugins/src/input-plugins/SpacemouseManager.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/input-plugins/src/input-plugins/SpacemouseManager.h b/libraries/input-plugins/src/input-plugins/SpacemouseManager.h index 01df038ccb..e444b73d9f 100644 --- a/libraries/input-plugins/src/input-plugins/SpacemouseManager.h +++ b/libraries/input-plugins/src/input-plugins/SpacemouseManager.h @@ -11,8 +11,6 @@ #ifndef hifi_SpacemouseManager_h #define hifi_SpacemouseManager_h -#define HAVE_3DCONNEXIONCLIENT - #include #include #include From 2318e48fa8dfce0e0ad2ecd1cf108693a57998f5 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 5 Nov 2015 09:43:41 -0800 Subject: [PATCH 4/6] AvatarRig: fix for crash when index was -1 --- libraries/animation/src/AvatarRig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/animation/src/AvatarRig.cpp b/libraries/animation/src/AvatarRig.cpp index 4dbf5207b1..b72e15a0ce 100644 --- a/libraries/animation/src/AvatarRig.cpp +++ b/libraries/animation/src/AvatarRig.cpp @@ -13,7 +13,7 @@ /// Updates the state of the joint at the specified index. void AvatarRig::updateJointState(int index, glm::mat4 rootTransform) { - if (index < 0 && index >= _jointStates.size()) { + if (index < 0 || index >= _jointStates.size()) { return; // bail } JointState& state = _jointStates[index]; From 50e8f49f5241820f364e9beeb783ab6731d160af Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 5 Nov 2015 10:54:50 -0800 Subject: [PATCH 5/6] SpacemouseManager Moved stub init into cpp file. This should fix the windows build. For some reason the linker was having a problem resolving this. --- .../input-plugins/src/input-plugins/SpacemouseManager.cpp | 3 +++ libraries/input-plugins/src/input-plugins/SpacemouseManager.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/input-plugins/src/input-plugins/SpacemouseManager.cpp b/libraries/input-plugins/src/input-plugins/SpacemouseManager.cpp index 9c1307a18e..43e6ee48a8 100644 --- a/libraries/input-plugins/src/input-plugins/SpacemouseManager.cpp +++ b/libraries/input-plugins/src/input-plugins/SpacemouseManager.cpp @@ -130,6 +130,9 @@ void SpacemouseManager::ManagerFocusOutEvent() { instance->focusOutEvent(); } +void SpacemouseManager::init() { +} + #ifdef HAVE_3DCONNEXIONCLIENT #ifdef Q_OS_WIN diff --git a/libraries/input-plugins/src/input-plugins/SpacemouseManager.h b/libraries/input-plugins/src/input-plugins/SpacemouseManager.h index e444b73d9f..08ac954c94 100644 --- a/libraries/input-plugins/src/input-plugins/SpacemouseManager.h +++ b/libraries/input-plugins/src/input-plugins/SpacemouseManager.h @@ -25,7 +25,7 @@ class SpacemouseManager : public QObject { public: static SpacemouseManager& getInstance(); void ManagerFocusOutEvent(); - void init() {}; + void init(); void destroy() {}; bool Is3dmouseAttached() { return false; }; public slots: From 50370479e475fa1c3f54695a674e230f21c905e4 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Thu, 5 Nov 2015 11:03:32 -0800 Subject: [PATCH 6/6] Application.h: coding standard fixes --- interface/src/Application.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.h b/interface/src/Application.h index 5a5d5a015c..39e3879707 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -414,7 +414,7 @@ private: bool _dependencyManagerIsSetup; - OffscreenGlCanvas* _offscreenContext {nullptr}; + OffscreenGlCanvas* _offscreenContext { nullptr }; DisplayPluginPointer _displayPlugin; InputPluginList _activeInputPlugins; @@ -548,7 +548,7 @@ private: quint64 _lastSimsPerSecondUpdate = 0; bool _isForeground = true; // starts out assumed to be in foreground bool _inPaint = false; - bool _isGLInitialized {false}; + bool _isGLInitialized { false }; }; #endif // hifi_Application_h