From 8d63067fa59ea2d4e168f96cbd2973f50dcd4e13 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Thu, 22 Dec 2016 22:21:51 -0500 Subject: [PATCH] templatize graphics engine tasks' run method --- .../render-utils/src/RenderDeferredTask.cpp | 20 ------------- .../render-utils/src/RenderDeferredTask.h | 1 - .../render-utils/src/RenderForwardTask.cpp | 20 ------------- .../render-utils/src/RenderForwardTask.h | 1 - .../render-utils/src/RenderShadowTask.cpp | 14 --------- libraries/render-utils/src/RenderShadowTask.h | 1 - libraries/render/src/render/Engine.cpp | 8 ----- libraries/render/src/render/Engine.h | 4 +-- libraries/render/src/render/Task.h | 29 ++++++++++--------- 9 files changed, 18 insertions(+), 80 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index d8f3b325f1..4296d5233a 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -228,26 +228,6 @@ RenderDeferredTask::RenderDeferredTask(CullFunctor cullFunctor) { } -void RenderDeferredTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - // sanity checks - assert(sceneContext); - if (!sceneContext->_scene) { - return; - } - - - // Is it possible that we render without a viewFrustum ? - if (!(renderContext->args && renderContext->args->hasViewFrustum())) { - return; - } - - auto config = std::static_pointer_cast(renderContext->jobConfig); - - for (auto job : _jobs) { - job.run(sceneContext, renderContext); - } -} - void BeginGPURangeTimer::run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext, gpu::RangeTimerPointer& timer) { timer = _gpuTimer; gpu::doInBatch(renderContext->args->_context, [&](gpu::Batch& batch) { diff --git a/libraries/render-utils/src/RenderDeferredTask.h b/libraries/render-utils/src/RenderDeferredTask.h index fb15e34569..c2e9fb8b5e 100644 --- a/libraries/render-utils/src/RenderDeferredTask.h +++ b/libraries/render-utils/src/RenderDeferredTask.h @@ -200,7 +200,6 @@ public: RenderDeferredTask(render::CullFunctor cullFunctor); void configure(const Config& config) {} - void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); using JobModel = Model; diff --git a/libraries/render-utils/src/RenderForwardTask.cpp b/libraries/render-utils/src/RenderForwardTask.cpp index 4e971c6677..1f007678b9 100755 --- a/libraries/render-utils/src/RenderForwardTask.cpp +++ b/libraries/render-utils/src/RenderForwardTask.cpp @@ -86,26 +86,6 @@ RenderForwardTask::RenderForwardTask(CullFunctor cullFunctor) { addJob("Blit", framebuffer); } -void RenderForwardTask::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { - // sanity checks - assert(sceneContext); - if (!sceneContext->_scene) { - return; - } - - - // Is it possible that we render without a viewFrustum ? - if (!(renderContext->args && renderContext->args->hasViewFrustum())) { - return; - } - - auto config = std::static_pointer_cast(renderContext->jobConfig); - - for (auto job : _jobs) { - job.run(sceneContext, renderContext); - } -} - void PrepareFramebuffer::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, gpu::FramebufferPointer& framebuffer) { auto framebufferCache = DependencyManager::get(); auto framebufferSize = framebufferCache->getFrameBufferSize(); diff --git a/libraries/render-utils/src/RenderForwardTask.h b/libraries/render-utils/src/RenderForwardTask.h index a4839e18ec..6c392643eb 100755 --- a/libraries/render-utils/src/RenderForwardTask.h +++ b/libraries/render-utils/src/RenderForwardTask.h @@ -24,7 +24,6 @@ public: RenderForwardTask(render::CullFunctor cullFunctor); void configure(const Config& config) {} - void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); using JobModel = Model; }; diff --git a/libraries/render-utils/src/RenderShadowTask.cpp b/libraries/render-utils/src/RenderShadowTask.cpp index c92ebbeec0..eb46b8f46e 100644 --- a/libraries/render-utils/src/RenderShadowTask.cpp +++ b/libraries/render-utils/src/RenderShadowTask.cpp @@ -139,20 +139,6 @@ void RenderShadowTask::configure(const Config& configuration) { Task::configure(configuration); } -void RenderShadowTask::run(const SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext) { - assert(sceneContext); - RenderArgs* args = renderContext->args; - - // sanity checks - if (!sceneContext->_scene || !args) { - return; - } - - for (auto job : _jobs) { - job.run(sceneContext, renderContext); - } -} - void RenderShadowSetup::run(const SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext, Output& output) { auto lightStage = DependencyManager::get()->getLightStage(); const auto globalShadow = lightStage->getShadow(0); diff --git a/libraries/render-utils/src/RenderShadowTask.h b/libraries/render-utils/src/RenderShadowTask.h index 8405f10c2a..d2e58f8362 100644 --- a/libraries/render-utils/src/RenderShadowTask.h +++ b/libraries/render-utils/src/RenderShadowTask.h @@ -49,7 +49,6 @@ public: RenderShadowTask(render::CullFunctor shouldRender); void configure(const Config& configuration); - void run(const render::SceneContextPointer& sceneContext, const render::RenderContextPointer& renderContext); }; class RenderShadowSetup { diff --git a/libraries/render/src/render/Engine.cpp b/libraries/render/src/render/Engine.cpp index 3c9f2b643a..970cc142e0 100644 --- a/libraries/render/src/render/Engine.cpp +++ b/libraries/render/src/render/Engine.cpp @@ -52,11 +52,3 @@ void Engine::load() { } } } - -void Engine::run() { - for (auto job : _jobs) { - job.run(_sceneContext, _renderContext); - } - -} - diff --git a/libraries/render/src/render/Engine.h b/libraries/render/src/render/Engine.h index d2bb42e5ff..de8340c33e 100644 --- a/libraries/render/src/render/Engine.h +++ b/libraries/render/src/render/Engine.h @@ -39,8 +39,8 @@ namespace render { RenderContextPointer getRenderContext() const { return _renderContext; } // Render a frame - // A frame must have a scene registered and a context set to render - void run(); + // Must have a scene registered and a context set + void run() { assert(_sceneContext && _renderContext); Task::run(_sceneContext, _renderContext); } protected: SceneContextPointer _sceneContext; diff --git a/libraries/render/src/render/Task.h b/libraries/render/src/render/Task.h index 68643110b8..27538127ca 100644 --- a/libraries/render/src/render/Task.h +++ b/libraries/render/src/render/Task.h @@ -593,22 +593,20 @@ public: using QConfigPointer = Job::QConfigPointer; using None = Job::None; - template class Model : public Job::Concept { + template class Model : public Job::Concept { public: using Data = T; - using Input = I; + using Input = None; using Output = O; Data _data; - Varying _input; Varying _output; - const Varying getInput() const override { return _input; } const Varying getOutput() const override { return _output; } template Model(const Varying& input, A&&... args) : - Concept(nullptr), _data(Data(std::forward(args)...)), _input(input), _output(Output()) { + Concept(nullptr), _data(Data(std::forward(args)...)), _output(Output()) { // Recreate the Config to use the templated type _data.template createConfiguration(); _config = _data.getConfiguration(); @@ -620,16 +618,15 @@ public: } void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) override { - renderContext->jobConfig = std::static_pointer_cast(_config); - if (renderContext->jobConfig->alwaysEnabled || renderContext->jobConfig->enabled) { - jobRun(_data, sceneContext, renderContext, _input.get(), _output.edit()); + auto config = std::static_pointer_cast(_config); + if (config->alwaysEnabled || config->enabled) { + for (auto job : _data._jobs) { + job.run(sceneContext, renderContext); + } } - renderContext->jobConfig.reset(); } }; - template using ModelI = Model; - template using ModelO = Model; - template using ModelIO = Model; + template using ModelO = Model; using Jobs = std::vector; @@ -688,8 +685,14 @@ public: } } + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext) { + for (auto job : _jobs) { + job.run(sceneContext, renderContext); + } + } + protected: - template friend class Model; + template friend class Model; QConfigPointer _config; Jobs _jobs;