diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c17b9963e5..3f5209901c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1237,6 +1237,11 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : _defaultSkybox->setCubemap(_defaultSkyboxTexture); _defaultSkybox->setColor({ 1.0, 1.0, 1.0 }); + EntityItem::setEntitiesShouldFadeFunction([this]() { + SharedNodePointer entityServerNode = DependencyManager::get()->soloNodeOfType(NodeType::EntityServer); + return entityServerNode && !isPhysicsEnabled(); + }); + // After all of the constructor is completed, then set firstRun to false. Setting::Handle firstRun{ Settings::firstRun, true }; firstRun.set(false); diff --git a/libraries/entities/src/EntityItem.cpp b/libraries/entities/src/EntityItem.cpp index b9f384f013..29cbfd79e6 100644 --- a/libraries/entities/src/EntityItem.cpp +++ b/libraries/entities/src/EntityItem.cpp @@ -35,6 +35,7 @@ int EntityItem::_maxActionsDataSize = 800; quint64 EntityItem::_rememberDeletedActionTime = 20 * USECS_PER_SECOND; +std::function EntityItem::_entitiesShouldFadeFunction = [](){ return true; }; EntityItem::EntityItem(const EntityItemID& entityItemID) : SpatiallyNestable(NestableType::Entity, entityItemID), diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 3677a0bbc8..c0772cbc01 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -432,6 +432,8 @@ public: QUuid getOwningAvatarID() const { return _owningAvatarID; } void setOwningAvatarID(const QUuid& owningAvatarID) { _owningAvatarID = owningAvatarID; } + static void setEntitiesShouldFadeFunction(std::function func) { _entitiesShouldFadeFunction = func; } + static std::function getEntitiesShouldFadeFunction() { return _entitiesShouldFadeFunction; } virtual bool isTransparent() { return _isFading ? Interpolate::calculateFadeRatio(_fadeStartTime) < 1.0f : false; } protected: @@ -564,7 +566,8 @@ protected: quint64 _lastUpdatedAccelerationTimestamp { 0 }; quint64 _fadeStartTime { usecTimestampNow() }; - bool _isFading { true }; + static std::function _entitiesShouldFadeFunction; + bool _isFading { _entitiesShouldFadeFunction() }; }; #endif // hifi_EntityItem_h diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index 38d181e748..63082a8995 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -15,6 +15,7 @@ #include "DeferredLightingEffect.h" #include "Model.h" +#include "EntityItem.h" using namespace render; @@ -517,10 +518,16 @@ void ModelMeshPartPayload::bindTransform(gpu::Batch& batch, const ShapePipeline: } void ModelMeshPartPayload::startFade() { - _fadeStartTime = usecTimestampNow(); - _hasStartedFade = true; - _prevHasStartedFade = false; - _hasFinishedFade = false; + bool shouldFade = EntityItem::getEntitiesShouldFadeFunction()(); + if (shouldFade) { + _fadeStartTime = usecTimestampNow(); + _hasStartedFade = true; + _hasFinishedFade = false; + } else { + _isFading = true; + _hasStartedFade = true; + _hasFinishedFade = true; + } } void ModelMeshPartPayload::render(RenderArgs* args) const { @@ -533,10 +540,11 @@ void ModelMeshPartPayload::render(RenderArgs* args) const { // When an individual mesh parts like this finishes its fade, we will mark the Model as // having render items that need updating bool nextIsFading = _isFading ? isStillFading() : false; - if (_isFading != nextIsFading || _prevHasStartedFade != _hasStartedFade) { - _isFading = nextIsFading || _prevHasStartedFade != _hasStartedFade; - _hasFinishedFade = _prevHasStartedFade == _hasStartedFade && !_isFading; - _prevHasStartedFade = _hasStartedFade; + bool startFading = !_isFading && !_hasFinishedFade && _hasStartedFade; + bool endFading = _isFading && !nextIsFading; + if (startFading || endFading) { + _isFading = startFading; + _hasFinishedFade = endFading; _model->setRenderItemsNeedUpdate(); } diff --git a/libraries/render-utils/src/MeshPartPayload.h b/libraries/render-utils/src/MeshPartPayload.h index 67fb660f8b..29478b3b4e 100644 --- a/libraries/render-utils/src/MeshPartPayload.h +++ b/libraries/render-utils/src/MeshPartPayload.h @@ -110,7 +110,6 @@ public: private: quint64 _fadeStartTime { 0 }; bool _hasStartedFade { false }; - mutable bool _prevHasStartedFade{ false }; mutable bool _hasFinishedFade { false }; mutable bool _isFading { false }; };