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;
96 void RegisterSceneIndexForRenderer(
97 const std::string &rendererDisplayName,
98 const TfToken &sceneIndexPluginId,
99 const HdContainerDataSourceHandle &inputArgs,
100 InsertionPhase insertionPhase,
101 InsertionOrder insertionOrder);
104 using SceneIndexAppendCallback =
106 HdSceneIndexBaseRefPtr(
107 const std::string &renderInstanceId,
108 const HdSceneIndexBaseRefPtr &inputScene,
109 const HdContainerDataSourceHandle &inputArgs)>;
129 void RegisterSceneIndexForRenderer(
130 const std::string &rendererDisplayName,
131 SceneIndexAppendCallback callback,
132 const HdContainerDataSourceHandle &inputArgs,
133 InsertionPhase insertionPhase,
134 InsertionOrder insertionOrder);
144 friend class TfSingleton<HdSceneIndexPluginRegistry>;
147 HdSceneIndexPluginRegistry();
148 ~HdSceneIndexPluginRegistry()
override;
150 void _LoadPluginsForRenderer(
151 const std::string &rendererDisplayName,
152 const std::string &appName);
154 HdSceneIndexPlugin *_GetSceneIndexPlugin(
const TfToken &pluginId);
158 _Entry(
const TfToken &sceneIndexPluginId,
159 const HdContainerDataSourceHandle &args)
160 : sceneIndexPluginId(sceneIndexPluginId)
164 _Entry(SceneIndexAppendCallback callback,
165 const HdContainerDataSourceHandle &args)
171 HdContainerDataSourceHandle args;
172 SceneIndexAppendCallback callback;
175 using _EntryList = std::vector<_Entry>;
176 using _PhasesMap = std::map<InsertionPhase, _EntryList>;
177 using _RenderersMap = std::map<std::string, _PhasesMap>;
179 HdSceneIndexBaseRefPtr _AppendForPhases(
180 const HdSceneIndexBaseRefPtr &inputScene,
181 const _PhasesMap &phasesMap,
182 const HdContainerDataSourceHandle &argsUnderlay,
183 const std::string &renderInstanceId);
185 _RenderersMap _sceneIndicesForRenderers;
191 using _PreloadMap = std::map<std::string, TfTokenVector>;
192 _PreloadMap _preloadsForRenderer;
199 using _EnabledAppsMap = std::map<TfToken, std::set<std::string>>;
200 _EnabledAppsMap _preloadAppsForPlugins;
203template<
typename T,
typename... Bases>
204void HdSceneIndexPluginRegistry::Define()
209PXR_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.