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,
55 const std::string &renderInstanceId=std::string());
73 HdSceneIndexBaseRefPtr AppendSceneIndicesForRenderer(
74 const std::string &rendererDisplayName,
75 const HdSceneIndexBaseRefPtr &inputScene,
76 const std::string &renderInstanceId=std::string(),
77 const std::string &appName=std::string());
81 InsertionOrderAtStart,
85 using InsertionPhase = int;
128 void RegisterSceneIndexForRenderer(
129 const std::string &rendererDisplayName,
130 const TfToken &sceneIndexPluginId,
131 const HdContainerDataSourceHandle &inputArgs,
132 InsertionPhase insertionPhase,
133 InsertionOrder insertionOrder);
136 using SceneIndexAppendCallback =
138 HdSceneIndexBaseRefPtr(
139 const std::string &renderInstanceId,
140 const HdSceneIndexBaseRefPtr &inputScene,
141 const HdContainerDataSourceHandle &inputArgs)>;
176 void RegisterSceneIndexForRenderer(
177 const std::string &rendererDisplayName,
178 SceneIndexAppendCallback callback,
179 const HdContainerDataSourceHandle &inputArgs,
180 InsertionPhase insertionPhase,
181 InsertionOrder insertionOrder);
189 friend class TfSingleton<HdSceneIndexPluginRegistry>;
192 HdSceneIndexPluginRegistry();
193 ~HdSceneIndexPluginRegistry()
override;
195 void _LoadPluginsForRenderer(
196 const std::string &rendererDisplayName,
197 const std::string &appName);
199 HdSceneIndexPlugin *_GetSceneIndexPlugin(
const TfToken &pluginId);
203 _Entry(
const TfToken &sceneIndexPluginId,
204 const HdContainerDataSourceHandle &args)
205 : sceneIndexPluginId(sceneIndexPluginId)
209 _Entry(SceneIndexAppendCallback callback,
210 const HdContainerDataSourceHandle &args)
216 HdContainerDataSourceHandle args;
217 SceneIndexAppendCallback callback;
220 using _EntryList = std::vector<_Entry>;
221 using _PhasesMap = std::map<InsertionPhase, _EntryList>;
222 using _RenderersMap = std::map<std::string, _PhasesMap>;
224 HdSceneIndexBaseRefPtr _AppendForPhases(
225 const HdSceneIndexBaseRefPtr &inputScene,
226 const _PhasesMap &phasesMap,
227 const HdContainerDataSourceHandle &argsUnderlay,
228 const std::string &renderInstanceId);
230 _RenderersMap _sceneIndicesForRenderers;
236 using _PreloadMap = std::map<std::string, TfTokenVector>;
237 _PreloadMap _preloadsForRenderer;
244 using _EnabledAppsMap = std::map<TfToken, std::set<std::string>>;
245 _EnabledAppsMap _preloadAppsForPlugins;
248template<
typename T,
typename... Bases>
249void HdSceneIndexPluginRegistry::Define()
254PXR_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.