mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-02 10:10:45 +02:00
more work on more entities in a cell
This commit is contained in:
parent
84ba810dc4
commit
f8f0da189f
5 changed files with 97 additions and 12 deletions
|
@ -411,6 +411,15 @@ int OctreeSendThread::packetDistributor(OctreeQueryNode* nodeData, bool viewFrus
|
||||||
bool lastNodeDidntFit = false; // assume each node fits
|
bool lastNodeDidntFit = false; // assume each node fits
|
||||||
if (!nodeData->elementBag.isEmpty()) {
|
if (!nodeData->elementBag.isEmpty()) {
|
||||||
OctreeElement* subTree = nodeData->elementBag.extract();
|
OctreeElement* subTree = nodeData->elementBag.extract();
|
||||||
|
|
||||||
|
qDebug() << "===============================================================";
|
||||||
|
if (subTree == _myServer->getOctree()->getRoot()) {
|
||||||
|
qDebug() << "OctreeSendThread::packetDistributor() subTree=ROOT";
|
||||||
|
} else {
|
||||||
|
qDebug() << "===============================================================";
|
||||||
|
qDebug() << "OctreeSendThread::packetDistributor() subTree=" << subTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* TODO: Looking for a way to prevent locking and encoding a tree that is not
|
/* TODO: Looking for a way to prevent locking and encoding a tree that is not
|
||||||
// going to result in any packets being sent...
|
// going to result in any packets being sent...
|
||||||
|
@ -474,12 +483,27 @@ qDebug() << " bytesWritten=" << bytesWritten;
|
||||||
// the packet and send it
|
// the packet and send it
|
||||||
completedScene = nodeData->elementBag.isEmpty();
|
completedScene = nodeData->elementBag.isEmpty();
|
||||||
|
|
||||||
|
|
||||||
|
qDebug() << "+++++++++++++++ lastNodeDidntFit logic +++++++++++++++";
|
||||||
|
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
|
qDebug() << " _packetData.getTargetSize()=" << _packetData.getTargetSize();
|
||||||
|
qDebug() << " MAX_OCTREE_PACKET_DATA_SIZE=" << MAX_OCTREE_PACKET_DATA_SIZE;
|
||||||
|
qDebug() << " _packetData.hasContent()=" << _packetData.hasContent();
|
||||||
|
qDebug() << " bytesWritten=" << bytesWritten;
|
||||||
|
if (params.stopReason == EncodeBitstreamParams::DIDNT_FIT) {
|
||||||
|
qDebug() << " params.stopReason == EncodeBitstreamParams::DIDNT_FIT";
|
||||||
|
} else {
|
||||||
|
qDebug() << " params.stopReason == ???";
|
||||||
|
params.displayStopReason();
|
||||||
|
}
|
||||||
|
|
||||||
// if we're trying to fill a full size packet, then we use this logic to determine if we have a DIDNT_FIT case.
|
// if we're trying to fill a full size packet, then we use this logic to determine if we have a DIDNT_FIT case.
|
||||||
if (_packetData.getTargetSize() == MAX_OCTREE_PACKET_DATA_SIZE) {
|
if (_packetData.getTargetSize() == MAX_OCTREE_PACKET_DATA_SIZE) {
|
||||||
if (_packetData.hasContent() && bytesWritten == 0 &&
|
if (_packetData.hasContent() && bytesWritten == 0 &&
|
||||||
params.stopReason == EncodeBitstreamParams::DIDNT_FIT) {
|
params.stopReason == EncodeBitstreamParams::DIDNT_FIT) {
|
||||||
lastNodeDidntFit = true;
|
lastNodeDidntFit = true;
|
||||||
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
|
qDebug() << " -- trying to fill a full size packet --";
|
||||||
qDebug() << " lastNodeDidntFit=true";
|
qDebug() << " lastNodeDidntFit=true";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -490,6 +514,7 @@ qDebug() << " lastNodeDidntFit=true";
|
||||||
if (bytesWritten == 0 && params.stopReason == EncodeBitstreamParams::DIDNT_FIT) {
|
if (bytesWritten == 0 && params.stopReason == EncodeBitstreamParams::DIDNT_FIT) {
|
||||||
lastNodeDidntFit = true;
|
lastNodeDidntFit = true;
|
||||||
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
|
qDebug() << " -- in compressed mode and we are trying to pack more --";
|
||||||
qDebug() << " lastNodeDidntFit=true";
|
qDebug() << " lastNodeDidntFit=true";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -500,6 +525,10 @@ qDebug() << " lastNodeDidntFit=true";
|
||||||
// If the bag was empty then we didn't even attempt to encode, and so we know the bytesWritten were 0
|
// If the bag was empty then we didn't even attempt to encode, and so we know the bytesWritten were 0
|
||||||
bytesWritten = 0;
|
bytesWritten = 0;
|
||||||
somethingToSend = false; // this will cause us to drop out of the loop...
|
somethingToSend = false; // this will cause us to drop out of the loop...
|
||||||
|
|
||||||
|
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
|
qDebug() << " -- If the bag was empty then we didn't even attempt to encode, and so we know the bytesWritten were 0 --";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the last node didn't fit, but we're in compressed mode, then we actually want to see if we can fit a
|
// If the last node didn't fit, but we're in compressed mode, then we actually want to see if we can fit a
|
||||||
|
@ -517,7 +546,7 @@ qDebug() << " lastNodeDidntFit=" << lastNodeDidntFit;
|
||||||
|
|
||||||
if (_packetData.hasContent()) {
|
if (_packetData.hasContent()) {
|
||||||
|
|
||||||
qDebug() << " _packetData.hasContent()=" << _packetData.hasContent();
|
//qDebug() << " _packetData.hasContent()=" << _packetData.hasContent();
|
||||||
|
|
||||||
quint64 compressAndWriteStart = usecTimestampNow();
|
quint64 compressAndWriteStart = usecTimestampNow();
|
||||||
|
|
||||||
|
@ -527,20 +556,21 @@ qDebug() << " _packetData.hasContent()=" << _packetData.hasContent();
|
||||||
unsigned int writtenSize = _packetData.getFinalizedSize()
|
unsigned int writtenSize = _packetData.getFinalizedSize()
|
||||||
+ (nodeData->getCurrentPacketIsCompressed() ? sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE) : 0);
|
+ (nodeData->getCurrentPacketIsCompressed() ? sizeof(OCTREE_PACKET_INTERNAL_SECTION_SIZE) : 0);
|
||||||
|
|
||||||
|
/*
|
||||||
qDebug() << " _packetData.getUncompressedSize()=" << _packetData.getUncompressedSize();
|
qDebug() << " _packetData.getUncompressedSize()=" << _packetData.getUncompressedSize();
|
||||||
qDebug() << " _packetData.getFinalizedSize()=" << _packetData.getFinalizedSize();
|
qDebug() << " _packetData.getFinalizedSize()=" << _packetData.getFinalizedSize();
|
||||||
qDebug() << " writtenSize=" << writtenSize;
|
qDebug() << " writtenSize=" << writtenSize;
|
||||||
qDebug() << " nodeData->getAvailable()=" << nodeData->getAvailable();
|
qDebug() << " nodeData->getAvailable()=" << nodeData->getAvailable();
|
||||||
|
*/
|
||||||
if (writtenSize > nodeData->getAvailable()) {
|
if (writtenSize > nodeData->getAvailable()) {
|
||||||
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
//qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
qDebug() << " calling handlePacketSend()...";
|
//qDebug() << " calling handlePacketSend()...";
|
||||||
packetsSentThisInterval += handlePacketSend(nodeData, trueBytesSent, truePacketsSent);
|
packetsSentThisInterval += handlePacketSend(nodeData, trueBytesSent, truePacketsSent);
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
//qDebug() << "OctreeSendThread::packetDistributor()... line:" << __LINE__;
|
||||||
qDebug() << " _packetData.getFinalizedSize()=" << _packetData.getFinalizedSize();
|
//qDebug() << " _packetData.getFinalizedSize()=" << _packetData.getFinalizedSize();
|
||||||
qDebug() << " called nodeData->writeToPacket(... _packetData.getFinalizedSize()... )";
|
//qDebug() << " called nodeData->writeToPacket(... _packetData.getFinalizedSize()... )";
|
||||||
|
|
||||||
nodeData->writeToPacket(_packetData.getFinalizedData(), _packetData.getFinalizedSize());
|
nodeData->writeToPacket(_packetData.getFinalizedData(), _packetData.getFinalizedSize());
|
||||||
extraPackingAttempts = 0;
|
extraPackingAttempts = 0;
|
||||||
|
|
|
@ -215,6 +215,12 @@ OctreeElement::AppendState EntityTreeElement::appendElementData(OctreePacketData
|
||||||
qDebug() << " something went wrong... discardLevel().... appendElementState = OctreeElement::NONE;";
|
qDebug() << " something went wrong... discardLevel().... appendElementState = OctreeElement::NONE;";
|
||||||
qDebug() << " successUpdateEntityCount=" << successUpdateEntityCount;
|
qDebug() << " successUpdateEntityCount=" << successUpdateEntityCount;
|
||||||
qDebug() << " noEntitiesFit=" << noEntitiesFit;
|
qDebug() << " noEntitiesFit=" << noEntitiesFit;
|
||||||
|
if (extraEncodeData) {
|
||||||
|
qDebug() << " do we still have extra data?? " << extraEncodeData->contains(this);
|
||||||
|
} else {
|
||||||
|
qDebug() << " what happened to extraEncodeData??";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
packetData->endLevel(elementLevel);
|
packetData->endLevel(elementLevel);
|
||||||
|
|
|
@ -1015,6 +1015,8 @@ int Octree::encodeTreeBitstream(OctreeElement* element,
|
||||||
if (params.includeColor && childBytesWritten == 2) {
|
if (params.includeColor && childBytesWritten == 2) {
|
||||||
childBytesWritten = 0;
|
childBytesWritten = 0;
|
||||||
//params.stopReason = EncodeBitstreamParams::UNKNOWN; // possibly should be DIDNT_FIT...
|
//params.stopReason = EncodeBitstreamParams::UNKNOWN; // possibly should be DIDNT_FIT...
|
||||||
|
|
||||||
|
qDebug() << "STOP REASON.... if (params.includeColor && childBytesWritten == 2)....";
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we wrote child bytes, then return our result of all bytes written
|
// if we wrote child bytes, then return our result of all bytes written
|
||||||
|
@ -1024,6 +1026,7 @@ int Octree::encodeTreeBitstream(OctreeElement* element,
|
||||||
// otherwise... if we didn't write any child bytes, then pretend like we also didn't write our octal code
|
// otherwise... if we didn't write any child bytes, then pretend like we also didn't write our octal code
|
||||||
bytesWritten = 0;
|
bytesWritten = 0;
|
||||||
//params.stopReason = EncodeBitstreamParams::DIDNT_FIT;
|
//params.stopReason = EncodeBitstreamParams::DIDNT_FIT;
|
||||||
|
qDebug() << "STOP REASON.... childBytesWritten == 0??????";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bytesWritten == 0) {
|
if (bytesWritten == 0) {
|
||||||
|
@ -1203,7 +1206,17 @@ int Octree::encodeTreeBitstreamRecursion(OctreeElement* element,
|
||||||
|
|
||||||
// Make our local buffer large enough to handle writing at this level in case we need to.
|
// Make our local buffer large enough to handle writing at this level in case we need to.
|
||||||
LevelDetails thisLevelKey = packetData->startLevel();
|
LevelDetails thisLevelKey = packetData->startLevel();
|
||||||
|
bool continueThisLevel = packetData->reserveBytes(sizeof(childrenDataBits)
|
||||||
|
+ sizeof(childrenExistInPacketBits)
|
||||||
|
+ sizeof(childrenExistInTreeBits));
|
||||||
|
|
||||||
|
// If we can't reserve our minimum bytes then we can discard this level and return as if none of this level fits
|
||||||
|
if (!continueThisLevel) {
|
||||||
|
packetData->discardLevel(thisLevelKey);
|
||||||
|
params.stopReason = EncodeBitstreamParams::DIDNT_FIT;
|
||||||
|
return bytesAtThisLevel;
|
||||||
|
}
|
||||||
|
|
||||||
int inViewCount = 0;
|
int inViewCount = 0;
|
||||||
int inViewNotLeafCount = 0;
|
int inViewNotLeafCount = 0;
|
||||||
int inViewWithColorCount = 0;
|
int inViewWithColorCount = 0;
|
||||||
|
@ -1386,7 +1399,7 @@ int Octree::encodeTreeBitstreamRecursion(OctreeElement* element,
|
||||||
// NOTE: the childrenDataBits is really more generically the childDataBits and it indicates
|
// NOTE: the childrenDataBits is really more generically the childDataBits and it indicates
|
||||||
// that there is an array of child element data included in this packet. We wil write this bit mask
|
// that there is an array of child element data included in this packet. We wil write this bit mask
|
||||||
// but we may come back later and update the bits that are actually included
|
// but we may come back later and update the bits that are actually included
|
||||||
bool continueThisLevel = true;
|
packetData->releaseReservedBytes(sizeof(childrenDataBits));
|
||||||
continueThisLevel = packetData->appendBitMask(childrenDataBits);
|
continueThisLevel = packetData->appendBitMask(childrenDataBits);
|
||||||
|
|
||||||
// we know the last thing we wrote to the packet was our childrenDataBits. Let's remember where that was!
|
// we know the last thing we wrote to the packet was our childrenDataBits. Let's remember where that was!
|
||||||
|
@ -1501,6 +1514,7 @@ qDebug() << " packetData->getUncompressedSize()=" << packetData->getUncompres
|
||||||
// if the caller wants to include childExistsBits, then include them even if not in view, put them before the
|
// if the caller wants to include childExistsBits, then include them even if not in view, put them before the
|
||||||
// childrenExistInPacketBits, so that the lower code can properly repair the packet exists bits
|
// childrenExistInPacketBits, so that the lower code can properly repair the packet exists bits
|
||||||
if (continueThisLevel && params.includeExistsBits) {
|
if (continueThisLevel && params.includeExistsBits) {
|
||||||
|
packetData->releaseReservedBytes(sizeof(childrenExistInTreeBits));
|
||||||
continueThisLevel = packetData->appendBitMask(childrenExistInTreeBits);
|
continueThisLevel = packetData->appendBitMask(childrenExistInTreeBits);
|
||||||
qDebug() << " packetData->appendBitMask() line:" << __LINE__;
|
qDebug() << " packetData->appendBitMask() line:" << __LINE__;
|
||||||
qDebug() << " continueThisLevel=" << continueThisLevel;
|
qDebug() << " continueThisLevel=" << continueThisLevel;
|
||||||
|
@ -1514,6 +1528,7 @@ qDebug() << " continueThisLevel=" << continueThisLevel;
|
||||||
|
|
||||||
// write the child exist bits
|
// write the child exist bits
|
||||||
if (continueThisLevel) {
|
if (continueThisLevel) {
|
||||||
|
packetData->releaseReservedBytes(sizeof(childrenExistInPacketBits));
|
||||||
continueThisLevel = packetData->appendBitMask(childrenExistInPacketBits);
|
continueThisLevel = packetData->appendBitMask(childrenExistInPacketBits);
|
||||||
qDebug() << " packetData->appendBitMask() line:" << __LINE__;
|
qDebug() << " packetData->appendBitMask() line:" << __LINE__;
|
||||||
qDebug() << " continueThisLevel=" << continueThisLevel;
|
qDebug() << " continueThisLevel=" << continueThisLevel;
|
||||||
|
|
|
@ -35,6 +35,7 @@ void OctreePacketData::changeSettings(bool enableCompression, unsigned int targe
|
||||||
void OctreePacketData::reset() {
|
void OctreePacketData::reset() {
|
||||||
_bytesInUse = 0;
|
_bytesInUse = 0;
|
||||||
_bytesAvailable = _targetSize;
|
_bytesAvailable = _targetSize;
|
||||||
|
_bytesReserved = 0;
|
||||||
_subTreeAt = 0;
|
_subTreeAt = 0;
|
||||||
_compressedBytes = 0;
|
_compressedBytes = 0;
|
||||||
_bytesInUseLastCheck = 0;
|
_bytesInUseLastCheck = 0;
|
||||||
|
@ -80,6 +81,13 @@ bool OctreePacketData::reserveBitMask() {
|
||||||
|
|
||||||
bool OctreePacketData::reserveBytes(int numberOfBytes) {
|
bool OctreePacketData::reserveBytes(int numberOfBytes) {
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
|
if (_bytesAvailable >= numberOfBytes) {
|
||||||
|
_bytesReserved += numberOfBytes;
|
||||||
|
_bytesAvailable -= numberOfBytes;
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,6 +97,13 @@ bool OctreePacketData::releaseReservedBitMask() {
|
||||||
|
|
||||||
bool OctreePacketData::releaseReservedBytes(int numberOfBytes) {
|
bool OctreePacketData::releaseReservedBytes(int numberOfBytes) {
|
||||||
bool success = false;
|
bool success = false;
|
||||||
|
|
||||||
|
if (_bytesReserved >= numberOfBytes) {
|
||||||
|
_bytesReserved -= numberOfBytes;
|
||||||
|
_bytesAvailable += numberOfBytes;
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,6 +144,7 @@ bool OctreePacketData::startSubTree(const unsigned char* octcode) {
|
||||||
}
|
}
|
||||||
if (success) {
|
if (success) {
|
||||||
_subTreeAt = possibleStartAt;
|
_subTreeAt = possibleStartAt;
|
||||||
|
_subTreeBytesReserved = _bytesReserved;
|
||||||
}
|
}
|
||||||
if (success) {
|
if (success) {
|
||||||
_bytesOfOctalCodes += length;
|
_bytesOfOctalCodes += length;
|
||||||
|
@ -182,10 +198,13 @@ void OctreePacketData::discardSubTree() {
|
||||||
int reduceBytesOfOctalCodes = _bytesOfOctalCodes - _bytesOfOctalCodesCurrentSubTree;
|
int reduceBytesOfOctalCodes = _bytesOfOctalCodes - _bytesOfOctalCodesCurrentSubTree;
|
||||||
_bytesOfOctalCodes = _bytesOfOctalCodesCurrentSubTree;
|
_bytesOfOctalCodes = _bytesOfOctalCodesCurrentSubTree;
|
||||||
_totalBytesOfOctalCodes -= reduceBytesOfOctalCodes;
|
_totalBytesOfOctalCodes -= reduceBytesOfOctalCodes;
|
||||||
|
|
||||||
|
// if we discard the subtree then reset reserved bytes to the value when we started the subtree
|
||||||
|
_bytesReserved = _subTreeBytesReserved;
|
||||||
}
|
}
|
||||||
|
|
||||||
LevelDetails OctreePacketData::startLevel() {
|
LevelDetails OctreePacketData::startLevel() {
|
||||||
LevelDetails key(_bytesInUse, _bytesOfOctalCodes, _bytesOfBitMasks, _bytesOfColor);
|
LevelDetails key(_bytesInUse, _bytesOfOctalCodes, _bytesOfBitMasks, _bytesOfColor, _bytesReserved);
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,6 +232,9 @@ void OctreePacketData::discardLevel(LevelDetails key) {
|
||||||
_bytesInUse -= bytesInLevel;
|
_bytesInUse -= bytesInLevel;
|
||||||
_bytesAvailable += bytesInLevel;
|
_bytesAvailable += bytesInLevel;
|
||||||
_dirty = true;
|
_dirty = true;
|
||||||
|
|
||||||
|
// reserved bytes are reset to the value when the level started
|
||||||
|
_bytesReserved = key._bytesReservedAtStart;
|
||||||
|
|
||||||
if (_debug) {
|
if (_debug) {
|
||||||
qDebug("discardLevel() AFTER _dirty=%s bytesInLevel=%d _compressedBytes=%d _bytesInUse=%d",
|
qDebug("discardLevel() AFTER _dirty=%s bytesInLevel=%d _compressedBytes=%d _bytesInUse=%d",
|
||||||
|
@ -222,6 +244,14 @@ void OctreePacketData::discardLevel(LevelDetails key) {
|
||||||
|
|
||||||
bool OctreePacketData::endLevel(LevelDetails key) {
|
bool OctreePacketData::endLevel(LevelDetails key) {
|
||||||
bool success = true;
|
bool success = true;
|
||||||
|
|
||||||
|
// reserved bytes should be the same value as when the level started
|
||||||
|
if (_bytesReserved != key._bytesReservedAtStart) {
|
||||||
|
qDebug() << "WARNING: endLevel() called but some reserved bytes not used.";
|
||||||
|
qDebug() << " current bytesReserved:" << _bytesReserved;
|
||||||
|
qDebug() << " start level bytesReserved:" << key._bytesReservedAtStart;
|
||||||
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,11 +53,12 @@ const int PACKET_IS_COMPRESSED_BIT = 1;
|
||||||
|
|
||||||
/// An opaque key used when starting, ending, and discarding encoding/packing levels of OctreePacketData
|
/// An opaque key used when starting, ending, and discarding encoding/packing levels of OctreePacketData
|
||||||
class LevelDetails {
|
class LevelDetails {
|
||||||
LevelDetails(int startIndex, int bytesOfOctalCodes, int bytesOfBitmasks, int bytesOfColor) :
|
LevelDetails(int startIndex, int bytesOfOctalCodes, int bytesOfBitmasks, int bytesOfColor, int bytesReservedAtStart) :
|
||||||
_startIndex(startIndex),
|
_startIndex(startIndex),
|
||||||
_bytesOfOctalCodes(bytesOfOctalCodes),
|
_bytesOfOctalCodes(bytesOfOctalCodes),
|
||||||
_bytesOfBitmasks(bytesOfBitmasks),
|
_bytesOfBitmasks(bytesOfBitmasks),
|
||||||
_bytesOfColor(bytesOfColor) {
|
_bytesOfColor(bytesOfColor),
|
||||||
|
_bytesReservedAtStart(bytesReservedAtStart) {
|
||||||
}
|
}
|
||||||
|
|
||||||
friend class OctreePacketData;
|
friend class OctreePacketData;
|
||||||
|
@ -67,6 +68,7 @@ private:
|
||||||
int _bytesOfOctalCodes;
|
int _bytesOfOctalCodes;
|
||||||
int _bytesOfBitmasks;
|
int _bytesOfBitmasks;
|
||||||
int _bytesOfColor;
|
int _bytesOfColor;
|
||||||
|
int _bytesReservedAtStart;
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Handles packing of the data portion of PacketType_OCTREE_DATA messages.
|
/// Handles packing of the data portion of PacketType_OCTREE_DATA messages.
|
||||||
|
@ -116,7 +118,7 @@ public:
|
||||||
bool reserveBytes(int numberOfBytes);
|
bool reserveBytes(int numberOfBytes);
|
||||||
|
|
||||||
/// releases previously reserved space in the stream.
|
/// releases previously reserved space in the stream.
|
||||||
bool releaseReserveBitMask();
|
bool releaseReservedBitMask();
|
||||||
|
|
||||||
/// releases previously reserved space in the stream.
|
/// releases previously reserved space in the stream.
|
||||||
bool releaseReservedBytes(int numberOfBytes);
|
bool releaseReservedBytes(int numberOfBytes);
|
||||||
|
@ -226,6 +228,8 @@ private:
|
||||||
int _bytesInUse;
|
int _bytesInUse;
|
||||||
int _bytesAvailable;
|
int _bytesAvailable;
|
||||||
int _subTreeAt;
|
int _subTreeAt;
|
||||||
|
int _bytesReserved;
|
||||||
|
int _subTreeBytesReserved; // the number of reserved bytes at start of a subtree
|
||||||
|
|
||||||
bool compressContent();
|
bool compressContent();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue