Revert "avoid unnecessary copy of priority_queue"

This reverts commit e54812430e.
This commit is contained in:
Atlante45 2017-03-08 14:08:58 -08:00
parent 50288bd4ba
commit 97c376a09c
4 changed files with 20 additions and 19 deletions

View file

@ -185,8 +185,8 @@ void AvatarMixerSlave::broadcastAvatarData(const SharedNodePointer& node) {
AvatarSharedPointer thisAvatar = nodeData->getAvatarSharedPointer(); AvatarSharedPointer thisAvatar = nodeData->getAvatarSharedPointer();
ViewFrustum cameraView = nodeData->getViewFrustom(); ViewFrustum cameraView = nodeData->getViewFrustom();
std::priority_queue<AvatarPriority> sortedAvatars; std::priority_queue<AvatarPriority> sortedAvatars = AvatarData::sortAvatars(
AvatarData::sortAvatars(avatarList, cameraView, sortedAvatars, avatarList, cameraView,
[&](AvatarSharedPointer avatar)->uint64_t{ [&](AvatarSharedPointer avatar)->uint64_t{
auto avatarNode = avatarDataToNodes[avatar]; auto avatarNode = avatarDataToNodes[avatar];

View file

@ -164,8 +164,8 @@ void AvatarManager::updateOtherAvatars(float deltaTime) {
ViewFrustum cameraView; ViewFrustum cameraView;
qApp->copyDisplayViewFrustum(cameraView); qApp->copyDisplayViewFrustum(cameraView);
std::priority_queue<AvatarPriority> sortedAvatars; std::priority_queue<AvatarPriority> sortedAvatars = AvatarData::sortAvatars(
AvatarData::sortAvatars(avatarList, cameraView, sortedAvatars, avatarList, cameraView,
[](AvatarSharedPointer avatar)->uint64_t{ [](AvatarSharedPointer avatar)->uint64_t{
return std::static_pointer_cast<Avatar>(avatar)->getLastRenderUpdateTime(); return std::static_pointer_cast<Avatar>(avatar)->getLastRenderUpdateTime();

View file

@ -2324,20 +2324,20 @@ float AvatarData::_avatarSortCoefficientSize { 0.5f };
float AvatarData::_avatarSortCoefficientCenter { 0.25 }; float AvatarData::_avatarSortCoefficientCenter { 0.25 };
float AvatarData::_avatarSortCoefficientAge { 1.0f }; float AvatarData::_avatarSortCoefficientAge { 1.0f };
void AvatarData::sortAvatars( std::priority_queue<AvatarPriority> AvatarData::sortAvatars(
QList<AvatarSharedPointer> avatarList, QList<AvatarSharedPointer> avatarList,
const ViewFrustum& cameraView, const ViewFrustum& cameraView,
std::priority_queue<AvatarPriority>& sortedAvatarsOut, std::function<uint64_t(AvatarSharedPointer)> getLastUpdated,
std::function<uint64_t(AvatarSharedPointer)> getLastUpdated, std::function<float(AvatarSharedPointer)> getBoundingRadius,
std::function<float(AvatarSharedPointer)> getBoundingRadius, std::function<bool(AvatarSharedPointer)> shouldIgnore) {
std::function<bool(AvatarSharedPointer)> shouldIgnore) {
uint64_t startTime = usecTimestampNow();
glm::vec3 frustumCenter = cameraView.getPosition();
std::priority_queue<AvatarPriority> sortedAvatars;
{ {
PROFILE_RANGE(simulation, "sort"); PROFILE_RANGE(simulation, "sort");
uint64_t now = usecTimestampNow();
glm::vec3 frustumCenter = cameraView.getPosition();
const glm::vec3& forward = cameraView.getDirection();
for (int32_t i = 0; i < avatarList.size(); ++i) { for (int32_t i = 0; i < avatarList.size(); ++i) {
const auto& avatar = avatarList.at(i); const auto& avatar = avatarList.at(i);
@ -2356,9 +2356,10 @@ void AvatarData::sortAvatars(
// FIXME - AvatarData has something equivolent to this // FIXME - AvatarData has something equivolent to this
float radius = getBoundingRadius(avatar); float radius = getBoundingRadius(avatar);
const glm::vec3& forward = cameraView.getDirection();
float apparentSize = 2.0f * radius / distance; float apparentSize = 2.0f * radius / distance;
float cosineAngle = glm::dot(offset, forward) / distance; float cosineAngle = glm::dot(offset, forward) / distance;
float age = (float)(now - getLastUpdated(avatar)) / (float)(USECS_PER_SECOND); float age = (float)(startTime - getLastUpdated(avatar)) / (float)(USECS_PER_SECOND);
// NOTE: we are adding values of different units to get a single measure of "priority". // NOTE: we are adding values of different units to get a single measure of "priority".
// Thus we multiply each component by a conversion "weight" that scales its units relative to the others. // Thus we multiply each component by a conversion "weight" that scales its units relative to the others.
@ -2374,9 +2375,10 @@ void AvatarData::sortAvatars(
priority += OUT_OF_VIEW_PENALTY; priority += OUT_OF_VIEW_PENALTY;
} }
} }
sortedAvatarsOut.push(AvatarPriority(avatar, priority)); sortedAvatars.push(AvatarPriority(avatar, priority));
} }
} }
return sortedAvatars;
} }
QScriptValue AvatarEntityMapToScriptValue(QScriptEngine* engine, const AvatarEntityMap& value) { QScriptValue AvatarEntityMapToScriptValue(QScriptEngine* engine, const AvatarEntityMap& value) {

View file

@ -597,10 +597,9 @@ public:
static const float OUT_OF_VIEW_PENALTY; static const float OUT_OF_VIEW_PENALTY;
static void sortAvatars( static std::priority_queue<AvatarPriority> sortAvatars(
QList<AvatarSharedPointer> avatarList, QList<AvatarSharedPointer> avatarList,
const ViewFrustum& cameraView, const ViewFrustum& cameraView,
std::priority_queue<AvatarPriority>& sortedAvatarsOut,
std::function<uint64_t(AvatarSharedPointer)> getLastUpdated, std::function<uint64_t(AvatarSharedPointer)> getLastUpdated,
std::function<float(AvatarSharedPointer)> getBoundingRadius, std::function<float(AvatarSharedPointer)> getBoundingRadius,
std::function<bool(AvatarSharedPointer)> shouldIgnore); std::function<bool(AvatarSharedPointer)> shouldIgnore);