add support for tuning sorting

This commit is contained in:
Brad Hefta-Gaub 2017-02-22 09:49:47 -08:00
parent 01fd0860bf
commit 05995163cf
5 changed files with 41 additions and 5 deletions

View file

@ -47,7 +47,7 @@ AvatarMixer::AvatarMixer(ReceivedMessage& message) :
auto& packetReceiver = DependencyManager::get<NodeList>()->getPacketReceiver();
packetReceiver.registerListener(PacketType::AvatarData, this, "queueIncomingPacket");
packetReceiver.registerListener(PacketType::AdjustAvatarSorting, this, "handleAdjustAvatarSorting");
packetReceiver.registerListener(PacketType::ViewFrustum, this, "handleViewFrustumPacket");
packetReceiver.registerListener(PacketType::AvatarIdentity, this, "handleAvatarIdentityPacket");
packetReceiver.registerListener(PacketType::KillAvatar, this, "handleKillAvatarPacket");
@ -317,6 +317,24 @@ void AvatarMixer::nodeKilled(SharedNodePointer killedNode) {
}
}
void AvatarMixer::handleAdjustAvatarSorting(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
auto start = usecTimestampNow();
message->readPrimitive(&AvatarData::_avatarSortCoefficientSize);
message->readPrimitive(&AvatarData::_avatarSortCoefficientCenter);
message->readPrimitive(&AvatarData::_avatarSortCoefficientAge);
qCDebug(avatars) << "New avatar sorting... "
<< "size:" << AvatarData::_avatarSortCoefficientSize
<< "center:" << AvatarData::_avatarSortCoefficientCenter
<< "age:" << AvatarData::_avatarSortCoefficientAge;
auto end = usecTimestampNow();
_handleAdjustAvatarSortingElapsedTime += (end - start);
}
void AvatarMixer::handleViewFrustumPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode) {
auto start = usecTimestampNow();
getOrCreateClientData(senderNode);

View file

@ -39,6 +39,7 @@ public slots:
private slots:
void queueIncomingPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer node);
void handleAdjustAvatarSorting(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
void handleViewFrustumPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
void handleAvatarIdentityPacket(QSharedPointer<ReceivedMessage> message, SharedNodePointer senderNode);
void handleKillAvatarPacket(QSharedPointer<ReceivedMessage> message);
@ -92,6 +93,7 @@ private:
quint64 _broadcastAvatarDataNodeTransform { 0 };
quint64 _broadcastAvatarDataNodeFunctor { 0 };
quint64 _handleAdjustAvatarSortingElapsedTime { 0 };
quint64 _handleViewFrustumPacketElapsedTime { 0 };
quint64 _handleAvatarIdentityPacketElapsedTime { 0 };
quint64 _handleKillAvatarPacketElapsedTime { 0 };

View file

@ -572,14 +572,29 @@ float AvatarManager::getAvatarSortCoefficient(const QString& name) {
// HACK
void AvatarManager::setAvatarSortCoefficient(const QString& name, const QScriptValue& value) {
bool somethingChanged = false;
if (value.isNumber()) {
float numericalValue = (float)value.toNumber();
if (name == "size") {
AvatarData::_avatarSortCoefficientSize = numericalValue;
somethingChanged = true;
} else if (name == "center") {
AvatarData::_avatarSortCoefficientCenter = numericalValue;
somethingChanged = true;
} else if (name == "age") {
AvatarData::_avatarSortCoefficientAge = numericalValue;
somethingChanged = true;
}
}
if (somethingChanged) {
size_t packetSize = sizeof(AvatarData::_avatarSortCoefficientSize) +
sizeof(AvatarData::_avatarSortCoefficientCenter) +
sizeof(AvatarData::_avatarSortCoefficientAge);
auto packet = NLPacket::create(PacketType::AdjustAvatarSorting, packetSize);
packet->writePrimitive(AvatarData::_avatarSortCoefficientSize);
packet->writePrimitive(AvatarData::_avatarSortCoefficientCenter);
packet->writePrimitive(AvatarData::_avatarSortCoefficientAge);
DependencyManager::get<NodeList>()->broadcastToNodes(std::move(packet), NodeSet() << NodeType::AvatarMixer);
}
}

View file

@ -605,9 +605,9 @@ public:
// TODO: remove this HACK once we settle on optimal sort coefficients
// These coefficients exposed for fine tuning the sort priority for transfering new _jointData to the render pipeline.
static float _avatarSortCoefficientSize { 0.5f };
static float _avatarSortCoefficientCenter { 0.25 };
static float _avatarSortCoefficientAge { 1.0f };
static float _avatarSortCoefficientSize;
static float _avatarSortCoefficientCenter;
static float _avatarSortCoefficientAge;

View file

@ -112,7 +112,8 @@ public:
ReloadEntityServerScript,
EntityPhysics,
EntityServerScriptLog,
LAST_PACKET_TYPE = EntityServerScriptLog
AdjustAvatarSorting,
LAST_PACKET_TYPE = AdjustAvatarSorting
};
};