From 97ee02811c3533d08193015d38e2df3c1a761544 Mon Sep 17 00:00:00 2001 From: SamGondelman Date: Tue, 26 Jun 2018 12:27:59 -0700 Subject: [PATCH] disable shadows in secondary camera --- interface/src/SecondaryCamera.cpp | 21 ++++++------------- interface/src/SecondaryCamera.h | 14 +------------ .../src/DeferredLightingEffect.cpp | 12 ++++------- .../render-utils/src/DeferredLightingEffect.h | 9 ++++++-- libraries/render-utils/src/RenderCommonTask.h | 3 +-- .../render-utils/src/RenderDeferredTask.cpp | 8 +++---- .../render-utils/src/RenderDeferredTask.h | 2 +- libraries/render-utils/src/RenderViewTask.cpp | 2 +- 8 files changed, 25 insertions(+), 46 deletions(-) diff --git a/interface/src/SecondaryCamera.cpp b/interface/src/SecondaryCamera.cpp index b9a767f700..559cb140b5 100644 --- a/interface/src/SecondaryCamera.cpp +++ b/interface/src/SecondaryCamera.cpp @@ -11,25 +11,16 @@ #include "SecondaryCamera.h" +#include +#include + #include #include -#include #include "Application.h" using RenderArgsPointer = std::shared_ptr; -void MainRenderTask::build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor, bool isDeferred) { - task.addJob("RenderShadowTask", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1); - const auto items = task.addJob("FetchCullSort", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1); - assert(items.canCast()); - if (!isDeferred) { - task.addJob("Forward", items); - } else { - task.addJob("RenderDeferredTask", items); - } -} - class SecondaryCameraJob { // Changes renderContext for our framebuffer and view. public: using Config = SecondaryCameraJobConfig; @@ -213,10 +204,10 @@ void SecondaryCameraRenderTask::build(JobModel& task, const render::Varying& inp const auto cachedArg = task.addJob("SecondaryCamera"); const auto items = task.addJob("FetchCullSort", cullFunctor, render::ItemKey::TAG_BITS_1, render::ItemKey::TAG_BITS_1); assert(items.canCast()); - if (!isDeferred) { - task.addJob("Forward", items); + if (isDeferred) { + task.addJob("RenderDeferredTask", items, false); } else { - task.addJob("RenderDeferredTask", items); + task.addJob("Forward", items); } task.addJob("EndSecondaryCamera", cachedArg); } \ No newline at end of file diff --git a/interface/src/SecondaryCamera.h b/interface/src/SecondaryCamera.h index 3d9e52617c..3c8540c081 100644 --- a/interface/src/SecondaryCamera.h +++ b/interface/src/SecondaryCamera.h @@ -12,23 +12,11 @@ #pragma once #ifndef hifi_SecondaryCamera_h #define hifi_SecondaryCamera_h - -#include + #include -#include -#include #include #include -class MainRenderTask { -public: - using JobModel = render::Task::Model; - - MainRenderTask() {} - - void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, render::CullFunctor cullFunctor, bool isDeferred = true); -}; - class SecondaryCameraJobConfig : public render::Task::Config { // Exposes secondary camera parameters to JavaScript. Q_OBJECT Q_PROPERTY(QUuid attachedEntityId MEMBER attachedEntityId NOTIFY dirty) // entity whose properties define camera position and orientation diff --git a/libraries/render-utils/src/DeferredLightingEffect.cpp b/libraries/render-utils/src/DeferredLightingEffect.cpp index a98e0403fa..9223e0fa03 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.cpp +++ b/libraries/render-utils/src/DeferredLightingEffect.cpp @@ -472,7 +472,8 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, const graphics::HazePointer& haze, const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer, const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer, - const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource) { + const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource, + bool renderShadows) { auto args = renderContext->args; auto& batch = (*args->_batch); @@ -554,7 +555,7 @@ void RenderDeferredSetup::run(const render::RenderContextPointer& renderContext, // Check if keylight casts shadows bool keyLightCastShadows { false }; - if (lightStage && lightStage->_currentFrame._sunLights.size()) { + if (renderShadows && lightStage && lightStage->_currentFrame._sunLights.size()) { graphics::LightPointer keyLight = lightStage->getLight(lightStage->_currentFrame._sunLights.front()); if (keyLight) { keyLightCastShadows = keyLight->getCastShadows(); @@ -711,11 +712,6 @@ void RenderDeferredCleanup::run(const render::RenderContextPointer& renderContex } } -RenderDeferred::RenderDeferred() { - -} - - void RenderDeferred::configure(const Config& config) { } @@ -742,7 +738,7 @@ void RenderDeferred::run(const RenderContextPointer& renderContext, const Inputs args->_batch = &batch; _gpuTimer->begin(batch); - setupJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, haze, surfaceGeometryFramebuffer, ssaoFramebuffer, subsurfaceScatteringResource); + setupJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, haze, surfaceGeometryFramebuffer, ssaoFramebuffer, subsurfaceScatteringResource, _renderShadows); lightsJob.run(renderContext, deferredTransform, deferredFramebuffer, lightingModel, surfaceGeometryFramebuffer, lightClusters); diff --git a/libraries/render-utils/src/DeferredLightingEffect.h b/libraries/render-utils/src/DeferredLightingEffect.h index 3b77b8137e..9b55083ad7 100644 --- a/libraries/render-utils/src/DeferredLightingEffect.h +++ b/libraries/render-utils/src/DeferredLightingEffect.h @@ -127,7 +127,8 @@ public: const graphics::HazePointer& haze, const SurfaceGeometryFramebufferPointer& surfaceGeometryFramebuffer, const AmbientOcclusionFramebufferPointer& ambientOcclusionFramebuffer, - const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource); + const SubsurfaceScatteringResourcePointer& subsurfaceScatteringResource, + bool renderShadows); }; class RenderDeferredLocals { @@ -166,7 +167,8 @@ public: using Config = RenderDeferredConfig; using JobModel = render::Job::ModelI; - RenderDeferred(); + RenderDeferred() {} + RenderDeferred(bool renderShadows) : _renderShadows(renderShadows) {} void configure(const Config& config); @@ -178,6 +180,9 @@ public: protected: gpu::RangeTimerPointer _gpuTimer; + +private: + bool _renderShadows { false }; }; class DefaultLightingSetup { diff --git a/libraries/render-utils/src/RenderCommonTask.h b/libraries/render-utils/src/RenderCommonTask.h index 79599d3ab7..65f8cdfbfc 100644 --- a/libraries/render-utils/src/RenderCommonTask.h +++ b/libraries/render-utils/src/RenderCommonTask.h @@ -61,7 +61,6 @@ protected: class DrawOverlay3D { public: using Inputs = render::VaryingSet3; - using Config = DrawOverlay3DConfig; using JobModel = render::Job::ModelI; @@ -73,7 +72,7 @@ public: protected: render::ShapePlumberPointer _shapePlumber; int _maxDrawn; // initialized by Config - bool _opaquePass{ true }; + bool _opaquePass { true }; }; class CompositeHUD { diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index dc12c0f781..32bdad280c 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -64,8 +64,8 @@ void RenderDeferredTask::configure(const Config& config) } const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, const char* selectionName, - const render::Varying& metas, - const render::Varying& opaques, + const render::Varying& metas, + const render::Varying& opaques, const render::Varying& transparents) { const auto selectMetaInput = SelectItems::Inputs(metas, Varying(), std::string()).asVarying(); const auto selectedMetas = task.addJob("MetaSelection", selectMetaInput, selectionName); @@ -75,7 +75,7 @@ const render::Varying RenderDeferredTask::addSelectItemJobs(JobModel& task, cons return task.addJob("TransparentSelection", selectItemInput, selectionName); } -void RenderDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output) { +void RenderDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output, bool renderShadows) { const auto& items = input.get(); auto fadeEffect = DependencyManager::get(); @@ -168,7 +168,7 @@ void RenderDeferredTask::build(JobModel& task, const render::Varying& input, ren const auto deferredLightingInputs = RenderDeferred::Inputs(deferredFrameTransform, deferredFramebuffer, lightingModel, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer, scatteringResource, lightClusters, hazeModel).asVarying(); - task.addJob("RenderDeferred", deferredLightingInputs); + task.addJob("RenderDeferred", deferredLightingInputs, renderShadows); // Similar to light stage, background stage has been filled by several potential render items and resolved for the frame in this job diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index 9917058790..ab6ab177d2 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -126,7 +126,7 @@ public: RenderDeferredTask(); void configure(const Config& config); - void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs); + void build(JobModel& task, const render::Varying& inputs, render::Varying& outputs, bool renderShadows); private: static const render::Varying addSelectItemJobs(JobModel& task, diff --git a/libraries/render-utils/src/RenderViewTask.cpp b/libraries/render-utils/src/RenderViewTask.cpp index 82426a3a1f..6f6a87c222 100644 --- a/libraries/render-utils/src/RenderViewTask.cpp +++ b/libraries/render-utils/src/RenderViewTask.cpp @@ -27,7 +27,7 @@ void RenderViewTask::build(JobModel& task, const render::Varying& input, render: assert(items.canCast()); if (isDeferred) { - task.addJob("RenderDeferredTask", items); + task.addJob("RenderDeferredTask", items, true); } else { task.addJob("Forward", items); }