From aa6eedf0fed7dcc59d1b8fd736578c49e47cd33f Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Tue, 21 Jul 2020 12:06:38 -0700 Subject: [PATCH] make sure render with zones works on models on restart/reload --- .../src/RenderableModelEntityItem.cpp | 2 +- libraries/render-utils/src/Model.cpp | 26 ++++++++++--------- libraries/render-utils/src/Model.h | 2 ++ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp index fb2cf01580..eb7856b7ed 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.cpp @@ -1337,7 +1337,7 @@ void ModelEntityRenderer::doRenderUpdateSynchronousTyped(const ScenePointer& sce _model->setCullWithParent(_cullWithParent); _model->setRenderWithZones(_renderWithZones); emit requestRenderUpdate(); - if(didVisualGeometryRequestSucceed) { + if (didVisualGeometryRequestSucceed) { emit DependencyManager::get()-> modelAddedToScene(entity->getEntityItemID(), NestableType::Entity, _model); } diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index 3776c4e199..6150097f14 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -226,6 +226,7 @@ void Model::updateRenderItems() { modelTransform.setScale(glm::vec3(1.0f)); PrimitiveMode primitiveMode = self->getPrimitiveMode(); + auto renderWithZones = self->getRenderWithZones(); auto renderItemKeyGlobalFlags = self->getRenderItemKeyGlobalFlags(); bool cauterized = self->isCauterized(); @@ -241,7 +242,8 @@ void Model::updateRenderItems() { bool useDualQuaternionSkinning = self->getUseDualQuaternionSkinning(); transaction.updateItem(itemID, [modelTransform, meshState, useDualQuaternionSkinning, - invalidatePayloadShapeKey, primitiveMode, renderItemKeyGlobalFlags, cauterized](ModelMeshPartPayload& data) { + invalidatePayloadShapeKey, primitiveMode, renderItemKeyGlobalFlags, + cauterized, renderWithZones](ModelMeshPartPayload& data) { if (useDualQuaternionSkinning) { data.updateClusterBuffer(meshState.clusterDualQuaternions); data.computeAdjustedLocalBound(meshState.clusterDualQuaternions); @@ -268,6 +270,7 @@ void Model::updateRenderItems() { data.updateTransformForSkinnedMesh(renderTransform, modelTransform); data.setCauterized(cauterized); + data.setRenderWithZones(renderWithZones); data.updateKey(renderItemKeyGlobalFlags); data.setShapeKey(invalidatePayloadShapeKey, primitiveMode, useDualQuaternionSkinning); }); @@ -282,11 +285,6 @@ void Model::setRenderItemsNeedUpdate() { emit requestRenderUpdate(); } -void Model::setPrimitiveMode(PrimitiveMode primitiveMode) { - _primitiveMode = primitiveMode; - setRenderItemsNeedUpdate(); -} - void Model::reset() { if (isLoaded()) { const HFMModel& hfmModel = getHFMModel(); @@ -960,6 +958,13 @@ void Model::setCauterized(bool cauterized, const render::ScenePointer& scene) { } } +void Model::setPrimitiveMode(PrimitiveMode primitiveMode) { + if (_primitiveMode != primitiveMode) { + _primitiveMode = primitiveMode; + setRenderItemsNeedUpdate(); + } +} + void Model::setCullWithParent(bool cullWithParent) { if (_cullWithParent != cullWithParent) { _cullWithParent = cullWithParent; @@ -977,13 +982,10 @@ void Model::setCullWithParent(bool cullWithParent) { } void Model::setRenderWithZones(const QVector& renderWithZones) { - render::Transaction transaction; - for (auto item : _modelMeshRenderItemIDs) { - transaction.updateItem(item, [renderWithZones](ModelMeshPartPayload& data) { - data.setRenderWithZones(renderWithZones); - }); + if (_renderWithZones != renderWithZones) { + _renderWithZones = renderWithZones; + setRenderItemsNeedUpdate(); } - AbstractViewStateInterface::instance()->getMain3DScene()->enqueueTransaction(transaction); } const render::ItemKey Model::getRenderItemKeyGlobalFlags() const { diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index bdb4a35071..412a1b7638 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -121,6 +121,7 @@ public: void setCullWithParent(bool value); void setRenderWithZones(const QVector& renderWithZones); + const QVector& getRenderWithZones() const { return _renderWithZones; } // Access the current RenderItemKey Global Flags used by the model and applied to the render items representing the parts of the model. const render::ItemKey getRenderItemKeyGlobalFlags() const; @@ -499,6 +500,7 @@ protected: render::ItemKey _renderItemKeyGlobalFlags; bool _cauterized { false }; bool _cullWithParent { false }; + QVector _renderWithZones; bool shouldInvalidatePayloadShapeKey(int meshIndex);