force full scene send if json parameters changed

This commit is contained in:
Stephen Birarda 2017-01-24 16:34:57 -08:00
parent bd340f99ce
commit 33378ede5c
4 changed files with 24 additions and 5 deletions

View file

@ -316,8 +316,9 @@ int OctreeSendThread::packetDistributor(SharedNodePointer node, OctreeQueryNode*
int truePacketsSent = 0;
int trueBytesSent = 0;
int packetsSentThisInterval = 0;
bool isFullScene = nodeData->getUsesFrustum() &&
((!viewFrustumChanged && nodeData->getViewFrustumJustStoppedChanging()) || nodeData->hasLodChanged());
bool isFullScene = nodeData->haveJSONParametersChanged() ||
(nodeData->getUsesFrustum()
&& ((!viewFrustumChanged && nodeData->getViewFrustumJustStoppedChanging()) || nodeData->hasLodChanged()));
bool somethingToSend = true; // assume we have something

View file

@ -302,14 +302,15 @@ OctreeElement::AppendState EntityTreeElement::appendElementData(OctreePacketData
includeThisEntity = false;
}
if (!jsonFilters.isEmpty()) {
// if this entity has been updated since our last full send and there are json filters, check them
if (includeThisEntity && !jsonFilters.isEmpty()) {
// if params include JSON filters, check if this entity matches
bool entityMatchesFilters = entity->matchesJSONFilters(jsonFilters);
if (entityMatchesFilters) {
// we should include this entity unless it has already been excluded
includeThisEntity = includeThisEntity && true;
includeThisEntity = true;
// make sure this entity is in the set of entities sent last frame
entityNodeData->insertEntitySentLastFrame(entity->getID());
@ -317,7 +318,7 @@ OctreeElement::AppendState EntityTreeElement::appendElementData(OctreePacketData
} else {
// we might include this entity if it matched in the previous frame
if (entityNodeData->sentEntityLastFrame(entity->getID())) {
includeThisEntity = includeThisEntity && true;
includeThisEntity = true;
entityNodeData->removeEntitySentLastFrame(entity->getID());
} else {

View file

@ -320,3 +320,15 @@ void OctreeQueryNode::parseNackPacket(ReceivedMessage& message) {
_nackedSequenceNumbers.enqueue(sequenceNumber);
}
}
bool OctreeQueryNode::haveJSONParametersChanged() {
bool parametersChanged = false;
auto currentParameters = getJSONParameters();
if (_lastCheckJSONParameters != getJSONParameters()) {
parametersChanged = true;
_lastCheckJSONParameters = currentParameters;
}
return parametersChanged;
}

View file

@ -100,6 +100,9 @@ public:
bool hasNextNackedPacket() const;
const NLPacket* getNextNackedPacket();
// call only from OctreeSendThread for the given node
bool haveJSONParametersChanged();
private:
OctreeQueryNode(const OctreeQueryNode &);
OctreeQueryNode& operator= (const OctreeQueryNode&);
@ -143,6 +146,8 @@ private:
quint64 _sceneSendStartTime = 0;
std::array<char, udt::MAX_PACKET_SIZE> _lastOctreePayload;
QJsonObject _lastCheckJSONParameters;
};
#endif // hifi_OctreeQueryNode_h