24 #ifndef PXR_IMAGING_HD_RENDER_INDEX_H 25 #define PXR_IMAGING_HD_RENDER_INDEX_H 28 #include "pxr/imaging/hd/api.h" 29 #include "pxr/imaging/hd/version.h" 30 #include "pxr/imaging/hd/changeTracker.h" 31 #include "pxr/imaging/hd/dirtyList.h" 32 #include "pxr/imaging/hd/perfLog.h" 33 #include "pxr/imaging/hd/primTypeIndex.h" 34 #include "pxr/imaging/hd/resourceRegistry.h" 35 #include "pxr/imaging/hd/sortedIds.h" 36 #include "pxr/imaging/hd/tokens.h" 38 #include "pxr/imaging/hd/sceneIndex.h" 39 #include "pxr/imaging/hd/mergingSceneIndex.h" 40 #include "pxr/imaging/hd/legacyPrimSceneIndex.h" 41 #include "pxr/imaging/hd/noticeBatchingSceneIndex.h" 43 #include "pxr/imaging/hf/perfLog.h" 45 #include "pxr/usd/sdf/path.h" 48 #include "pxr/base/tf/hashmap.h" 50 #include <tbb/enumerable_thread_specific.h> 53 #include <unordered_map> 56 PXR_NAMESPACE_OPEN_SCOPE
64 class HdRenderDelegate;
70 using HdDriverVector = std::vector<HdDriver*>;
71 using HdRprimCollectionVector = std::vector<HdRprimCollection>;
72 using HdTaskSharedPtr = std::shared_ptr<class HdTask>;
73 using HdResourceRegistrySharedPtr = std::shared_ptr<class HdResourceRegistry>;
74 using HdTaskSharedPtrVector = std::vector<HdTaskSharedPtr>;
75 using HdTaskContext = std::unordered_map<
TfToken,
123 typedef std::vector<HdDrawItem const*> HdDrawItemPtrVector;
135 HdRenderDelegate *renderDelegate,
136 HdDriverVector
const& drivers);
174 void SyncAll(HdTaskSharedPtrVector *tasks, HdTaskContext *taskContext);
215 return _rprimMap.find(
id) != _rprimMap.end();
267 return _instancerMap.find(
id) != _instancerMap.end();
279 template <
typename T>
288 return _taskMap.find(
id) != _taskMap.end();
360 void InsertSceneIndex(
361 const HdSceneIndexBaseRefPtr &inputScene,
362 SdfPath const& scenePathPrefix,
363 bool needsPrefixing =
true);
366 void RemoveSceneIndex(
367 const HdSceneIndexBaseRefPtr &inputScene);
386 HdDriverVector
const& GetDrivers()
const;
422 HdRenderDelegate *renderDelegate,
423 HdDriverVector
const& drivers);
431 void _CompactPrimIds();
434 void _AllocatePrimId(
HdRprim* prim);
442 HdTaskSharedPtr
const& task);
444 template <
typename T>
445 static inline const TfToken & _GetTypeId();
467 void _InsertRprim(
TfToken const& typeId,
470 void _InsertSprim(
TfToken const& typeId,
473 void _InsertBprim(
TfToken const& typeId,
479 void _RemoveRprim(
SdfPath const&
id);
482 void _RemoveInstancer(
SdfPath const&
id);
484 void _RemoveRprimSubtree(
const SdfPath &root,
486 void _RemoveInstancerSubtree(
const SdfPath &root,
488 void _RemoveExtComputationSubtree(
const SdfPath &root,
490 void _RemoveTaskSubtree(
const SdfPath &root,
502 HdLegacyPrimSceneIndexRefPtr _emulationSceneIndex;
503 HdNoticeBatchingSceneIndexRefPtr _emulationNoticeBatchingSceneIndex;
504 unsigned int _noticeBatchingDepth;
506 std::unique_ptr<class HdSceneIndexAdapterSceneDelegate> _siSd;
508 HdMergingSceneIndexRefPtr _mergingSceneIndex;
509 HdSceneIndexBaseRefPtr _terminalSceneIndex;
513 HdTaskSharedPtr task;
516 typedef std::unordered_map<SdfPath, _TaskInfo, SdfPath::Hash> _TaskMap;
517 typedef TfHashMap<SdfPath, _RprimInfo, SdfPath::Hash> _RprimMap;
518 typedef std::vector<SdfPath> _RprimPrimIDVector;
520 typedef Hd_PrimTypeIndex<HdSprim> _SprimIndex;
521 typedef Hd_PrimTypeIndex<HdBprim> _BprimIndex;
524 Hd_SortedIds _rprimIds;
526 _RprimPrimIDVector _rprimPrimIdMap;
530 _SprimIndex _sprimIndex;
531 _BprimIndex _bprimIndex;
535 typedef TfHashMap<SdfPath, HdInstancer*, SdfPath::Hash> _InstancerMap;
536 _InstancerMap _instancerMap;
538 HdRenderDelegate *_renderDelegate;
539 HdDriverVector _drivers;
544 HdRprimCollectionVector _collectionsToSync;
550 void _InitPrimTypes();
553 bool _CreateFallbackPrims();
556 void _DestroyFallbackPrims();
558 typedef tbb::enumerable_thread_specific<HdDrawItemPtrVector>
559 _ConcurrentDrawItems;
561 void _AppendDrawItems(
const SdfPathVector &rprimIds,
565 _ConcurrentDrawItems* result);
570 static void _ConfigureReprs();
581 template <
typename T>
586 HF_MALLOC_TAG_FUNCTION();
588 HdTaskSharedPtr task = std::make_shared<T>(delegate,
id);
589 _TrackDelegateTask(delegate,
id, task);
592 PXR_NAMESPACE_CLOSE_SCOPE
594 #endif //PXR_IMAGING_HD_RENDER_INDEX_H Hydra Representation of a Client defined computation.
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
HD_API bool IsRprimTypeSupported(TfToken const &typeId) const
Returns whether the rprim type is supported by this render index.
HD_API void InsertBprim(TfToken const &typeId, HdSceneDelegate *delegate, SdfPath const &bprimId)
Insert a bprim into index.
HD_API HdRenderDelegate * GetRenderDelegate() const
Currently, a render index only supports connection to one type of render delegate,...
HD_API HdRprim const * GetRprim(SdfPath const &id) const
Returns the rprim of id.
Tracks changes from the HdSceneDelegate, providing invalidation cues to the render engine.
This class exists to facilitate point cloud style instancing.
HD_API void RemoveSubtree(const SdfPath &root, HdSceneDelegate *sceneDelegate)
Clear all entries in the render index under the given root and belong to a specified delegate.
Functor to use for hash maps from tokens to other things.
HD_API void InsertInstancer(HdSceneDelegate *delegate, SdfPath const &id)
Insert an instancer into index.
HD_API void SceneIndexEmulationNoticeBatchBegin()
An application or legacy scene delegate may prefer for the scene index observer notices generated fro...
HD_API void InsertSprim(TfToken const &typeId, HdSceneDelegate *delegate, SdfPath const &sprimId)
Insert a sprim into index.
HD_API void InsertRprim(TfToken const &typeId, HdSceneDelegate *sceneDelegate, SdfPath const &rprimId)
Insert a rprim into index.
HD_API const SdfPathVector & GetRprimIds()
Returns a sorted list of all Rprims in the render index.
HD_API void RemoveRprim(SdfPath const &id)
Remove a rprim from index.
Scene delegate which observes notices from an HdSceneIndex and applies them to an HdRenderIndex.
Token for efficient comparison, assignment, and hashing of known strings.
HdDriver represents a device object, commonly a render device, that is owned by the application and p...
The render engine state for a given rprim from the scene graph.
HD_API HdSceneIndexBaseRefPtr GetTerminalSceneIndex() const
The terminal scene index that is driving what is in the render index through emulation.
HD_API void Clear()
Clear all r (render), s (state) and b (buffer) prims.
HD_API HdInstancer * GetInstancer(SdfPath const &id) const
Returns the instancer of id.
HD_API void RemoveTask(SdfPath const &id)
Removes the given task from the RenderIndex.
HD_API void SyncAll(HdTaskSharedPtrVector *tasks, HdTaskContext *taskContext)
Syncs input tasks, B & S prims, (external) computations and updates the Rprim dirty list to then sync...
Adapter class providing data exchange with the client scene graph.
HD_API HdSprim * GetFallbackSprim(TfToken const &typeId) const
Returns the fullback prim for the Sprim of the given type.
bool HasInstancer(SdfPath const &id)
Returns true if instancer id exists in index.
HD_API bool IsBprimTypeSupported(TfToken const &typeId) const
Returns whether the bprim type is supported by this render index.
std::vector< TfToken > TfTokenVector
Convenience types.
bool HasTask(SdfPath const &id)
Returns true if a task exists in the index with the given id.
A named, semantic collection of objects.
A path value used to locate objects in layers or scenegraphs.
HD_API bool IsSprimTypeSupported(TfToken const &typeId) const
Returns whether the sprim type is supported by this render index.
HD_API SdfPathVector GetRprimSubtree(SdfPath const &root)
Returns the subtree rooted under the given path.
Used for faster iteration of dirty Rprims by the render index.
bool HasRprim(SdfPath const &id)
Returns true if rprim id exists in index.
HD_API SdfPathVector GetBprimSubtree(TfToken const &typeId, SdfPath const &root)
Returns the subtree rooted under the given path for the given bprim type.
Sprim (state prim) is a base class of managing state for non-drawable scene entity (e....
HD_API HdSceneDelegate * GetSceneDelegateForRprim(SdfPath const &id) const
Returns the scene delegate for the given rprim.
A draw item is a light-weight representation of an HdRprim's resources and material to be used for re...
static HD_API HdRenderIndex * New(HdRenderDelegate *renderDelegate, HdDriverVector const &drivers)
Create a render index with the given render delegate.
HD_API HdDrawItemPtrVector GetDrawItems(HdRprimCollection const &collection, TfTokenVector const &renderTags)
Returns a list of relevant draw items that match the criteria specified.
Bprim (buffer prim) is a base class of managing a blob of data that is used to communicate between th...
HD_API void SceneIndexEmulationNoticeBatchEnd()
Flushes any queued scene index observer notices and disables further queueing.
HD_API void EnqueueCollectionToSync(HdRprimCollection const &collection)
Hydra's core currently needs to know the collections used by tasks to aggregate the reprs that need t...
void InsertTask(HdSceneDelegate *delegate, SdfPath const &id)
Inserts a new task into the render index with an identifier of id.
HD_API HdBprim * GetFallbackBprim(TfToken const &typeId) const
Returns the fallback prim for the Bprim of the given type.
TfToken UpdateRenderTag(SdfPath const &id, HdDirtyBits bits)
Like GetRenderTag, but updates the render tag if dirty.
static HD_API bool IsSceneIndexEmulationEnabled()
Returns true if scene index features are available This is true by default but can be controlled via ...
HD_API bool GetSceneDelegateAndInstancerIds(SdfPath const &id, SdfPath *sceneDelegateId, SdfPath *instancerId) const
Query function to return the id's of the scene delegate and instancer associated with the Rprim at th...
HD_API void RemoveInstancer(SdfPath const &id)
Remove an instancer from index.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
HD_API SdfPath GetRprimPathFromPrimId(int primId) const
Given a prim id, returns the path of the corresponding rprim or an empty path if none is found.
HD_API SdfPathVector GetSprimSubtree(TfToken const &typeId, SdfPath const &root)
Returns the subtree rooted under the given path for the given sprim type.
HD_API TfToken GetRenderTag(SdfPath const &id) const
Returns the render tag for the given rprim.
HD_API HdTaskSharedPtr const & GetTask(SdfPath const &id) const
Returns the task for the given id.
HD_API HdResourceRegistrySharedPtr GetResourceRegistry() const
Returns a shared ptr to the resource registry of the current render delegate.