mirror of
https://github.com/JulianGro/overte.git
synced 2025-05-07 13:00:23 +02:00
Send Entity Query via conical frustums
This commit is contained in:
parent
e400eb4ed2
commit
67c119cd2e
6 changed files with 18 additions and 28 deletions
|
@ -108,7 +108,7 @@ void EntityTreeSendThread::traverseTreeAndSendContents(SharedNodePointer node, O
|
||||||
|
|
||||||
DiffTraversal::View newView;
|
DiffTraversal::View newView;
|
||||||
|
|
||||||
ViewFrustum viewFrustum;
|
ConicalViewFrustum viewFrustum;
|
||||||
if (nodeData->hasMainViewFrustum()) {
|
if (nodeData->hasMainViewFrustum()) {
|
||||||
nodeData->copyCurrentMainViewFrustum(viewFrustum);
|
nodeData->copyCurrentMainViewFrustum(viewFrustum);
|
||||||
newView.viewFrustums.push_back(viewFrustum);
|
newView.viewFrustums.push_back(viewFrustum);
|
||||||
|
|
|
@ -245,7 +245,8 @@ enum class EntityQueryPacketVersion: PacketVersion {
|
||||||
JSONFilterWithFamilyTree = 19,
|
JSONFilterWithFamilyTree = 19,
|
||||||
ConnectionIdentifier = 20,
|
ConnectionIdentifier = 20,
|
||||||
RemovedJurisdictions = 21,
|
RemovedJurisdictions = 21,
|
||||||
MultiFrustumQuery = 22
|
MultiFrustumQuery = 22,
|
||||||
|
ConicalFrustums = 23
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class AssetServerPacketVersion: PacketVersion {
|
enum class AssetServerPacketVersion: PacketVersion {
|
||||||
|
|
|
@ -50,15 +50,11 @@ int OctreeQuery::getBroadcastData(unsigned char* destinationBuffer) {
|
||||||
destinationBuffer += sizeof(frustumFlags);
|
destinationBuffer += sizeof(frustumFlags);
|
||||||
|
|
||||||
if (_hasMainFrustum) {
|
if (_hasMainFrustum) {
|
||||||
auto byteArray = _mainViewFrustum.toByteArray();
|
destinationBuffer += _mainViewFrustum.serialize(destinationBuffer);
|
||||||
memcpy(destinationBuffer, byteArray.constData(), byteArray.size());
|
|
||||||
destinationBuffer += byteArray.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_hasSecondaryFrustum) {
|
if (_hasSecondaryFrustum) {
|
||||||
auto byteArray = _secondaryViewFrustum.toByteArray();
|
destinationBuffer += _secondaryViewFrustum.serialize(destinationBuffer);
|
||||||
memcpy(destinationBuffer, byteArray.constData(), byteArray.size());
|
|
||||||
destinationBuffer += byteArray.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// desired Max Octree PPS
|
// desired Max Octree PPS
|
||||||
|
@ -131,15 +127,11 @@ int OctreeQuery::parseData(ReceivedMessage& message) {
|
||||||
_hasSecondaryFrustum = frustumFlags & QUERY_HAS_SECONDARY_FRUSTUM;
|
_hasSecondaryFrustum = frustumFlags & QUERY_HAS_SECONDARY_FRUSTUM;
|
||||||
|
|
||||||
if (_hasMainFrustum) {
|
if (_hasMainFrustum) {
|
||||||
auto bytesLeft = endPosition - sourceBuffer;
|
sourceBuffer += _mainViewFrustum.deserialize(sourceBuffer);
|
||||||
auto byteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(sourceBuffer), bytesLeft);
|
|
||||||
sourceBuffer += _mainViewFrustum.fromByteArray(byteArray);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_hasSecondaryFrustum) {
|
if (_hasSecondaryFrustum) {
|
||||||
auto bytesLeft = endPosition - sourceBuffer;
|
sourceBuffer += _secondaryViewFrustum.deserialize(sourceBuffer);
|
||||||
auto byteArray = QByteArray::fromRawData(reinterpret_cast<const char*>(sourceBuffer), bytesLeft);
|
|
||||||
sourceBuffer += _secondaryViewFrustum.fromByteArray(byteArray);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// desired Max Octree PPS
|
// desired Max Octree PPS
|
||||||
|
|
|
@ -16,8 +16,7 @@
|
||||||
#include <QtCore/QReadWriteLock>
|
#include <QtCore/QReadWriteLock>
|
||||||
|
|
||||||
#include <NodeData.h>
|
#include <NodeData.h>
|
||||||
|
#include <shared/ConicalViewFrustum.h>
|
||||||
#include <ViewFrustum.h>
|
|
||||||
|
|
||||||
#include "OctreeConstants.h"
|
#include "OctreeConstants.h"
|
||||||
|
|
||||||
|
@ -37,12 +36,10 @@ public:
|
||||||
bool hasMainViewFrustum() const { return _hasMainFrustum; }
|
bool hasMainViewFrustum() const { return _hasMainFrustum; }
|
||||||
void setMainViewFrustum(const ViewFrustum& viewFrustum) { _hasMainFrustum = true; _mainViewFrustum = viewFrustum; }
|
void setMainViewFrustum(const ViewFrustum& viewFrustum) { _hasMainFrustum = true; _mainViewFrustum = viewFrustum; }
|
||||||
void clearMainViewFrustum() { _hasMainFrustum = false; }
|
void clearMainViewFrustum() { _hasMainFrustum = false; }
|
||||||
const ViewFrustum& getMainViewFrustum() const { return _mainViewFrustum; }
|
|
||||||
|
|
||||||
bool hasSecondaryViewFrustum() const { return _hasSecondaryFrustum; }
|
bool hasSecondaryViewFrustum() const { return _hasSecondaryFrustum; }
|
||||||
void setSecondaryViewFrustum(const ViewFrustum& viewFrustum) { _hasSecondaryFrustum = true; _secondaryViewFrustum = viewFrustum; }
|
void setSecondaryViewFrustum(const ViewFrustum& viewFrustum) { _hasSecondaryFrustum = true; _secondaryViewFrustum = viewFrustum; }
|
||||||
void clearSecondaryViewFrustum() { _hasSecondaryFrustum = false; }
|
void clearSecondaryViewFrustum() { _hasSecondaryFrustum = false; }
|
||||||
const ViewFrustum& getSecondaryViewFrustum() const { return _secondaryViewFrustum; }
|
|
||||||
|
|
||||||
// getters/setters for JSON filter
|
// getters/setters for JSON filter
|
||||||
QJsonObject getJSONParameters() { QReadLocker locker { &_jsonParametersLock }; return _jsonParameters; }
|
QJsonObject getJSONParameters() { QReadLocker locker { &_jsonParametersLock }; return _jsonParameters; }
|
||||||
|
@ -68,9 +65,9 @@ public slots:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool _hasMainFrustum { false };
|
bool _hasMainFrustum { false };
|
||||||
ViewFrustum _mainViewFrustum;
|
ConicalViewFrustum _mainViewFrustum;
|
||||||
bool _hasSecondaryFrustum { false };
|
bool _hasSecondaryFrustum { false };
|
||||||
ViewFrustum _secondaryViewFrustum;
|
ConicalViewFrustum _secondaryViewFrustum;
|
||||||
|
|
||||||
// octree server sending items
|
// octree server sending items
|
||||||
int _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS;
|
int _maxQueryPPS = DEFAULT_MAX_OCTREE_PPS;
|
||||||
|
|
|
@ -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);
|
QMutexLocker viewLocker(&_viewMutex);
|
||||||
viewOut = _currentMainViewFrustum;
|
viewOut = _currentMainViewFrustum;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OctreeQueryNode::copyCurrentSecondaryViewFrustum(ViewFrustum& viewOut) const {
|
void OctreeQueryNode::copyCurrentSecondaryViewFrustum(ConicalViewFrustum& viewOut) const {
|
||||||
QMutexLocker viewLocker(&_viewMutex);
|
QMutexLocker viewLocker(&_viewMutex);
|
||||||
viewOut = _currentSecondaryViewFrustum;
|
viewOut = _currentSecondaryViewFrustum;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,14 @@
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <NodeData.h>
|
#include <qqueue.h>
|
||||||
|
|
||||||
#include "OctreeConstants.h"
|
#include "OctreeConstants.h"
|
||||||
#include "OctreeElementBag.h"
|
#include "OctreeElementBag.h"
|
||||||
#include "OctreePacketData.h"
|
#include "OctreePacketData.h"
|
||||||
#include "OctreeQuery.h"
|
#include "OctreeQuery.h"
|
||||||
#include "OctreeSceneStats.h"
|
#include "OctreeSceneStats.h"
|
||||||
#include "SentPacketHistory.h"
|
#include "SentPacketHistory.h"
|
||||||
#include <qqueue.h>
|
|
||||||
|
|
||||||
class OctreeSendThread;
|
class OctreeSendThread;
|
||||||
class OctreeServer;
|
class OctreeServer;
|
||||||
|
@ -49,8 +49,8 @@ public:
|
||||||
|
|
||||||
OctreeElementExtraEncodeData extraEncodeData;
|
OctreeElementExtraEncodeData extraEncodeData;
|
||||||
|
|
||||||
void copyCurrentMainViewFrustum(ViewFrustum& viewOut) const;
|
void copyCurrentMainViewFrustum(ConicalViewFrustum& viewOut) const;
|
||||||
void copyCurrentSecondaryViewFrustum(ViewFrustum& viewOut) const;
|
void copyCurrentSecondaryViewFrustum(ConicalViewFrustum& viewOut) const;
|
||||||
|
|
||||||
// These are not classic setters because they are calculating and maintaining state
|
// These are not classic setters because they are calculating and maintaining state
|
||||||
// which is set asynchronously through the network receive
|
// which is set asynchronously through the network receive
|
||||||
|
@ -97,8 +97,8 @@ private:
|
||||||
quint64 _firstSuppressedPacket { usecTimestampNow() };
|
quint64 _firstSuppressedPacket { usecTimestampNow() };
|
||||||
|
|
||||||
mutable QMutex _viewMutex { QMutex::Recursive };
|
mutable QMutex _viewMutex { QMutex::Recursive };
|
||||||
ViewFrustum _currentMainViewFrustum;
|
ConicalViewFrustum _currentMainViewFrustum;
|
||||||
ViewFrustum _currentSecondaryViewFrustum;
|
ConicalViewFrustum _currentSecondaryViewFrustum;
|
||||||
bool _viewFrustumChanging { false };
|
bool _viewFrustumChanging { false };
|
||||||
bool _viewFrustumJustStoppedChanging { true };
|
bool _viewFrustumJustStoppedChanging { true };
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue