From 15070f63741e364ad906e6ab868e420f05acc256 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Fri, 10 Aug 2018 10:38:38 -0700 Subject: [PATCH] fixing fading --- .../entities-renderer/src/EntityTreeRenderer.cpp | 2 +- .../entities-renderer/src/RenderableEntityItem.cpp | 13 +++++-------- .../entities-renderer/src/RenderableEntityItem.h | 6 +++--- .../src/RenderableModelEntityItem.h | 3 +++ 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index e330427350..136fb281d5 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -40,7 +40,7 @@ #include -std::function EntityTreeRenderer::_entitiesShouldFadeFunction; +std::function EntityTreeRenderer::_entitiesShouldFadeFunction = []() { return true; }; QString resolveScriptURL(const QString& scriptUrl) { auto normalizedScriptUrl = DependencyManager::get()->normalizeURL(scriptUrl); diff --git a/libraries/entities-renderer/src/RenderableEntityItem.cpp b/libraries/entities-renderer/src/RenderableEntityItem.cpp index f04ee28d7f..a183101fff 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableEntityItem.cpp @@ -14,7 +14,6 @@ #include -#include "EntityTreeRenderer.h" #include "RenderableLightEntityItem.h" #include "RenderableLineEntityItem.h" #include "RenderableModelEntityItem.h" @@ -44,8 +43,6 @@ enum class RenderItemStatusIcon { NONE = 255 }; -std::function EntityRenderer::_entitiesShouldFadeFunction = []() { return true; }; - void EntityRenderer::initEntityRenderers() { REGISTER_ENTITY_TYPE_WITH_FACTORY(Model, RenderableModelEntityItem::factory) REGISTER_ENTITY_TYPE_WITH_FACTORY(PolyVox, RenderablePolyVoxEntityItem::factory) @@ -385,13 +382,13 @@ void EntityRenderer::updateModelTransformAndBound() { void EntityRenderer::doRenderUpdateSynchronous(const ScenePointer& scene, Transaction& transaction, const EntityItemPointer& entity) { DETAILED_PROFILE_RANGE(simulation_physics, __FUNCTION__); withWriteLock([&] { - if (isFading()) { + auto transparent = isTransparent(); + auto fading = isFading(); + if (fading || _prevIsTransparent != transparent) { emit requestRenderUpdate(); } - - auto transparent = isTransparent(); - if (_prevIsTransparent && !transparent) { - _isFading = false; + if (fading) { + _isFading = Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f; } _prevIsTransparent = transparent; diff --git a/libraries/entities-renderer/src/RenderableEntityItem.h b/libraries/entities-renderer/src/RenderableEntityItem.h index 496649eb5f..9c4d10190c 100644 --- a/libraries/entities-renderer/src/RenderableEntityItem.h +++ b/libraries/entities-renderer/src/RenderableEntityItem.h @@ -19,6 +19,7 @@ #include "EntitiesRendererLogging.h" #include #include +#include "EntityTreeRenderer.h" class EntityTreeRenderer; @@ -96,7 +97,7 @@ protected: // Called by the `render` method after `needsRenderUpdate` virtual void doRender(RenderArgs* args) = 0; - bool isFading() const { return _isFading; } + virtual bool isFading() const { return _isFading; } void updateModelTransformAndBound(); virtual bool isTransparent() const { return _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f : false; } inline bool isValidRenderItem() const { return _renderItemID != Item::INVALID_ITEM_ID; } @@ -121,7 +122,6 @@ protected: static void makeStatusGetters(const EntityItemPointer& entity, Item::Status::Getters& statusGetters); - static std::function _entitiesShouldFadeFunction; const Transform& getModelTransform() const; Item::Bound _bound; @@ -131,7 +131,7 @@ protected: ItemIDs _subRenderItemIDs; uint64_t _fadeStartTime{ usecTimestampNow() }; uint64_t _updateTime{ usecTimestampNow() }; // used when sorting/throttling render updates - bool _isFading{ _entitiesShouldFadeFunction() }; + bool _isFading { EntityTreeRenderer::getEntitiesShouldFadeFunction()() }; bool _prevIsTransparent { false }; bool _visible { false }; bool _isVisibleInSecondaryCamera { false }; diff --git a/libraries/entities-renderer/src/RenderableModelEntityItem.h b/libraries/entities-renderer/src/RenderableModelEntityItem.h index 84591b8afe..45892fdd7f 100644 --- a/libraries/entities-renderer/src/RenderableModelEntityItem.h +++ b/libraries/entities-renderer/src/RenderableModelEntityItem.h @@ -146,6 +146,9 @@ public: void addMaterial(graphics::MaterialLayer material, const std::string& parentMaterialName) override; void removeMaterial(graphics::MaterialPointer material, const std::string& parentMaterialName) override; + // FIXME: model mesh parts should fade individually + bool isFading() const override { return false; } + protected: virtual void removeFromScene(const ScenePointer& scene, Transaction& transaction) override; virtual void onRemoveFromSceneTyped(const TypedEntityPointer& entity) override;