Showing the changes to libraries/render-utils/src/RenderViewTask.cpp (1 of 5 files). Show all
Unified · Split
| @@ -10,16 +10,34 @@ · 9 unmodified lines | ||
| 10 | 10 | // |
| 11 | 11 | #include "RenderViewTask.h" |
| 12 | 12 | |
| 13 | −#include "AssembleLightingStageTask.h" | |
| 14 | 13 | #include "RenderShadowTask.h" |
| 15 | 14 | #include "RenderDeferredTask.h" |
| 16 | 15 | #include "RenderForwardTask.h" |
| 17 | 16 | |
| 18 | 17 | #include <DisableDeferred.h> |
| 19 | 18 | |
| 19 | +void RenderShadowsAndDeferredTask::build(JobModel& task, const render::Varying& input, render::Varying& output, render::CullFunctor cullFunctor, uint8_t tagBits, uint8_t tagMask) { | |
| 20 | + const auto items = input.getN<DeferredForwardSwitchJob::Input>(0); | |
| 21 | + const auto lightingModel = input.getN<DeferredForwardSwitchJob::Input>(1); | |
| 22 | + const auto lightingStageFramesAndZones = input.getN<DeferredForwardSwitchJob::Input>(2); | |
| 23 | + | |
| 24 | + // Warning : the cull functor passed to the shadow pass should only be testing for LOD culling. If frustum culling | |
| 25 | + // is performed, then casters not in the view frustum will be removed, which is not what we wish. | |
| 26 | + const auto shadowTaskIn = RenderShadowTask::Input(lightingStageFramesAndZones.get<AssembleLightingStageTask::Output>().get0()[0], lightingModel).asVarying(); | |
| 27 | + const auto shadowTaskOut = task.addJob<RenderShadowTask>("RenderShadowTask", shadowTaskIn, cullFunctor, tagBits, tagMask); | |
| 28 | + | |
| 29 | + const auto renderDeferredInput = RenderDeferredTask::Input(items, lightingModel, lightingStageFramesAndZones, shadowTaskOut).asVarying(); | |
| 30 | + task.addJob<RenderDeferredTask>("RenderDeferredTask", renderDeferredInput); | |
| 31 | +} | |
| 32 | + | |
| 33 | +void DeferredForwardSwitchJob::build(JobModel& task, const render::Varying& input, render::Varying& output, render::CullFunctor cullFunctor, uint8_t tagBits, uint8_t tagMask) { | |
| 34 | + task.addBranch<RenderShadowsAndDeferredTask>("RenderShadowsAndDeferredTask", 0, input, cullFunctor, tagBits, tagMask); | |
| 35 | + | |
| 36 | + task.addBranch<RenderForwardTask>("RenderForwardTask", 1, input); | |
| 37 | +} | |
| 38 | + | |
| 20 | 39 | void RenderViewTask::build(JobModel& task, const render::Varying& input, render::Varying& output, render::CullFunctor cullFunctor, uint8_t tagBits, uint8_t tagMask) { |
| 21 | 40 | const auto items = task.addJob<RenderFetchCullSortTask>("FetchCullSort", cullFunctor, tagBits, tagMask); |
| 22 | − assert(items.canCast<RenderFetchCullSortTask::Output>()); | |
| 23 | 41 | |
| 24 | 42 | // Issue the lighting model, aka the big global settings for the view |
| 25 | 43 | const auto lightingModel = task.addJob<MakeLightingModel>("LightingModel"); |
| @@ -28,16 +46,8 @@ void RenderViewTask::build(JobModel& task, const render::Varying& input, render: · 2 unmodified lines | ||
| 28 | 46 | const auto lightingStageFramesAndZones = task.addJob<AssembleLightingStageTask>("AssembleStages", items); |
| 29 | 47 | |
| 30 | 48 | if (!DISABLE_DEFERRED) { |
| 31 | − // Warning : the cull functor passed to the shadow pass should only be testing for LOD culling. If frustum culling | |
| 32 | − // is performed, then casters not in the view frustum will be removed, which is not what we wish. | |
| 33 | − const auto shadowTaskIn = RenderShadowTask::Input(lightingStageFramesAndZones.get<AssembleLightingStageTask::Output>().get0()[0], lightingModel).asVarying(); | |
| 34 | − const auto shadowTaskOut = task.addSwitchJob<RenderShadowTask>("RenderShadowTask", 0, shadowTaskIn, cullFunctor, tagBits, tagMask); | |
| 35 | − | |
| 36 | − const auto renderDeferredInput = RenderDeferredTask::Input(items, lightingModel, lightingStageFramesAndZones, shadowTaskOut).asVarying(); | |
| 37 | − task.addSwitchJob<RenderDeferredTask>("RenderDeferredTask", 0, renderDeferredInput); | |
| 38 | − | |
| 39 | − const auto renderForwardInput = RenderForwardTask::Input(items, lightingModel, lightingStageFramesAndZones).asVarying(); | |
| 40 | − task.addSwitchJob<RenderForwardTask>("RenderForwardTask", 1, renderForwardInput); | |
| 49 | + const auto deferredForwardIn = DeferredForwardSwitchJob::Input(items, lightingModel, lightingStageFramesAndZones).asVarying(); | |
| 50 | + task.addJob<DeferredForwardSwitchJob>("DeferredForwardSwitch", deferredForwardIn, cullFunctor, tagBits, tagMask); | |
| 41 | 51 | } else { |
| 42 | 52 | const auto renderInput = RenderForwardTask::Input(items, lightingModel, lightingStageFramesAndZones).asVarying(); |
| 43 | 53 | task.addJob<RenderForwardTask>("RenderForwardTask", renderInput); |