7#ifndef PXR_IMAGING_HD_SCENE_INDEX_PLUGIN_REGISTRY_H
8#define PXR_IMAGING_HD_SCENE_INDEX_PLUGIN_REGISTRY_H
13#include "pxr/imaging/hf/pluginRegistry.h"
14#include "pxr/imaging/hd/api.h"
15#include "pxr/imaging/hd/sceneIndex.h"
17PXR_NAMESPACE_OPEN_SCOPE
19#define HDSCENEINDEXPLUGINREGISTRY_TOKENS \
20 ((rendererDisplayName, "__rendererDisplayName")) \
24 HDSCENEINDEXPLUGINREGISTRY_TOKENS);
28class HdSceneIndexPlugin;
37 static HdSceneIndexPluginRegistry &GetInstance();
42 template<
typename T,
typename... Bases>
51 HdSceneIndexBaseRefPtr AppendSceneIndex(
52 const TfToken &sceneIndexPluginId,
53 const HdSceneIndexBaseRefPtr &inputScene,
54 const HdContainerDataSourceHandle &inputArgs);
64 HdSceneIndexBaseRefPtr AppendSceneIndicesForRenderer(
65 const std::string &rendererDisplayName,
66 const HdSceneIndexBaseRefPtr &inputScene,
67 const std::string &renderInstanceId=std::string());
71 InsertionOrderAtStart,
75 using InsertionPhase = int;
86 void RegisterSceneIndexForRenderer(
87 const std::string &rendererDisplayName,
88 const TfToken &sceneIndexPluginId,
89 const HdContainerDataSourceHandle &inputArgs,
90 InsertionPhase insertionPhase,
91 InsertionOrder insertionOrder);
94 using SceneIndexAppendCallback =
96 HdSceneIndexBaseRefPtr(
97 const std::string &renderInstanceId,
98 const HdSceneIndexBaseRefPtr &inputScene,
99 const HdContainerDataSourceHandle &inputArgs)>;
119 void RegisterSceneIndexForRenderer(
120 const std::string &rendererDisplayName,
121 SceneIndexAppendCallback callback,
122 const HdContainerDataSourceHandle &inputArgs,
123 InsertionPhase insertionPhase,
124 InsertionOrder insertionOrder);
134 friend class TfSingleton<HdSceneIndexPluginRegistry>;
137 HdSceneIndexPluginRegistry();
138 ~HdSceneIndexPluginRegistry()
override;
140 HdSceneIndexPlugin *_GetSceneIndexPlugin(
const TfToken &pluginId);
144 _Entry(
const TfToken &sceneIndexPluginId,
145 const HdContainerDataSourceHandle &args)
146 : sceneIndexPluginId(sceneIndexPluginId)
150 _Entry(SceneIndexAppendCallback callback,
151 const HdContainerDataSourceHandle &args)
157 HdContainerDataSourceHandle args;
158 SceneIndexAppendCallback callback;
161 using _EntryList = std::vector<_Entry>;
162 using _PhasesMap = std::map<InsertionPhase, _EntryList>;
163 using _RenderersMap = std::map<std::string, _PhasesMap>;
165 HdSceneIndexBaseRefPtr _AppendForPhases(
166 const HdSceneIndexBaseRefPtr &inputScene,
167 const _PhasesMap &phasesMap,
168 const HdContainerDataSourceHandle &argsUnderlay,
169 const std::string &renderInstanceId);
171 _RenderersMap _sceneIndicesForRenderers;
177 using _PreloadMap = std::map<std::string, TfTokenVector>;
178 _PreloadMap _preloadsForRenderer;
182template<
typename T,
typename... Bases>
183void HdSceneIndexPluginRegistry::Define()
188PXR_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.