mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 16:18:03 +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();
|
*this << object->getOriginID();
|
||||||
QPointer<SharedObject> reference = _sharedObjectReferences.value(object->getOriginID());
|
QPointer<SharedObject> reference = _sharedObjectReferences.value(object->getOriginID());
|
||||||
if (reference) {
|
if (reference) {
|
||||||
|
*this << true;
|
||||||
writeRawDelta((const QObject*)object.data(), (const QObject*)reference.data());
|
writeRawDelta((const QObject*)object.data(), (const QObject*)reference.data());
|
||||||
} else {
|
} else {
|
||||||
|
*this << false;
|
||||||
*this << (QObject*)object.data();
|
*this << (QObject*)object.data();
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
|
@ -1430,19 +1432,27 @@ Bitstream& Bitstream::operator>(SharedObjectPointer& object) {
|
||||||
}
|
}
|
||||||
int originID;
|
int originID;
|
||||||
*this >> originID;
|
*this >> originID;
|
||||||
|
bool delta;
|
||||||
|
*this >> delta;
|
||||||
QPointer<SharedObject> reference = _sharedObjectReferences.value(originID);
|
QPointer<SharedObject> reference = _sharedObjectReferences.value(originID);
|
||||||
QPointer<SharedObject>& pointer = _weakSharedObjectHash[id];
|
QPointer<SharedObject>& pointer = _weakSharedObjectHash[id];
|
||||||
if (pointer) {
|
if (pointer) {
|
||||||
ObjectStreamerPointer objectStreamer;
|
ObjectStreamerPointer objectStreamer;
|
||||||
_objectStreamerStreamer >> objectStreamer;
|
_objectStreamerStreamer >> objectStreamer;
|
||||||
if (reference) {
|
if (delta) {
|
||||||
|
if (!reference) {
|
||||||
|
qWarning() << "Delta without reference" << id << originID;
|
||||||
|
}
|
||||||
objectStreamer->readRawDelta(*this, reference.data(), pointer.data());
|
objectStreamer->readRawDelta(*this, reference.data(), pointer.data());
|
||||||
} else {
|
} else {
|
||||||
objectStreamer->read(*this, pointer.data());
|
objectStreamer->read(*this, pointer.data());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QObject* rawObject;
|
QObject* rawObject;
|
||||||
if (reference) {
|
if (delta) {
|
||||||
|
if (!reference) {
|
||||||
|
qWarning() << "Delta without reference" << id << originID;
|
||||||
|
}
|
||||||
readRawDelta(rawObject, (const QObject*)reference.data());
|
readRawDelta(rawObject, (const QObject*)reference.data());
|
||||||
} else {
|
} else {
|
||||||
*this >> rawObject;
|
*this >> rawObject;
|
||||||
|
|
|
@ -652,7 +652,7 @@ TestEndpoint::TestEndpoint(Mode mode) :
|
||||||
SLOT(handleHighPriorityMessage(const QVariant&)));
|
SLOT(handleHighPriorityMessage(const QVariant&)));
|
||||||
|
|
||||||
if (mode == METAVOXEL_CLIENT_MODE) {
|
if (mode == METAVOXEL_CLIENT_MODE) {
|
||||||
_lod = MetavoxelLOD(glm::vec3(), 0.001f);
|
_lod = MetavoxelLOD(glm::vec3(), 0.01f);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mode == METAVOXEL_SERVER_MODE) {
|
if (mode == METAVOXEL_SERVER_MODE) {
|
||||||
|
|
Loading…
Reference in a new issue