More work on subdivision.

This commit is contained in:
Andrzej Kapolka 2014-11-26 17:57:03 -08:00
parent 5710bfcf6c
commit 6be1810967
4 changed files with 47 additions and 0 deletions

View file

@ -147,6 +147,14 @@ void SharedObject::readExtraDelta(Bitstream& in, const SharedObject* reference)
// nothing by default
}
void SharedObject::writeExtraSubdivision(Bitstream& out) {
// nothing by default
}
void SharedObject::readExtraSubdivision(Bitstream& in) {
// nothing by default
}
QAtomicInt SharedObject::_nextID(1);
WeakSharedObjectHash SharedObject::_weakHash;
QReadWriteLock SharedObject::_weakHashLock;

View file

@ -92,6 +92,12 @@ public:
/// Reads the delta-encoded non-property contents of this object from the specified stream.
virtual void readExtraDelta(Bitstream& in, const SharedObject* reference);
/// Writes the subdivision of the non-property contents of this object to the specified stream.
virtual void writeExtraSubdivision(Bitstream& out);
/// Reads the subdivision of the non-property contents of this object from the specified stream.
virtual void readExtraSubdivision(Bitstream& in);
private:
int _id;

View file

@ -2731,6 +2731,37 @@ void Heightfield::readExtraDelta(Bitstream& in, const SharedObject* reference) {
}
}
void Heightfield::writeExtraSubdivision(Bitstream& out) {
MetavoxelLOD lod, referenceLOD;
if (out.getContext()) {
MetavoxelStreamBase* base = static_cast<MetavoxelStreamBase*>(out.getContext());
lod = transformLOD(base->lod);
referenceLOD = transformLOD(base->referenceLOD);
}
HeightfieldStreamBase base = { out, lod, referenceLOD };
HeightfieldStreamState state = { base, glm::vec2(), 1.0f };
if (state.becameSubdivided()) {
out << SharedObjectPointer(this);
_root->writeSubdivision(state);
}
}
void Heightfield::readExtraSubdivision(Bitstream& in) {
MetavoxelLOD lod, referenceLOD;
if (in.getContext()) {
MetavoxelStreamBase* base = static_cast<MetavoxelStreamBase*>(in.getContext());
lod = transformLOD(base->lod);
referenceLOD = transformLOD(base->referenceLOD);
}
HeightfieldStreamBase base = { in, lod, referenceLOD };
HeightfieldStreamState state = { base, glm::vec2(), 1.0f };
if (state.becameSubdividedOrCollapsed()) {
setRoot(HeightfieldNodePointer(_root->readSubdivision(state)));
}
}
QByteArray Heightfield::getRendererClassName() const {
return "HeightfieldRenderer";
}

View file

@ -592,6 +592,8 @@ public:
virtual void readExtra(Bitstream& in);
virtual void writeExtraDelta(Bitstream& out, const SharedObject* reference) const;
virtual void readExtraDelta(Bitstream& in, const SharedObject* reference);
virtual void writeExtraSubdivision(Bitstream& out);
virtual void readExtraSubdivision(Bitstream& in);
signals: