From 7136698c6bf0ae1b0dc2379518c0bf5fc0267633 Mon Sep 17 00:00:00 2001 From: Simon Walton Date: Wed, 12 Sep 2018 10:49:26 -0700 Subject: [PATCH] Move default pose flags out of joint-positions condition --- libraries/avatars/src/AvatarData.cpp | 47 ++++++++++++++-------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index cd1567af4d..5be6631c59 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -548,13 +548,15 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent } } + QVector jointData; + if (hasJointData || hasJointDefaultPoseFlags) { + QReadLocker readLock(&_jointDataLock); + jointData = _jointData; + } + // If it is connected, pack up the data if (hasJointData) { auto startSection = destinationBuffer; - QReadLocker readLock(&_jointDataLock); - - const QVector jointData(_jointData); - readLock.unlock(); // Unlock quickly. // joint rotation data int numJoints = jointData.size(); @@ -736,30 +738,29 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent outboundDataRateOut->jointDataRate.increment(numBytes); } - // Always true, currently: - if (hasJointDefaultPoseFlags) { - auto startSection = destinationBuffer; + } - // write numJoints - int numJoints = jointData.size(); - *destinationBuffer++ = (uint8_t)numJoints; + if (hasJointDefaultPoseFlags) { + auto startSection = destinationBuffer; - // write rotationIsDefaultPose bits - destinationBuffer += writeBitVector(destinationBuffer, numJoints, [&](int i) { - return jointData[i].rotationIsDefaultPose; - }); + // write numJoints + int numJoints = jointData.size(); + *destinationBuffer++ = (uint8_t)numJoints; - // write translationIsDefaultPose bits - destinationBuffer += writeBitVector(destinationBuffer, numJoints, [&](int i) { - return jointData[i].translationIsDefaultPose; - }); + // write rotationIsDefaultPose bits + destinationBuffer += writeBitVector(destinationBuffer, numJoints, [&](int i) { + return jointData[i].rotationIsDefaultPose; + }); - if (outboundDataRateOut) { - size_t numBytes = destinationBuffer - startSection; - outboundDataRateOut->jointDefaultPoseFlagsRate.increment(numBytes); - } + // write translationIsDefaultPose bits + destinationBuffer += writeBitVector(destinationBuffer, numJoints, [&](int i) { + return jointData[i].translationIsDefaultPose; + }); + + if (outboundDataRateOut) { + size_t numBytes = destinationBuffer - startSection; + outboundDataRateOut->jointDefaultPoseFlagsRate.increment(numBytes); } - } int avatarDataSize = destinationBuffer - startPosition;