From b8a2fcbb2c74dfac021108e244c423e83e888453 Mon Sep 17 00:00:00 2001 From: AlessandroSigna Date: Fri, 30 Oct 2015 15:21:48 -0700 Subject: [PATCH 1/2] Vive controller - fix inverted inputs --- .../input-plugins/src/input-plugins/ViveControllerManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp b/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp index 69303bb079..e90006e014 100644 --- a/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp +++ b/libraries/input-plugins/src/input-plugins/ViveControllerManager.cpp @@ -254,7 +254,7 @@ void ViveControllerManager::update(float deltaTime, bool jointsCaptured) { } numTrackedControllers++; - bool left = numTrackedControllers == 1; + bool left = numTrackedControllers == 2; const mat4& mat = _trackedDevicePoseMat4[device]; @@ -307,13 +307,13 @@ void ViveControllerManager::focusOutEvent() { // These functions do translation from the Steam IDs to the standard controller IDs void ViveControllerManager::handleAxisEvent(uint32_t axis, float x, float y, bool left) { #ifdef Q_OS_WIN + //FIX ME? It enters here every frame: probably we want to enter only if an event occurs axis += vr::k_EButton_Axis0; using namespace controller; if (axis == vr::k_EButton_SteamVR_Touchpad) { _axisStateMap[left ? LX : RX] = x; _axisStateMap[left ? LY : RY] = y; } else if (axis == vr::k_EButton_SteamVR_Trigger) { - //FIX ME: Seems that enters here everytime _axisStateMap[left ? LT : RT] = x; } #endif From 085282db4f4cf1ed69ec4489c3906a3ab9f32bcf Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 30 Oct 2015 16:13:04 -0700 Subject: [PATCH 2/2] Crash fix for AvatarManager when iterating over _avatarHash The main problem is that a null shared pointer was inserted into the _avatarHash via the AvatarManager::getAvatarBySessionID(). When the sessionID is not present in the _avatarHash, [QHash](http://doc.qt.io/qt-5/qhash.html#operator-5b-5d) will *insert* an empty smart_ptr into the hash. --- interface/src/avatar/AvatarManager.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index fbfbbad2de..b0da8faeca 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -366,5 +366,10 @@ AvatarSharedPointer AvatarManager::getAvatarBySessionID(const QUuid& sessionID) return std::static_pointer_cast(_myAvatar); } QReadLocker locker(&_hashLock); - return _avatarHash[sessionID]; + auto iter = _avatarHash.find(sessionID); + if (iter != _avatarHash.end()) { + return iter.value(); + } else { + return AvatarSharedPointer(); + } }