Send Entity Query via conical frustums

This commit is contained in:
Clement 2018-04-30 19:50:51 -07:00
parent e400eb4ed2
commit 67c119cd2e
6 changed files with 18 additions and 28 deletions

View file

@ -108,7 +108,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
DiffTraversal::View newView;
ViewFrustum viewFrustum;
ConicalViewFrustum viewFrustum;
if (nodeData->hasMainViewFrustum()) {
nodeData->copyCurrentMainViewFrustum(viewFrustum);
newView.viewFrustums.push_back(viewFrustum);

View file

@ -245,7 +245,8 @@ enum class EntityQueryPacketVersion: PacketVersion {
JSONFilterWithFamilyTree = 19,
ConnectionIdentifier = 20,
RemovedJurisdictions = 21,
MultiFrustumQuery = 22
MultiFrustumQuery = 22,
ConicalFrustums = 23
};
enum class AssetServerPacketVersion: PacketVersion {

View file

@ -50,15 +50,11 @@ int OctreeQuery::getBroadcastData(unsigned char* destinationBuffer) {
destinationBuffer += sizeof(frustumFlags);
if (_hasMainFrustum) {
auto byteArray = _mainViewFrustum.toByteArray();
memcpy(destinationBuffer, byteArray.constData(), byteArray.size());
destinationBuffer += byteArray.size();
destinationBuffer += _mainViewFrustum.serialize(destinationBuffer);
}
if (_hasSecondaryFrustum) {
auto byteArray = _secondaryViewFrustum.toByteArray();
memcpy(destinationBuffer, byteArray.constData(), byteArray.size());
destinationBuffer += byteArray.size();
destinationBuffer += _secondaryViewFrustum.serialize(destinationBuffer);
}
// desired Max Octree PPS
@ -131,15 +127,11 @@ int OctreeQuery::parseData(ReceivedMessage& message) {
_hasSecondaryFrustum = frustumFlags & QUERY_HAS_SECONDARY_FRUSTUM;
if (_hasMainFrustum) {
auto bytesLeft = endPosition - sourceBuffer;
auto byteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(sourceBuffer), bytesLeft);
sourceBuffer += _mainViewFrustum.fromByteArray(byteArray);
sourceBuffer += _mainViewFrustum.deserialize(sourceBuffer);
}
if (_hasSecondaryFrustum) {
auto bytesLeft = endPosition - sourceBuffer;
auto byteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(sourceBuffer), bytesLeft);
sourceBuffer += _secondaryViewFrustum.fromByteArray(byteArray);
sourceBuffer += _secondaryViewFrustum.deserialize(sourceBuffer);
}
// desired Max Octree PPS

View file

@ -16,8 +16,7 @@
#include <QtCore/QReadWriteLock>
#include <NodeData.h>
#include <ViewFrustum.h>
#include <shared/ConicalViewFrustum.h>
#include "OctreeConstants.h"
@ -37,12 +36,10 @@ public:
bool hasMainViewFrustum() const { return _hasMainFrustum; }
void setMainViewFrustum(const ViewFrustum& viewFrustum) { _hasMainFrustum = true; _mainViewFrustum = viewFrustum; }
void clearMainViewFrustum() { _hasMainFrustum = false; }
const ViewFrustum& getMainViewFrustum() const { return _mainViewFrustum; }
bool hasSecondaryViewFrustum() const { return _hasSecondaryFrustum; }
void setSecondaryViewFrustum(const ViewFrustum& viewFrustum) { _hasSecondaryFrustum = true; _secondaryViewFrustum = viewFrustum; }
void clearSecondaryViewFrustum() { _hasSecondaryFrustum = false; }
const ViewFrustum& getSecondaryViewFrustum() const { return _secondaryViewFrustum; }
// getters/setters for JSON filter
QJsonObject getJSONParameters() { QReadLocker locker { &_jsonParametersLock }; return _jsonParameters; }
@ -68,9 +65,9 @@ public slots:
protected:
bool _hasMainFrustum { false };
ViewFrustum _mainViewFrustum;
ConicalViewFrustum _mainViewFrustum;
bool _hasSecondaryFrustum { false };
ViewFrustum _secondaryViewFrustum;
ConicalViewFrustum _secondaryViewFrustum;
// octree server sending items
int _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS;

View file

@ -139,12 +139,12 @@ void OctreeQueryNode::writeToPacket(const unsigned char* buffer, unsigned int by
}
}
void OctreeQueryNode::copyCurrentMainViewFrustum(ViewFrustum& viewOut) const {
void OctreeQueryNode::copyCurrentMainViewFrustum(ConicalViewFrustum& viewOut) const {
QMutexLocker viewLocker(&_viewMutex);
viewOut = _currentMainViewFrustum;
}
void OctreeQueryNode::copyCurrentSecondaryViewFrustum(ViewFrustum& viewOut) const {
void OctreeQueryNode::copyCurrentSecondaryViewFrustum(ConicalViewFrustum& viewOut) const {
QMutexLocker viewLocker(&_viewMutex);
viewOut = _currentSecondaryViewFrustum;
}

View file

@ -14,14 +14,14 @@
#include <iostream>
#include <NodeData.h>
#include <qqueue.h>
#include "OctreeConstants.h"
#include "OctreeElementBag.h"
#include "OctreePacketData.h"
#include "OctreeQuery.h"
#include "OctreeSceneStats.h"
#include "SentPacketHistory.h"
#include <qqueue.h>
class OctreeSendThread;
class OctreeServer;
@ -49,8 +49,8 @@ public:
OctreeElementExtraEncodeData extraEncodeData;
void copyCurrentMainViewFrustum(ViewFrustum& viewOut) const;
void copyCurrentSecondaryViewFrustum(ViewFrustum& viewOut) const;
void copyCurrentMainViewFrustum(ConicalViewFrustum& viewOut) const;
void copyCurrentSecondaryViewFrustum(ConicalViewFrustum& viewOut) const;
// These are not classic setters because they are calculating and maintaining state
// which is set asynchronously through the network receive
@ -97,8 +97,8 @@ private:
quint64 _firstSuppressedPacket { usecTimestampNow() };
mutable QMutex _viewMutex { QMutex::Recursive };
ViewFrustum _currentMainViewFrustum;
ViewFrustum _currentSecondaryViewFrustum;
ConicalViewFrustum _currentMainViewFrustum;
ConicalViewFrustum _currentSecondaryViewFrustum;
bool _viewFrustumChanging { false };
bool _viewFrustumJustStoppedChanging { true };