From e7eca7728f791f52457948bafbbdf668c055b6fd Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Tue, 6 Jun 2017 14:57:52 +0200 Subject: [PATCH] Debug fade management moved out of the inner render loop --- .../render-utils/src/MeshPartPayload.cpp | 2 +- .../render-utils/src/RenderDeferredTask.cpp | 64 ++++++++++--------- .../render-utils/src/RenderDeferredTask.h | 2 +- 3 files changed, 36 insertions(+), 32 deletions(-) diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index 39f07e0232..70adcdd98e 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -533,7 +533,7 @@ float ModelMeshPartPayload::computeFadePercent() const { return 0.0f; } float fadeAlpha = 1.0f; - const double INV_FADE_PERIOD = 1.0 / (double)(10 * USECS_PER_SECOND); + const double INV_FADE_PERIOD = 1.0 / (double)(3 * USECS_PER_SECOND); double fraction = (double)(usecTimestampNow() - _fadeStartTime) * INV_FADE_PERIOD; if (fraction < 1.0) { fadeAlpha = Interpolate::simpleNonLinearBlend(fraction); diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 412d74fe87..8d4a92ff7d 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -252,6 +252,15 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& const auto& lightingModel = inputs.get1(); RenderArgs* args = renderContext->args; + ShapeKey::Builder defaultKeyBuilder; + + if (_debugFade) { + args->_debugFlags = static_cast(args->_debugFlags | + static_cast(RenderArgs::RENDER_DEBUG_FADE)); + args->_debugFadePercent = _debugFadePercent; + // Force fade for everyone + defaultKeyBuilder.withFade(); + } gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { args->_batch = &batch; @@ -272,19 +281,12 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& batch.setUniformBuffer(render::ShapePipeline::Slot::LIGHTING_MODEL, lightingModel->getParametersBuffer()); // From the lighting model define a global shapKey ORED with individiual keys - ShapeKey::Builder keyBuilder; + ShapeKey::Builder keyBuilder = defaultKeyBuilder; if (lightingModel->isWireframeEnabled()) { keyBuilder.withWireframe(); } // Prepare fade effect batch.setResourceTexture(ShapePipeline::Slot::MAP::FADE_MASK, _fadeMaskMap); - if (_debugFade) { - args->_debugFlags = static_cast(args->_debugFlags | - static_cast(RenderArgs::RENDER_DEBUG_FADE)); - args->_debugFadePercent = _debugFadePercent; - // Force fade for everyone - keyBuilder.withFade(); - } ShapeKey globalKey = keyBuilder.build(); args->_globalShapeKey = globalKey._flags.to_ulong(); @@ -293,15 +295,15 @@ void DrawDeferred::run(const RenderContextPointer& renderContext, const Inputs& args->_batch = nullptr; args->_globalShapeKey = 0; - - // Not sure this is really needed... - if (_debugFade) { - // Turn off fade debug - args->_debugFlags = static_cast(args->_debugFlags & - ~static_cast(RenderArgs::RENDER_DEBUG_FADE)); - } }); + // Not sure this is really needed... + if (_debugFade) { + // Turn off fade debug + args->_debugFlags = static_cast(args->_debugFlags & + ~static_cast(RenderArgs::RENDER_DEBUG_FADE)); + } + config->setNumDrawn((int)inItems.size()); } @@ -315,6 +317,15 @@ void DrawStateSortDeferred::run(const RenderContextPointer& renderContext, const const auto& lightingModel = inputs.get1(); RenderArgs* args = renderContext->args; + ShapeKey::Builder defaultKeyBuilder; + + if (_debugFade) { + args->_debugFlags = static_cast(args->_debugFlags | + static_cast(RenderArgs::RENDER_DEBUG_FADE)); + args->_debugFadePercent = _debugFadePercent; + // Force fade for everyone + defaultKeyBuilder.withFade(); + } gpu::doInBatch(args->_context, [&](gpu::Batch& batch) { args->_batch = &batch; @@ -335,20 +346,13 @@ void DrawStateSortDeferred::run(const RenderContextPointer& renderContext, const batch.setUniformBuffer(render::ShapePipeline::Slot::LIGHTING_MODEL, lightingModel->getParametersBuffer()); // From the lighting model define a global shapeKey ORED with individiual keys - ShapeKey::Builder keyBuilder; + ShapeKey::Builder keyBuilder = defaultKeyBuilder; if (lightingModel->isWireframeEnabled()) { keyBuilder.withWireframe(); } // Prepare fade effect batch.setResourceTexture(ShapePipeline::Slot::MAP::FADE_MASK, _fadeMaskMap); - if (_debugFade) { - args->_debugFlags = static_cast(args->_debugFlags | - static_cast(RenderArgs::RENDER_DEBUG_FADE)); - args->_debugFadePercent = _debugFadePercent; - // Force fade for everyone - keyBuilder.withFade(); - } ShapeKey globalKey = keyBuilder.build(); args->_globalShapeKey = globalKey._flags.to_ulong(); @@ -360,15 +364,15 @@ void DrawStateSortDeferred::run(const RenderContextPointer& renderContext, const } args->_batch = nullptr; args->_globalShapeKey = 0; - - // Not sure this is really needed... - if (_debugFade) { - // Turn off fade debug - args->_debugFlags = static_cast(args->_debugFlags & - ~static_cast(RenderArgs::RENDER_DEBUG_FADE)); - } }); + // Not sure this is really needed... + if (_debugFade) { + // Turn off fade debug + args->_debugFlags = static_cast(args->_debugFlags & + ~static_cast(RenderArgs::RENDER_DEBUG_FADE)); + } + config->setNumDrawn((int)inItems.size()); } diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index ebb7d34606..1f20615328 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -51,7 +51,6 @@ protected: gpu::TexturePointer _fadeMaskMap; float _debugFadePercent; - bool _stateSort; bool _debugFade; }; @@ -135,6 +134,7 @@ public: protected: render::ShapePlumberPointer _shapePlumber; int _maxDrawn; // initialized by Config + bool _stateSort; }; class DeferredFramebuffer;