7 #ifndef PXR_IMAGING_HD_GP_GENERATIVE_PROCEDURAL_RESOLVING_SCENE_INDEX_H
8 #define PXR_IMAGING_HD_GP_GENERATIVE_PROCEDURAL_RESOLVING_SCENE_INDEX_H
14 #include <tbb/concurrent_unordered_map.h>
16 #include <unordered_map>
17 #include <unordered_set>
50 static HdGpGenerativeProceduralResolvingSceneIndexRefPtr
New(
51 const HdSceneIndexBaseRefPtr &inputScene) {
56 static HdGpGenerativeProceduralResolvingSceneIndexRefPtr
New(
57 const HdSceneIndexBaseRefPtr &inputScene,
58 const TfToken &targetPrimTypeName) {
61 inputScene, targetPrimTypeName));
72 const HdSceneIndexBaseRefPtr &inputScene);
75 const HdSceneIndexBaseRefPtr &inputScene,
76 const TfToken &targetPrimTypeName);
96 const HdDataSourceBaseHandle &
args)
override;
108 static void _CombinePathArrays(
const _DensePathSet &
s,
SdfPathVector *
v);
113 enum State :
unsigned char {
115 StateDependenciesCooking,
116 StateDependenciesCooked,
124 std::atomic<State>
state;
126 std::shared_ptr<HdGpGenerativeProcedural>
proc;
129 _PathSetMap childHierarchy;
130 std::mutex cookMutex;
134 :
state(StateUncooked)
137 _ProcEntry(
const _ProcEntry &rhs)
139 state.store(rhs.state.load());
141 typeName = rhs.typeName;
142 childTypes = rhs.childTypes;
143 dependencies = rhs.dependencies;
144 childHierarchy = rhs.childHierarchy;
148 TF_DECLARE_WEAK_PTRS(_ProcEntry);
150 struct _GeneratedPrimEntry
152 _GeneratedPrimEntry()
153 : responsibleProc(nullptr)
156 _GeneratedPrimEntry(_ProcEntry * p)
160 _GeneratedPrimEntry(
const _GeneratedPrimEntry &rhs)
162 responsibleProc.store(rhs.responsibleProc.load());
164 std::atomic<_ProcEntry *> responsibleProc;
167 using _GeneratedPrimsMap = tbb::concurrent_unordered_map<
170 using _ProcEntryMap =
171 std::unordered_map<SdfPath, _ProcEntry, TfHash>;
173 using _WeakProcEntryMap =
174 tbb::concurrent_unordered_map<SdfPath, _ProcEntryPtr, TfHash>;
176 using _PathSet = std::unordered_set<SdfPath, TfHash>;
178 using _DependencyMap =
179 std::unordered_map<SdfPath, _PathSet, SdfPath::Hash>;
190 _ProcEntry * _UpdateProceduralDependencies(
191 const SdfPath &proceduralPrimPath,
192 _Notices* outputNotices)
const;
194 _ProcEntry * _UpdateProcedural(
195 const SdfPath &proceduralPrimPath,
197 _Notices *outputNotices,
199 *dirtiedDependencies =
nullptr
203 void _UpdateProceduralResult(
204 _ProcEntry *procEntry,
205 const SdfPath &proceduralPrimPath,
207 _Notices *outputNotices)
const;
210 void _RemoveProcedural(
211 const SdfPath &proceduralPrimPath,
212 _Notices *outputNotices=
nullptr)
const;
218 void _GarbageCollect();
222 mutable _ProcEntryMap _procedurals;
224 mutable _WeakProcEntryMap _activeSyncProcedurals;
227 mutable _DependencyMap _dependencies;
229 mutable _GeneratedPrimsMap _generatedPrims;
232 using _MapMutex = std::mutex;
233 using _MapLock = std::lock_guard<_MapMutex>;
234 mutable _MapMutex _dependenciesMutex;
235 mutable _MapMutex _proceduralsMutex;
HdGpGenerativeProceduralResolvingSceneIndex(const HdSceneIndexBaseRefPtr &inputScene)
TfRefPtr< T > TfCreateRefPtr(T *ptr)
TF_DECLARE_REF_PTRS(HdGpGenerativeProceduralResolvingSceneIndex)
static HdGpGenerativeProceduralResolvingSceneIndexRefPtr New(const HdSceneIndexBaseRefPtr &inputScene, const TfToken &targetPrimTypeName)
SdfPathVector GetChildPrimPaths(const SdfPath &primPath) const override
std::vector< class SdfPath > SdfPathVector
static HdGpGenerativeProceduralResolvingSceneIndexRefPtr New(const HdSceneIndexBaseRefPtr &inputScene)
void _PrimsRemoved(const HdSceneIndexBase &sender, const HdSceneIndexObserver::RemovedPrimEntries &entries) override
HdSceneIndexPrim GetPrim(const SdfPath &primPath) const override
SATISFYING HdSceneIndexBase ///////////////////////////////////////////.
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
void _PrimsDirtied(const HdSceneIndexBase &sender, const HdSceneIndexObserver::DirtiedPrimEntries &entries) override
**If you just want to fire and args
void _SystemMessage(const TfToken &messageType, const HdDataSourceBaseHandle &args) override
void _PrimsAdded(const HdSceneIndexBase &sender, const HdSceneIndexObserver::AddedPrimEntries &entries) override
SATISFYING HdSingleInputFilteringSceneIndexBase ///////////////////////.