12 #ifndef hifi_render_FilterTask_h
13 #define hifi_render_FilterTask_h
16 #include "ViewFrustum.h"
20 class MultiFilterItemsConfig :
public Job::Config {
22 Q_PROPERTY(
int numItems READ getNumItems)
25 int getNumItems() {
return numItems; }
29 template <
int NUM_FILTERS>
30 class MultiFilterItems {
32 using ItemFilterArray = std::array<ItemFilter, NUM_FILTERS>;
33 using ItemBoundsArray = VaryingArray<ItemBounds, NUM_FILTERS>;
34 using Config = MultiFilterItemsConfig;
35 using JobModel = Job::ModelIO<MultiFilterItems, ItemBounds, ItemBoundsArray, Config>;
38 MultiFilterItems(
const ItemFilterArray& filters) :
41 ItemFilterArray _filters;
43 void configure(
const Config& config) {}
44 void run(
const RenderContextPointer& renderContext,
const ItemBounds& inItems, ItemBoundsArray& outItems) {
45 auto& scene = renderContext->_scene;
48 for (
size_t i = 0; i < NUM_FILTERS; i++) {
49 outItems[i].template edit<ItemBounds>().clear();
53 for (
auto itemBound : inItems) {
54 auto& item = scene->getItem(itemBound.id);
55 auto itemKey = item.getKey();
56 for (
size_t i = 0; i < NUM_FILTERS; i++) {
57 if (_filters[i].test(itemKey)) {
58 outItems[i].template edit<ItemBounds>().emplace_back(itemBound);
66 class FilterLayeredItems {
68 using Outputs = render::VaryingSet2<ItemBounds, ItemBounds>;
69 using JobModel = Job::ModelIO<FilterLayeredItems, ItemBounds, Outputs>;
71 FilterLayeredItems(
int keepLayer) :
72 _keepLayer(keepLayer) {}
76 void run(
const RenderContextPointer& renderContext,
const ItemBounds& inItems, Outputs& outputs);
80 class SliceItemsConfig :
public Job::Config {
82 Q_PROPERTY(
int rangeOffset MEMBER rangeOffset)
83 Q_PROPERTY(
int rangeLength MEMBER rangeLength)
84 Q_PROPERTY(
int numItems READ getNumItems NOTIFY dirty())
87 int rangeOffset{ -1 };
89 int getNumItems() {
return numItems; }
90 void setNumItems(
int n) { numItems = n; emit dirty(); }
98 using Config = SliceItemsConfig;
99 using JobModel = Job::ModelIO<SliceItems, ItemBounds, ItemBounds, Config>;
102 int _rangeOffset{ -1 };
103 int _rangeLength{ 1 };
105 void configure(
const Config& config) {
106 _rangeOffset = config.rangeOffset;
107 _rangeLength = config.rangeLength;
110 void run(
const RenderContextPointer& renderContext,
const ItemBounds& inItems, ItemBounds& outItems);
116 using Inputs = VaryingSet3<ItemBounds, ItemBounds, std::string>;
117 using Outputs = ItemBounds;
118 using JobModel = Job::ModelIO<SelectItems, Inputs, Outputs>;
122 SelectItems(
const Selection::Name& name) : _name(name) {}
124 void run(
const RenderContextPointer& renderContext,
const Inputs& inputs, ItemBounds& outItems);
128 class SelectSortItems {
130 using JobModel = Job::ModelIO<SelectSortItems, ItemBounds, ItemBounds>;
133 SelectSortItems(
const Selection::Name& name) : _name(name) {}
135 void run(
const RenderContextPointer& renderContext,
const ItemBounds& inItems, ItemBounds& outItems);
139 class MetaToSubItems {
141 using JobModel = Job::ModelIO<MetaToSubItems, ItemBounds, ItemIDs>;
145 void run(
const RenderContextPointer& renderContext,
const ItemBounds& inItems, ItemIDs& outItems);
151 using JobModel = Job::ModelIO<IDsToBounds, ItemIDs, ItemBounds>;
153 IDsToBounds(
bool disableAABBs =
false) : _disableAABBs(disableAABBs) {}
155 void run(
const RenderContextPointer& renderContext,
const ItemIDs& inItems, ItemBounds& outItems);
158 bool _disableAABBs{
false };