mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 14:29:03 +02:00
more work on element append tweaks
This commit is contained in:
parent
bc9d9d61ba
commit
66b0333dc9
3 changed files with 48 additions and 21 deletions
|
@ -132,7 +132,7 @@ void ModelItem::init(glm::vec3 position, float radius, rgbColor color, uint32_t
|
||||||
_lastAnimated = now;
|
_lastAnimated = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ModelItem::appendModelData(OctreePacketData* packetData) const {
|
OctreeElement::AppendState ModelItem::appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const {
|
||||||
|
|
||||||
bool success = packetData->appendValue(getID());
|
bool success = packetData->appendValue(getID());
|
||||||
|
|
||||||
|
@ -193,12 +193,10 @@ bool ModelItem::appendModelData(OctreePacketData* packetData) const {
|
||||||
success = packetData->appendValue(getAnimationFPS());
|
success = packetData->appendValue(getAnimationFPS());
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return success ? OctreeElement::COMPLETED : OctreeElement::NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const {
|
OctreeElement::AppendState ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const {
|
||||||
|
|
||||||
// bool headerFits = ...
|
|
||||||
|
|
||||||
// ALL this fits...
|
// ALL this fits...
|
||||||
// object ID [16 bytes]
|
// object ID [16 bytes]
|
||||||
|
@ -208,7 +206,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
// PropertyFlags<>( everything ) [1-2 bytes]
|
// PropertyFlags<>( everything ) [1-2 bytes]
|
||||||
// ~27-35 bytes...
|
// ~27-35 bytes...
|
||||||
|
|
||||||
bool success = false;
|
OctreeElement::AppendState appendState = OctreeElement::COMPLETED; // assume the best
|
||||||
|
|
||||||
quint64 updateDelta = getLastUpdated() <= getLastEdited() ? 0 : getLastUpdated() - getLastEdited();
|
quint64 updateDelta = getLastUpdated() <= getLastEdited() ? 0 : getLastUpdated() - getLastEdited();
|
||||||
ByteCountCoded<quint64> updateDeltaCoder = updateDelta;
|
ByteCountCoded<quint64> updateDeltaCoder = updateDelta;
|
||||||
|
@ -252,6 +250,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_RADIUS
|
// PROP_RADIUS
|
||||||
|
@ -263,6 +262,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_MODEL_URL
|
// PROP_MODEL_URL
|
||||||
|
@ -274,6 +274,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_ROTATION
|
// PROP_ROTATION
|
||||||
|
@ -285,6 +286,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_COLOR
|
// PROP_COLOR
|
||||||
|
@ -296,6 +298,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_SCRIPT
|
// PROP_SCRIPT
|
||||||
|
@ -310,6 +313,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_ANIMATION_FPS
|
// PROP_ANIMATION_FPS
|
||||||
|
@ -321,6 +325,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_ANIMATION_FRAME_INDEX
|
// PROP_ANIMATION_FRAME_INDEX
|
||||||
|
@ -332,6 +337,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_ANIMATION_PLAYING
|
// PROP_ANIMATION_PLAYING
|
||||||
|
@ -343,6 +349,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// PROP_SHOULD_BE_DELETED
|
// PROP_SHOULD_BE_DELETED
|
||||||
|
@ -354,6 +361,7 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
packetData->endLevel(propertyLevel);
|
packetData->endLevel(propertyLevel);
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(propertyLevel);
|
packetData->discardLevel(propertyLevel);
|
||||||
|
appendState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (propertyCount > 0) {
|
if (propertyCount > 0) {
|
||||||
|
@ -381,12 +389,12 @@ bool ModelItem::new___appendModelData(OctreePacketData* packetData, EncodeBitstr
|
||||||
}
|
}
|
||||||
|
|
||||||
packetData->endLevel(modelLevel);
|
packetData->endLevel(modelLevel);
|
||||||
success = true;
|
|
||||||
} else {
|
} else {
|
||||||
packetData->discardLevel(modelLevel);
|
packetData->discardLevel(modelLevel);
|
||||||
|
appendState = OctreeElement::NONE; // if we got here, then we didn't include the item
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return appendState;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ModelItem::expectedBytes() {
|
int ModelItem::expectedBytes() {
|
||||||
|
|
|
@ -282,10 +282,10 @@ public:
|
||||||
|
|
||||||
void setProperties(const ModelItemProperties& properties);
|
void setProperties(const ModelItemProperties& properties);
|
||||||
|
|
||||||
bool new___appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const;
|
OctreeElement::AppendState new___appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const;
|
||||||
int new___readModelDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args);
|
int new___readModelDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args);
|
||||||
|
|
||||||
bool appendModelData(OctreePacketData* packetData) const;
|
OctreeElement::AppendState appendModelData(OctreePacketData* packetData, EncodeBitstreamParams& params) const;
|
||||||
int readModelDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args);
|
int readModelDataFromBuffer(const unsigned char* data, int bytesLeftToRead, ReadBitstreamToTreeParams& args);
|
||||||
static int expectedBytes();
|
static int expectedBytes();
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,10 @@ ModelTreeElement* ModelTreeElement::addChildAtIndex(int index) {
|
||||||
// contents across multiple packets.
|
// contents across multiple packets.
|
||||||
OctreeElement::AppendState ModelTreeElement::appendElementData(OctreePacketData* packetData,
|
OctreeElement::AppendState ModelTreeElement::appendElementData(OctreePacketData* packetData,
|
||||||
EncodeBitstreamParams& params) const {
|
EncodeBitstreamParams& params) const {
|
||||||
bool success = true; // assume the best...
|
|
||||||
|
OctreeElement::AppendState appendElementState = OctreeElement::COMPLETED; // assume the best...
|
||||||
|
|
||||||
|
LevelDetails elementLevel = packetData->startLevel();
|
||||||
|
|
||||||
// write our models out... first determine which of the models are in view based on our params
|
// write our models out... first determine which of the models are in view based on our params
|
||||||
uint16_t numberOfModels = 0;
|
uint16_t numberOfModels = 0;
|
||||||
|
@ -79,33 +82,49 @@ OctreeElement::AppendState ModelTreeElement::appendElementData(OctreePacketData*
|
||||||
}
|
}
|
||||||
|
|
||||||
int numberOfModelsOffset = packetData->getUncompressedByteOffset();
|
int numberOfModelsOffset = packetData->getUncompressedByteOffset();
|
||||||
success = packetData->appendValue(numberOfModels);
|
bool successAppendModelCount = packetData->appendValue(numberOfModels);
|
||||||
|
|
||||||
if (success) {
|
if (successAppendModelCount) {
|
||||||
foreach (uint16_t i, indexesOfModelsToInclude) {
|
foreach (uint16_t i, indexesOfModelsToInclude) {
|
||||||
const ModelItem& model = (*_modelItems)[i];
|
const ModelItem& model = (*_modelItems)[i];
|
||||||
|
|
||||||
LevelDetails modelLevel = packetData->startLevel();
|
LevelDetails modelLevel = packetData->startLevel();
|
||||||
|
|
||||||
success = model.appendModelData(packetData);
|
OctreeElement::AppendState appendModelState = model.appendModelData(packetData, params);
|
||||||
|
|
||||||
if (success) {
|
// If none of this model data was able to be appended, then discard it
|
||||||
|
// and don't include it in our model count
|
||||||
|
if (appendModelState == OctreeElement::NONE) {
|
||||||
|
packetData->discardLevel(modelLevel);
|
||||||
|
} else {
|
||||||
|
// If either ALL or some of it got appended, then end the level (commit it)
|
||||||
|
// and include the model in our final count of models
|
||||||
packetData->endLevel(modelLevel);
|
packetData->endLevel(modelLevel);
|
||||||
actualNumberOfModels++;
|
actualNumberOfModels++;
|
||||||
}
|
}
|
||||||
if (!success) {
|
|
||||||
packetData->discardLevel(modelLevel);
|
// If any part of the model items didn't fit, then the element is considered partial
|
||||||
break;
|
if (appendModelState != OctreeElement::COMPLETED) {
|
||||||
|
appendElementState = OctreeElement::PARTIAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success) {
|
// If we wrote fewer models than we expected, update the number of models in our packet
|
||||||
success = packetData->updatePriorBytes(numberOfModelsOffset,
|
bool successUpdateModelCount = true;
|
||||||
|
if (numberOfModels != actualNumberOfModels) {
|
||||||
|
successUpdateModelCount = packetData->updatePriorBytes(numberOfModelsOffset,
|
||||||
(const unsigned char*)&actualNumberOfModels, sizeof(actualNumberOfModels));
|
(const unsigned char*)&actualNumberOfModels, sizeof(actualNumberOfModels));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!successUpdateModelCount) {
|
||||||
|
packetData->discardLevel(elementLevel);
|
||||||
|
appendElementState = OctreeElement::NONE;
|
||||||
|
} else {
|
||||||
|
packetData->endLevel(elementLevel);
|
||||||
|
}
|
||||||
|
|
||||||
return success ? OctreeElement::COMPLETED : OctreeElement::NONE;
|
return appendElementState;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ModelTreeElement::containsModelBounds(const ModelItem& model) const {
|
bool ModelTreeElement::containsModelBounds(const ModelItem& model) const {
|
||||||
|
|
Loading…
Reference in a new issue