mirror of
https://github.com/overte-org/overte.git
synced 2025-04-15 17:20:12 +02:00
Include an additional bit with the objects that says whether what follows is
a delta. The clients may be retaining references to the objects, so we can't rely on their having been deleted.
This commit is contained in:
parent
9e61b5e45f
commit
73a1e759a4
2 changed files with 13 additions and 3 deletions
|
@ -1414,8 +1414,10 @@ Bitstream& Bitstream::operator<(const SharedObjectPointer& object) {
|
|||
*this << object->getOriginID();
|
||||
QPointer<SharedObject> reference = _sharedObjectReferences.value(object->getOriginID());
|
||||
if (reference) {
|
||||
*this << true;
|
||||
writeRawDelta((const QObject*)object.data(), (const QObject*)reference.data());
|
||||
} else {
|
||||
*this << false;
|
||||
*this << (QObject*)object.data();
|
||||
}
|
||||
return *this;
|
||||
|
@ -1430,19 +1432,27 @@ Bitstream& Bitstream::operator>(SharedObjectPointer& object) {
|
|||
}
|
||||
int originID;
|
||||
*this >> originID;
|
||||
bool delta;
|
||||
*this >> delta;
|
||||
QPointer<SharedObject> reference = _sharedObjectReferences.value(originID);
|
||||
QPointer<SharedObject>& pointer = _weakSharedObjectHash[id];
|
||||
if (pointer) {
|
||||
ObjectStreamerPointer objectStreamer;
|
||||
_objectStreamerStreamer >> objectStreamer;
|
||||
if (reference) {
|
||||
if (delta) {
|
||||
if (!reference) {
|
||||
qWarning() << "Delta without reference" << id << originID;
|
||||
}
|
||||
objectStreamer->readRawDelta(*this, reference.data(), pointer.data());
|
||||
} else {
|
||||
objectStreamer->read(*this, pointer.data());
|
||||
}
|
||||
} else {
|
||||
QObject* rawObject;
|
||||
if (reference) {
|
||||
if (delta) {
|
||||
if (!reference) {
|
||||
qWarning() << "Delta without reference" << id << originID;
|
||||
}
|
||||
readRawDelta(rawObject, (const QObject*)reference.data());
|
||||
} else {
|
||||
*this >> rawObject;
|
||||
|
|
|
@ -652,7 +652,7 @@ TestEndpoint::TestEndpoint(Mode mode) :
|
|||
SLOT(handleHighPriorityMessage(const QVariant&)));
|
||||
|
||||
if (mode == METAVOXEL_CLIENT_MODE) {
|
||||
_lod = MetavoxelLOD(glm::vec3(), 0.001f);
|
||||
_lod = MetavoxelLOD(glm::vec3(), 0.01f);
|
||||
return;
|
||||
}
|
||||
if (mode == METAVOXEL_SERVER_MODE) {
|
||||
|
|
Loading…
Reference in a new issue