From 968fa4af514667fdfcd3fe06a301038aba46bcc1 Mon Sep 17 00:00:00 2001 From: HifiExperiments Date: Tue, 26 Mar 2024 16:56:54 -0700 Subject: [PATCH] fix layered simulate items --- libraries/render/src/render/FilterTask.cpp | 8 +++++++ libraries/render/src/render/FilterTask.h | 12 ++++++++++ .../src/render/RenderFetchCullSortTask.cpp | 23 +++++++++++-------- 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/libraries/render/src/render/FilterTask.cpp b/libraries/render/src/render/FilterTask.cpp index b269f44b41..90720f5666 100644 --- a/libraries/render/src/render/FilterTask.cpp +++ b/libraries/render/src/render/FilterTask.cpp @@ -148,3 +148,11 @@ void IDsToBounds::run(const RenderContextPointer& renderContext, const ItemIDs& } } } + +void MergeItems::run(const RenderContextPointer& renderContext, const Inputs& inputs, Outputs& outputs) { + const auto& array1 = inputs.get0(); + const auto& array2 = inputs.get1(); + + outputs = array1; + outputs.insert(outputs.end(), array2.begin(), array2.end()); +} diff --git a/libraries/render/src/render/FilterTask.h b/libraries/render/src/render/FilterTask.h index c2244e5f57..1a8f8f2e15 100644 --- a/libraries/render/src/render/FilterTask.h +++ b/libraries/render/src/render/FilterTask.h @@ -158,6 +158,18 @@ namespace render { bool _disableAABBs{ false }; }; + // Concatenate two arrays of items + class MergeItems { + public: + using Inputs = VaryingSet2; + using Outputs = ItemBounds; + using JobModel = Job::ModelIO; + + MergeItems() {} + + void run(const RenderContextPointer& renderContext, const Inputs& inputs, Outputs& outputs); + }; + } #endif // hifi_render_FilterTask_h; \ No newline at end of file diff --git a/libraries/render/src/render/RenderFetchCullSortTask.cpp b/libraries/render/src/render/RenderFetchCullSortTask.cpp index 5bb5e75774..4619c30de4 100644 --- a/libraries/render/src/render/RenderFetchCullSortTask.cpp +++ b/libraries/render/src/render/RenderFetchCullSortTask.cpp @@ -36,25 +36,26 @@ void RenderFetchCullSortTask::build(JobModel& task, const Varying& input, Varyin // Multi filter visible items into different buckets const int NUM_SPATIAL_FILTERS = 6; - const int NUM_NON_SPATIAL_FILTERS = 3; + const int NUM_NON_SPATIAL_FILTERS = 4; const int OPAQUE_SHAPE_BUCKET = 0; const int TRANSPARENT_SHAPE_BUCKET = 1; - const int LIGHT_BUCKET = 2; - const int META_BUCKET = 3; - const int MIRROR_BUCKET = 4; - const int SIMULATE_BUCKET = 5; - const int BACKGROUND_BUCKET = 2; + const int SIMULATE_BUCKET = 2; + const int LIGHT_BUCKET = 3; + const int META_BUCKET = 4; + const int MIRROR_BUCKET = 5; + const int BACKGROUND_BUCKET = 3; MultiFilterItems::ItemFilterArray spatialFilters = { { ItemFilter::Builder::opaqueShape().withoutMirror(), ItemFilter::Builder::transparentShape(), + ItemFilter::Builder().withSimulate(), ItemFilter::Builder::light(), ItemFilter::Builder::meta().withoutMirror(), - ItemFilter::Builder::mirror(), - ItemFilter::Builder().withSimulate() + ItemFilter::Builder::mirror() } }; MultiFilterItems::ItemFilterArray nonspatialFilters = { { ItemFilter::Builder::opaqueShape(), ItemFilter::Builder::transparentShape(), + ItemFilter::Builder().withSimulate(), ItemFilter::Builder::background() } }; const auto filteredSpatialBuckets = @@ -79,9 +80,13 @@ void RenderFetchCullSortTask::build(JobModel& task, const Varying& input, Varyin const auto filteredLayeredOpaque = task.addJob("FilterLayeredOpaque", layeredOpaques, ItemKey::Layer::LAYER_1); const auto filteredLayeredTransparent = task.addJob("FilterLayeredTransparent", layeredTransparents, ItemKey::Layer::LAYER_1); + // collect our simulate objects from both buckets + const auto mergeInputs = MergeItems::Inputs(filteredSpatialBuckets[SIMULATE_BUCKET], filteredNonspatialBuckets[SIMULATE_BUCKET]).asVarying(); + const auto simulate = task.addJob("MergeSimulateItems", mergeInputs); + task.addJob("ClearContainingZones"); - output = Output(BucketList{ opaques, transparents, lights, metas, mirrors, filteredSpatialBuckets[SIMULATE_BUCKET], + output = Output(BucketList{ opaques, transparents, lights, metas, mirrors, simulate, filteredLayeredOpaque.getN(0), filteredLayeredTransparent.getN(0), filteredLayeredOpaque.getN(1), filteredLayeredTransparent.getN(1), background }, spatialSelection);