mirror of
https://github.com/overte-org/overte.git
synced 2025-04-20 01:24:03 +02:00
add support for tuning sorting
This commit is contained in:
parent
01fd0860bf
commit
05995163cf
5 changed files with 41 additions and 5 deletions
|
@ -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);
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -112,7 +112,8 @@ public:
|
|||
ReloadEntityServerScript,
|
||||
EntityPhysics,
|
||||
EntityServerScriptLog,
|
||||
LAST_PACKET_TYPE = EntityServerScriptLog
|
||||
AdjustAvatarSorting,
|
||||
LAST_PACKET_TYPE = AdjustAvatarSorting
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue