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:
Andrzej Kapolka 2014-06-30 12:35:34 -07:00
parent 9e61b5e45f
commit 73a1e759a4
2 changed files with 13 additions and 3 deletions

View file

@ -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;

View file

@ -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) {