From 17e6a04aa8d7b63cd6205221d6d29cfc1d4d73bb Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Tue, 29 Dec 2015 16:35:31 -0800 Subject: [PATCH] Renamed ThreadSafeValue to ThreadSafeValueCache Also bug fixes where I was incorrectly swapping left and right hands. --- interface/src/avatar/Avatar.cpp | 26 +++++++++---------- interface/src/avatar/Avatar.h | 10 +++---- ...readSafeValue.h => ThreadSafeValueCache.h} | 22 +++++++++------- 3 files changed, 31 insertions(+), 27 deletions(-) rename libraries/shared/src/{ThreadSafeValue.h => ThreadSafeValueCache.h} (60%) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e26499db71..cb956d917a 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -1130,22 +1130,22 @@ void Avatar::rebuildCollisionShape() { // thread-safe glm::vec3 Avatar::getLeftPalmPosition() { - return _leftPalmPosition.get(); + return _leftPalmPositionCache.get(); } // thread-safe glm::quat Avatar::getLeftPalmRotation() { - return _leftPalmRotation.get(); + return _leftPalmRotationCache.get(); } // thread-safe glm::vec3 Avatar::getRightPalmPosition() { - return _rightPalmPosition.get(); + return _rightPalmPositionCache.get(); } // thread-safe glm::quat Avatar::getRightPalmRotation() { - return _rightPalmRotation.get(); + return _rightPalmRotationCache.get(); } void Avatar::setPosition(const glm::vec3& position) { @@ -1163,7 +1163,7 @@ void Avatar::updatePalms() { // get palm rotations glm::quat leftPalmRotation, rightPalmRotation; getSkeletonModel().getJointRotationInWorldFrame(getSkeletonModel().getLeftHandJointIndex(), leftPalmRotation); - getSkeletonModel().getJointRotationInWorldFrame(getSkeletonModel().getLeftHandJointIndex(), rightPalmRotation); + getSkeletonModel().getJointRotationInWorldFrame(getSkeletonModel().getRightHandJointIndex(), rightPalmRotation); // get palm positions glm::vec3 leftPalmPosition, rightPalmPosition; @@ -1172,21 +1172,21 @@ void Avatar::updatePalms() { leftPalmPosition += HAND_TO_PALM_OFFSET * glm::inverse(leftPalmRotation); rightPalmPosition += HAND_TO_PALM_OFFSET * glm::inverse(rightPalmRotation); - // update thread-safe values - _leftPalmRotation.update([&](glm::quat& value, bool hasPending, const glm::quat& pendingValue) { + // update thread-safe cache values + _leftPalmRotationCache.update([&](glm::quat& value, bool hasPending, const glm::quat& pendingValue) { value = leftPalmRotation; return false; }); - _rightPalmRotation.update([&](glm::quat& value, bool hasPending, const glm::quat& pendingValue) { + _rightPalmRotationCache.update([&](glm::quat& value, bool hasPending, const glm::quat& pendingValue) { value = rightPalmRotation; return false; }); - _leftPalmPosition.update([&](glm::vec3& value, bool hasPending, const glm::vec3& pendingValue) { - value = rightPalmPosition; - return false; - }); - _rightPalmPosition.update([&](glm::vec3& value, bool hasPending, const glm::vec3& pendingValue) { + _leftPalmPositionCache.update([&](glm::vec3& value, bool hasPending, const glm::vec3& pendingValue) { value = leftPalmPosition; return false; }); + _rightPalmPositionCache.update([&](glm::vec3& value, bool hasPending, const glm::vec3& pendingValue) { + value = rightPalmPosition; + return false; + }); } diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 27bd6c9e24..815d9cb455 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -27,7 +27,7 @@ #include "SkeletonModel.h" #include "world.h" #include "Rig.h" -#include +#include namespace render { template <> const ItemKey payloadGetKey(const AvatarSharedPointer& avatar); @@ -230,10 +230,10 @@ protected: render::ItemID _renderItemID; - ThreadSafeValue _leftPalmPosition { glm::vec3() }; - ThreadSafeValue _leftPalmRotation { glm::quat() }; - ThreadSafeValue _rightPalmPosition { glm::vec3() }; - ThreadSafeValue _rightPalmRotation { glm::quat() }; + ThreadSafeValueCache _leftPalmPositionCache { glm::vec3() }; + ThreadSafeValueCache _leftPalmRotationCache { glm::quat() }; + ThreadSafeValueCache _rightPalmPositionCache { glm::vec3() }; + ThreadSafeValueCache _rightPalmRotationCache { glm::quat() }; private: bool _initialized; diff --git a/libraries/shared/src/ThreadSafeValue.h b/libraries/shared/src/ThreadSafeValueCache.h similarity index 60% rename from libraries/shared/src/ThreadSafeValue.h rename to libraries/shared/src/ThreadSafeValueCache.h index 3992cfd492..0e8be477b7 100644 --- a/libraries/shared/src/ThreadSafeValue.h +++ b/libraries/shared/src/ThreadSafeValueCache.h @@ -1,5 +1,5 @@ // -// ThreadSafeValue.h +// ThreadSafeValueCache.h // interface/src/avatar // // Copyright 2012 High Fidelity, Inc. @@ -8,15 +8,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#ifndef hifi_ThreadSafeValue_h -#define hifi_ThreadSafeValue_h +#ifndef hifi_ThreadSafeValueCache_h +#define hifi_ThreadSafeValueCache_h #include template -class ThreadSafeValue { +class ThreadSafeValueCache { public: - ThreadSafeValue(const T& v) : _value { v }, _pending { v }, _hasPending { false } {} + ThreadSafeValueCache(const T& v) : _value { v }, _pending { v }, _hasPending { false } {} template void update(const F& callback) { @@ -26,7 +26,11 @@ public: T get() const { std::lock_guard guard(_mutex); - return _value; + if (_hasPending) { + return _pending; + } else { + return _value; + } } void set(const T& v) { @@ -42,8 +46,8 @@ private: bool _hasPending; // no copies - ThreadSafeValue(const ThreadSafeValue&) = delete; - ThreadSafeValue& operator=(const ThreadSafeValue&) = delete; + ThreadSafeValueCache(const ThreadSafeValueCache&) = delete; + ThreadSafeValueCache& operator=(const ThreadSafeValueCache&) = delete; }; -#endif // #define hifi_ThreadSafeValue_h +#endif // #define hifi_ThreadSafeValueCache_h