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);
365 void RemoveSceneIndex(
366 const HdSceneIndexBaseRefPtr &inputScene);
385 HdDriverVector
const& GetDrivers()
const;
421 HdRenderDelegate *renderDelegate,
422 HdDriverVector
const& drivers);
430 void _CompactPrimIds();
433 void _AllocatePrimId(
HdRprim* prim);
441 HdTaskSharedPtr
const& task);
443 template <
typename T>
444 static inline const TfToken & _GetTypeId();
466 void _InsertRprim(
TfToken const& typeId,
469 void _InsertSprim(
TfToken const& typeId,
472 void _InsertBprim(
TfToken const& typeId,
478 void _RemoveRprim(
SdfPath const&
id);
481 void _RemoveInstancer(
SdfPath const&
id);
483 void _RemoveRprimSubtree(
const SdfPath &root,
485 void _RemoveInstancerSubtree(
const SdfPath &root,
487 void _RemoveExtComputationSubtree(
const SdfPath &root,
489 void _RemoveTaskSubtree(
const SdfPath &root,
501 HdLegacyPrimSceneIndexRefPtr _emulationSceneIndex;
502 HdNoticeBatchingSceneIndexRefPtr _emulationNoticeBatchingSceneIndex;
503 unsigned int _noticeBatchingDepth;
505 std::unique_ptr<class HdSceneIndexAdapterSceneDelegate> _siSd;
507 HdMergingSceneIndexRefPtr _mergingSceneIndex;
508 HdSceneIndexBaseRefPtr _terminalSceneIndex;
512 HdTaskSharedPtr task;
515 typedef std::unordered_map<SdfPath, _TaskInfo, SdfPath::Hash> _TaskMap;
516 typedef TfHashMap<SdfPath, _RprimInfo, SdfPath::Hash> _RprimMap;
517 typedef std::vector<SdfPath> _RprimPrimIDVector;
519 typedef Hd_PrimTypeIndex<HdSprim> _SprimIndex;
520 typedef Hd_PrimTypeIndex<HdBprim> _BprimIndex;
523 Hd_SortedIds _rprimIds;
525 _RprimPrimIDVector _rprimPrimIdMap;
529 _SprimIndex _sprimIndex;
530 _BprimIndex _bprimIndex;
534 typedef TfHashMap<SdfPath, HdInstancer*, SdfPath::Hash> _InstancerMap;
535 _InstancerMap _instancerMap;
537 HdRenderDelegate *_renderDelegate;
538 HdDriverVector _drivers;
543 HdRprimCollectionVector _collectionsToSync;
549 void _InitPrimTypes();
552 bool _CreateFallbackPrims();
555 void _DestroyFallbackPrims();
557 typedef tbb::enumerable_thread_specific<HdDrawItemPtrVector>
558 _ConcurrentDrawItems;
560 void _AppendDrawItems(
const SdfPathVector &rprimIds,
564 _ConcurrentDrawItems* result);
569 static void _ConfigureReprs();
580 template <
typename T>
585 HF_MALLOC_TAG_FUNCTION();
587 HdTaskSharedPtr task = std::make_shared<T>(delegate,
id);
588 _TrackDelegateTask(delegate,
id, task);
591 PXR_NAMESPACE_CLOSE_SCOPE
593 #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.