From adc9d2ea07caeeb080c9233639feb16eb18830e4 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Fri, 22 Jan 2016 14:44:46 -0800 Subject: [PATCH] Add Job::Config to FetchItems --- .../render-utils/src/RenderDeferredTask.cpp | 10 ++---- libraries/render/src/render/DrawTask.cpp | 4 +-- libraries/render/src/render/DrawTask.h | 32 ++++++++++++------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 079b36be67..96b4a423d5 100755 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -89,19 +89,13 @@ RenderDeferredTask::RenderDeferredTask(CullFunctor cullFunctor) { initDeferredPipelines(*shapePlumber); // CPU: Fetch the renderOpaques - auto fetchedOpaques = addJob("FetchOpaque", FetchItems([](const RenderContextPointer& context, int count) { - context->getItemsConfig().opaque.numFeed = count; - })); + auto fetchedOpaques = addJob("FetchOpaque"); auto culledOpaques = addJob>("CullOpaque", fetchedOpaques, cullFunctor); auto opaques = addJob("DepthSortOpaque", culledOpaques); // CPU only, create the list of renderedTransparents items auto fetchedTransparents = addJob("FetchTransparent", FetchItems( - ItemFilter::Builder::transparentShape().withoutLayered(), - [](const RenderContextPointer& context, int count) { - context->getItemsConfig().transparent.numFeed = count; - } - )); + ItemFilter::Builder::transparentShape().withoutLayered())); auto culledTransparents = addJob>("CullTransparent", fetchedTransparents, cullFunctor); auto transparents = addJob("DepthSortTransparent", culledTransparents, DepthSortItems(false)); diff --git a/libraries/render/src/render/DrawTask.cpp b/libraries/render/src/render/DrawTask.cpp index ed35519b9d..d052221d97 100755 --- a/libraries/render/src/render/DrawTask.cpp +++ b/libraries/render/src/render/DrawTask.cpp @@ -177,9 +177,7 @@ void FetchItems::run(const SceneContextPointer& sceneContext, const RenderContex } } - if (_probeNumItems) { - _probeNumItems(renderContext, (int)outItems.size()); - } + std::static_pointer_cast(renderContext->jobConfig)->numItems = (int)outItems.size(); } void DepthSortItems::run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems, ItemIDsBounds& outItems) { diff --git a/libraries/render/src/render/DrawTask.h b/libraries/render/src/render/DrawTask.h index 54fd8dbe31..eef4e0ade0 100755 --- a/libraries/render/src/render/DrawTask.h +++ b/libraries/render/src/render/DrawTask.h @@ -27,21 +27,29 @@ void depthSortItems(const SceneContextPointer& sceneContext, const RenderContext void renderItems(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ItemIDsBounds& inItems); void renderShapes(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, const ShapePlumberPointer& shapeContext, const ItemIDsBounds& inItems, int maxDrawnItems = -1); -class FetchItems { +class FetchItemsConfig : public Job::Config { + Q_OBJECT public: - typedef std::function ProbeNumItems; - FetchItems() {} - FetchItems(const ProbeNumItems& probe): _probeNumItems(probe) {} - FetchItems(const ItemFilter& filter, const ProbeNumItems& probe): _filter(filter), _probeNumItems(probe) {} - - ItemFilter _filter = ItemFilter::Builder::opaqueShape().withoutLayered(); - ProbeNumItems _probeNumItems; - - void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, ItemIDsBounds& outItems); - using JobModel = Job::ModelO; + Q_PROPERTY(int numItems READ getNumItems) + int getNumItems() { return numItems; } + int numItems{ 0 }; }; -template +class FetchItems { +public: + using Config = FetchItemsConfig; + using JobModel = Job::ModelO; + + FetchItems() {} + FetchItems(const ItemFilter& filter) : _filter(filter) {} + + ItemFilter _filter{ ItemFilter::Builder::opaqueShape().withoutLayered() }; + + void configure(const Config&) {} + void run(const SceneContextPointer& sceneContext, const RenderContextPointer& renderContext, ItemIDsBounds& outItems); +}; + +template class CullItems { public: CullItems(CullFunctor cullFunctor) : _cullFunctor{ cullFunctor } {}