From a89a76dc4b8034833bea89fa6c011ffd91eb62bd Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 11 Mar 2016 14:25:39 -0800 Subject: [PATCH] Require model fixup if tex is transparent --- libraries/render-utils/src/Model.cpp | 17 +++++++++++++++++ libraries/render-utils/src/Model.h | 12 +++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index ce6dfd6849..8b6cc41f35 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -74,6 +74,21 @@ Model::~Model() { AbstractViewStateInterface* Model::_viewState = NULL; +bool Model::needsFixupInScene() { + if (readyToAddToScene()) { + // Once textures are loaded, fixup if they are now transparent + if (!_needsReload && _needsUpdateTransparentTextures && _geometry->isLoadedWithTextures()) { + _needsUpdateTransparentTextures = false; + if (_hasTransparentTextures != _geometry->hasTransparentTextures()) { + return true; + } + } + if (!_readyWhenAdded) { + return true; + } + } + return false; +} void Model::setTranslation(const glm::vec3& translation) { _translation = translation; @@ -728,6 +743,8 @@ void Model::setURL(const QUrl& url) { } _needsReload = true; + _needsUpdateTransparentTextures = true; + _hasTransparentTextures = false; _meshGroupsKnown = false; invalidCalculatedMeshBoxes(); deleteGeometry(); diff --git a/libraries/render-utils/src/Model.h b/libraries/render-utils/src/Model.h index 424eed1e66..e90d51813b 100644 --- a/libraries/render-utils/src/Model.h +++ b/libraries/render-utils/src/Model.h @@ -70,7 +70,7 @@ public: // new Scene/Engine rendering support void setVisibleInScene(bool newValue, std::shared_ptr scene); - bool needsFixupInScene() { return !_readyWhenAdded && readyToAddToScene(); } + bool needsFixupInScene(); bool readyToAddToScene(RenderArgs* renderArgs = nullptr) { return !_needsReload && isRenderable() && isActive() && isLoaded(); } @@ -365,10 +365,12 @@ protected: QSet> _renderItemsSet; QMap _renderItems; - bool _readyWhenAdded = false; - bool _needsReload = true; - bool _needsUpdateClusterMatrices = true; - bool _showCollisionHull = false; + bool _readyWhenAdded { false }; + bool _needsReload { true }; + bool _needsUpdateClusterMatrices { true }; + bool _needsUpdateTransparentTextures { true }; + bool _hasTransparentTextures { false }; + bool _showCollisionHull { false }; friend class ModelMeshPartPayload; RigPointer _rig;