24#ifndef PXR_IMAGING_HD_SCENE_INDEX_PLUGIN_REGISTRY_H
25#define PXR_IMAGING_HD_SCENE_INDEX_PLUGIN_REGISTRY_H
30#include "pxr/imaging/hf/pluginRegistry.h"
31#include "pxr/imaging/hd/api.h"
32#include "pxr/imaging/hd/sceneIndex.h"
34PXR_NAMESPACE_OPEN_SCOPE
36#define HDSCENEINDEXPLUGINREGISTRY_TOKENS \
37 ((rendererDisplayName, "__rendererDisplayName")) \
41 HDSCENEINDEXPLUGINREGISTRY_TOKENS);
45class HdSceneIndexPlugin;
54 static HdSceneIndexPluginRegistry &GetInstance();
59 template<
typename T,
typename... Bases>
68 HdSceneIndexBaseRefPtr AppendSceneIndex(
69 const TfToken &sceneIndexPluginId,
70 const HdSceneIndexBaseRefPtr &inputScene,
71 const HdContainerDataSourceHandle &inputArgs);
81 HdSceneIndexBaseRefPtr AppendSceneIndicesForRenderer(
82 const std::string &rendererDisplayName,
83 const HdSceneIndexBaseRefPtr &inputScene,
84 const std::string &renderInstanceId=std::string());
88 InsertionOrderAtStart,
92 using InsertionPhase = int;
103 void RegisterSceneIndexForRenderer(
104 const std::string &rendererDisplayName,
105 const TfToken &sceneIndexPluginId,
106 const HdContainerDataSourceHandle &inputArgs,
107 InsertionPhase insertionPhase,
108 InsertionOrder insertionOrder);
111 using SceneIndexAppendCallback =
113 HdSceneIndexBaseRefPtr(
114 const std::string &renderInstanceId,
115 const HdSceneIndexBaseRefPtr &inputScene,
116 const HdContainerDataSourceHandle &inputArgs)>;
136 void RegisterSceneIndexForRenderer(
137 const std::string &rendererDisplayName,
138 SceneIndexAppendCallback callback,
139 const HdContainerDataSourceHandle &inputArgs,
140 InsertionPhase insertionPhase,
141 InsertionOrder insertionOrder);
151 friend class TfSingleton<HdSceneIndexPluginRegistry>;
154 HdSceneIndexPluginRegistry();
155 ~HdSceneIndexPluginRegistry()
override;
157 HdSceneIndexPlugin *_GetSceneIndexPlugin(
const TfToken &pluginId);
161 _Entry(
const TfToken &sceneIndexPluginId,
162 const HdContainerDataSourceHandle &args)
163 : sceneIndexPluginId(sceneIndexPluginId)
167 _Entry(SceneIndexAppendCallback callback,
168 const HdContainerDataSourceHandle &args)
174 HdContainerDataSourceHandle args;
175 SceneIndexAppendCallback callback;
178 using _EntryList = std::vector<_Entry>;
179 using _PhasesMap = std::map<InsertionPhase, _EntryList>;
180 using _RenderersMap = std::map<std::string, _PhasesMap>;
182 HdSceneIndexBaseRefPtr _AppendForPhases(
183 const HdSceneIndexBaseRefPtr &inputScene,
184 const _PhasesMap &phasesMap,
185 const HdContainerDataSourceHandle &argsUnderlay,
186 const std::string &renderInstanceId);
188 _RenderersMap _sceneIndicesForRenderers;
194 using _PreloadMap = std::map<std::string, TfTokenVector>;
195 _PreloadMap _preloadsForRenderer;
199template<
typename T,
typename... Bases>
200void HdSceneIndexPluginRegistry::Define()
205PXR_NAMESPACE_CLOSE_SCOPE
Base class for registering Hydra plugins using the plug mechanism.
static void Define()
Entry point for registering a types implementation.
virtual HF_API void _CollectAdditionalMetadata(const PlugRegistry &plugRegistry, const TfType &pluginType)
Gives subclasses an opportunity to inspect plugInfo-based metadata at the time of discovery.
Defines an interface for registering plugins.
Manage a single instance of an object (see.
Token for efficient comparison, assignment, and hashing of known strings.
TfType represents a dynamic runtime type.
Manage a single instance of an object.
This file defines some macros that are useful for declaring and using static TfTokens.
#define TF_DECLARE_PUBLIC_TOKENS(...)
Macro to define public tokens.