From 0c3755483b99ecc1a88af17ac9bb8bd1ba598e6a Mon Sep 17 00:00:00 2001
From: Sam Gateau <sam@ad.highfidelity.io>
Date: Mon, 10 Jul 2017 12:37:26 +0200
Subject: [PATCH] adding assert or checks whenever getting a scene stage

---
 .../entities-renderer/src/RenderableZoneEntityItem.cpp    | 2 ++
 libraries/render-utils/src/BackgroundStage.cpp            | 2 ++
 libraries/render-utils/src/DebugDeferredBuffer.cpp        | 1 +
 libraries/render-utils/src/DeferredLightingEffect.cpp     | 2 ++
 libraries/render-utils/src/LightClusters.cpp              | 1 +
 libraries/render-utils/src/LightPayload.cpp               | 2 ++
 libraries/render-utils/src/RenderShadowTask.cpp           | 3 ++-
 libraries/render-utils/src/SubsurfaceScattering.cpp       | 3 ++-
 libraries/render-utils/src/ZoneRenderer.cpp               | 8 +++++---
 9 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp
index a57a6e5d52..eda304ef91 100644
--- a/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp
+++ b/libraries/entities-renderer/src/RenderableZoneEntityItem.cpp
@@ -555,10 +555,12 @@ void RenderableZoneEntityItemMeta::setProceduralUserData(QString userData) {
 void RenderableZoneEntityItemMeta::render(RenderArgs* args) {
     if (!_stage) {
         _stage = args->_scene->getStage<LightStage>();
+        assert(_stage);
     }
 
     if (!_backgroundStage) {
         _backgroundStage = args->_scene->getStage<BackgroundStage>();
+        assert(_backgroundStage);
     }
 
     { // Sun 
diff --git a/libraries/render-utils/src/BackgroundStage.cpp b/libraries/render-utils/src/BackgroundStage.cpp
index 5d04f188f1..2ea3683c4a 100644
--- a/libraries/render-utils/src/BackgroundStage.cpp
+++ b/libraries/render-utils/src/BackgroundStage.cpp
@@ -61,6 +61,8 @@ void DrawBackgroundStage::run(const render::RenderContextPointer& renderContext,
 
     // Background rendering decision
     auto backgroundStage = renderContext->_scene->getStage<BackgroundStage>();
+    assert(backgroundStage);
+
     model::SunSkyStagePointer background;
     model::SkyboxPointer skybox;
     if (backgroundStage->_currentFrame._backgrounds.size()) {
diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp
index 8887de81ef..44e2bd290b 100644
--- a/libraries/render-utils/src/DebugDeferredBuffer.cpp
+++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp
@@ -433,6 +433,7 @@ void DebugDeferredBuffer::run(const RenderContextPointer& renderContext, const I
         }
 
         auto lightStage = renderContext->_scene->getStage<LightStage>();
+        assert(lightStage);
         assert(lightStage->getNumLights() > 0);
         auto lightAndShadow = lightStage->getLightAndShadow(0);
         const auto& globalShadow = lightAndShadow.second;
diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp
index 7b1ea1768d..2b5fdc1d74 100644
--- a/libraries/render-utils/src/DeferredLightingEffect.cpp
+++ b/libraries/render-utils/src/DeferredLightingEffect.cpp
@@ -429,6 +429,7 @@ void PrepareDeferred::run(const RenderContextPointer& renderContext, const Input
     
     // Prepare a fresh Light Frame
     auto lightStage = renderContext->_scene->getStage<LightStage>();
+    assert(lightStage);
     lightStage->_currentFrame.clear();
 }
 
@@ -493,6 +494,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext,
         // Global directional light and ambient pass
 
         auto lightStage = renderContext->_scene->getStage<LightStage>();
+        assert(lightStage);
         assert(lightStage->getNumLights() > 0);
         auto lightAndShadow = lightStage->getLightAndShadow(0);
         const auto& globalShadow = lightAndShadow.second;
diff --git a/libraries/render-utils/src/LightClusters.cpp b/libraries/render-utils/src/LightClusters.cpp
index 74209ce951..ab1e194498 100644
--- a/libraries/render-utils/src/LightClusters.cpp
+++ b/libraries/render-utils/src/LightClusters.cpp
@@ -575,6 +575,7 @@ void LightClusteringPass::run(const render::RenderContextPointer& renderContext,
     
     // From the LightStage and the current frame, update the light cluster Grid
     auto lightStage = renderContext->_scene->getStage<LightStage>();
+    assert(lightStage);
     _lightClusters->updateLightStage(lightStage);
     _lightClusters->updateLightFrame(lightStage->_currentFrame, lightingModel->isPointLightEnabled(), lightingModel->isSpotLightEnabled());
     
diff --git a/libraries/render-utils/src/LightPayload.cpp b/libraries/render-utils/src/LightPayload.cpp
index 5f7f7236f2..afa17bee19 100644
--- a/libraries/render-utils/src/LightPayload.cpp
+++ b/libraries/render-utils/src/LightPayload.cpp
@@ -56,6 +56,7 @@ LightPayload::~LightPayload() {
 void LightPayload::render(RenderArgs* args) {
     if (!_stage) {
         _stage = args->_scene->getStage<LightStage>();
+        assert(_stage);
     }
     // Do we need to allocate the light in the stage ?
     if (LightStage::isIndexInvalid(_index)) {
@@ -124,6 +125,7 @@ KeyLightPayload::~KeyLightPayload() {
 void KeyLightPayload::render(RenderArgs* args) {
     if (!_stage) {
         _stage = args->_scene->getStage<LightStage>();
+        assert(_stage);
     }
     // Do we need to allocate the light in the stage ?
     if (LightStage::isIndexInvalid(_index)) {
diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp
index 5b840bd330..03a2a4f9b1 100644
--- a/libraries/render-utils/src/RenderShadowTask.cpp
+++ b/libraries/render-utils/src/RenderShadowTask.cpp
@@ -36,7 +36,7 @@ void RenderShadowMap::run(const render::RenderContextPointer& renderContext,
     assert(renderContext->args->hasViewFrustum());
 
     auto lightStage = renderContext->_scene->getStage<LightStage>();
-
+    assert(lightStage);
     LightStage::Index globalLightIndex { 0 };
 
     const auto globalLight = lightStage->getLight(globalLightIndex);
@@ -141,6 +141,7 @@ void RenderShadowTask::configure(const Config& configuration) {
 
 void RenderShadowSetup::run(const render::RenderContextPointer& renderContext, Output& output) {
     auto lightStage = renderContext->_scene->getStage<LightStage>();
+    assert(lightStage);
     const auto globalShadow = lightStage->getShadow(0);
 
     // Cache old render args
diff --git a/libraries/render-utils/src/SubsurfaceScattering.cpp b/libraries/render-utils/src/SubsurfaceScattering.cpp
index d67369774c..1786898e57 100644
--- a/libraries/render-utils/src/SubsurfaceScattering.cpp
+++ b/libraries/render-utils/src/SubsurfaceScattering.cpp
@@ -532,7 +532,8 @@ void DebugSubsurfaceScattering::run(const render::RenderContextPointer& renderCo
 
 
 
-    auto lightStage = renderContext->_scene->getStage<LightStage>("LIGHT_STAGE");
+    auto lightStage = renderContext->_scene->getStage<LightStage>();
+    assert(lightStage);
    // const auto light = DependencyManager::get<DeferredLightingEffect>()->getLightStage()->getLight(0);
     const auto light = lightStage->getLight(0);
     
diff --git a/libraries/render-utils/src/ZoneRenderer.cpp b/libraries/render-utils/src/ZoneRenderer.cpp
index 8fa243c13b..787ef47282 100644
--- a/libraries/render-utils/src/ZoneRenderer.cpp
+++ b/libraries/render-utils/src/ZoneRenderer.cpp
@@ -52,19 +52,21 @@ void ZoneRendererTask::build(JobModel& task, const Varying& input, Varying& oupu
 }
 
 void SetupZones::run(const RenderContextPointer& context, const Inputs& inputs) {
-    auto backgroundStage = context->_scene->getStage<BackgroundStage>("BACKGROUND_STAGE");
+    auto backgroundStage = context->_scene->getStage<BackgroundStage>();
+    assert(backgroundStage);
     backgroundStage->_currentFrame.clear();
 
     // call render in the correct order first...
     render::renderItems(context, inputs);
 
     // Finally add the default lights and background:
-    auto lightStage = context->_scene->getStage<LightStage>("LIGHT_STAGE");
+    auto lightStage = context->_scene->getStage<LightStage>();
+    assert(lightStage);
+    
     lightStage->_currentFrame.pushSunLight(0);
     lightStage->_currentFrame.pushAmbientLight(0);
 
     backgroundStage->_currentFrame.pushBackground(0);
-
 }
 
 const gpu::PipelinePointer& DebugZoneLighting::getKeyLightPipeline() {