24#ifndef PXR_IMAGING_HD_SCENE_INDEX_ADAPTER_SCENE_DELEGATE_H
25#define PXR_IMAGING_HD_SCENE_INDEX_ADAPTER_SCENE_DELEGATE_H
27#include "pxr/imaging/hd/sceneDelegate.h"
28#include "pxr/imaging/hd/sceneIndex.h"
29#include "pxr/usd/sdf/pathTable.h"
31#include <tbb/concurrent_unordered_map.h>
33PXR_NAMESPACE_OPEN_SCOPE
49 HdSceneIndexBaseRefPtr inputSceneIndex,
60 HdSceneIndexBaseRefPtr inputSceneIndex,
SdfPath const &delegateID);
97 HdVolumeFieldDescriptorVector GetVolumeFieldDescriptors(
98 SdfPath const &volumeId)
override;
105 float *sampleTimes,
GfMatrix4d *sampleValues)
override;
108 SdfPath const &instancerId)
override;
110 size_t maxSampleCount,
float *sampleTimes,
116 HdPrimvarDescriptorVector
118 SdfPath const &
id, HdInterpolation interpolation)
override;
122 VtIntArray *outIndices)
override;
125 size_t maxSampleCount,
float *sampleTimes,
126 VtValue *sampleValues)
override;
128 size_t maxNumSamples,
float *times,
VtValue *samples,
129 VtIntArray *sampleIndices)
override;
136 SdfPath const &instancerId)
override;
159 TfToken const ¶mName)
override;
165 TfToken const ¶mName)
override;
171 HdExtComputationPrimvarDescriptorVector
173 SdfPath const &
id, HdInterpolation interpolationMode)
override;
177 SdfPath const &computationId)
override;
183 size_t maxSampleCount,
185 VtValue *sampleValues)
override;
188 SdfPath const &computationId)
override;
190 SdfPath const &computationId)
override;
213 using _InputPrimCacheEntry = std::pair<SdfPath, HdSceneIndexPrim>;
216 tbb::concurrent_unordered_map<std::thread::id, _InputPrimCacheEntry,
217 std::hash<std::thread::id> > _inputPrimCache;
224 VtIntArray *outIndices);
227 const HdContainerDataSourceHandle &primvarsDataSource,
229 VtIntArray *outIndices);
236 size_t maxNumSamples,
float *times,
VtValue *samples,
237 VtIntArray *sampleIndices);
239 HdSceneIndexBaseRefPtr _inputSceneIndex;
241 struct _PrimCacheEntry
244 : primvarDescriptorsState(ReadStateUnread)
245 , extCmpPrimvarDescriptorsState(ReadStateUnread)
248 _PrimCacheEntry(
const _PrimCacheEntry &rhs)
250 primType = rhs.primType;
251 primvarDescriptorsState.store(rhs.primvarDescriptorsState.load());
252 extCmpPrimvarDescriptorsState.store(
253 rhs.extCmpPrimvarDescriptorsState.load());
258 enum ReadState :
unsigned char {
264 std::atomic<ReadState> primvarDescriptorsState;
265 std::atomic<ReadState> extCmpPrimvarDescriptorsState;
266 std::map<HdInterpolation, HdPrimvarDescriptorVector>
268 std::map<HdInterpolation, HdExtComputationPrimvarDescriptorVector>
269 extCmpPrimvarDescriptors;
273 _PrimCacheTable _primCache;
275 bool _sceneDelegatesBuilt;
276 std::vector<HdSceneDelegate*> _sceneDelegates;
280 HdDirtyBits _cachedDirtyBits;
284PXR_NAMESPACE_CLOSE_SCOPE
Stores a 4x4 matrix of double elements.
Basic type: 3-dimensional floating point range.
Topology data for basisCurves.
Represents a set of data source locators closed under descendancy.
Interface class that defines the execution environment for the client to run a computation.
Topology data for meshes.
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Describes one or more authored display representations for an rprim.
Adapter class providing data exchange with the client scene graph.
Scene delegate which observes notices from an HdSceneIndex and applies them to an HdRenderIndex.
TfToken GetRenderTag(SdfPath const &id) override
Returns the render tag that will be used to bucket prims during render pass bucketing.
void Sync(HdSyncRequestVector *request) override
Synchronizes the delegate state for the given request vector.
size_t SampleInstancerTransform(SdfPath const &instancerId, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues) override
Store up to maxSampleCount transform samples in *sampleValues.
HdDisplayStyle GetDisplayStyle(SdfPath const &id) override
Returns the refinement level for the given prim in the range [0,8].
TfTokenVector GetExtComputationSceneInputNames(SdfPath const &computationId) override
For the given computation id, returns a list of inputs which will be requested from the scene delegat...
HdExtComputationPrimvarDescriptorVector GetExtComputationPrimvarDescriptors(SdfPath const &id, HdInterpolation interpolationMode) override
Returns a list of primvar names that should be bound to a generated output from an ExtComputation for...
void PrimsRemoved(const HdSceneIndexBase &sender, const RemovedPrimEntries &entries) override
A notification indicating prims have been removed from the scene.
HdRenderBufferDescriptor GetRenderBufferDescriptor(SdfPath const &id) override
Returns the allocation descriptor for a given render buffer prim.
void PrimsRenamed(const HdSceneIndexBase &sender, const RenamedPrimEntries &entries) override
A notification indicating prims (and their descendants) have been renamed or reparented.
size_t SampleExtComputationInput(SdfPath const &computationId, TfToken const &input, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues) override
Return up to maxSampleCount samples for a given computation id and input token.
HdCullStyle GetCullStyle(SdfPath const &id) override
Returns the cullstyle for the given prim.
HdIdVectorSharedPtr GetCoordSysBindings(SdfPath const &id) override
Returns the coordinate system bindings, or a nullptr if none are bound.
size_t SampleIndexedPrimvar(SdfPath const &id, TfToken const &key, size_t maxNumSamples, float *times, VtValue *samples, VtIntArray *sampleIndices) override
SamplePrimvar() for getting an unflattened primvar and its indices.
void PostSyncCleanup() override
Opportunity for the delegate to clean itself up after performing parallel work during sync phase.
bool GetDoubleSided(SdfPath const &id) override
Returns the doubleSided state for the given prim.
HdPrimvarDescriptorVector GetPrimvarDescriptors(SdfPath const &id, HdInterpolation interpolation) override
Returns descriptors for all primvars of the given interpolation type.
SdfPath GetMaterialId(SdfPath const &id) override
Returns the material ID bound to the rprim rprimId.
HdMeshTopology GetMeshTopology(SdfPath const &id) override
Gets the topological mesh data for a given prim.
GfMatrix4d GetInstancerTransform(SdfPath const &instancerId) override
Returns the instancer transform.
HdExtComputationInputDescriptorVector GetExtComputationInputDescriptors(SdfPath const &computationId) override
For the given computation id, returns a list of computation input descriptors.
HdReprSelector GetReprSelector(SdfPath const &id) override
Returns the authored repr (if any) for the given prim.
HdExtComputationOutputDescriptorVector GetExtComputationOutputDescriptors(SdfPath const &computationId) override
For the given computation id, returns a list of computation output descriptors.
std::string GetExtComputationKernel(SdfPath const &computationId) override
Returns the kernel source assigned to the computation at the path id.
std::vector< VtArray< TfToken > > GetInstanceCategories(SdfPath const &instancerId) override
Returns the categories for all instances in the instancer.
void InvokeExtComputation(SdfPath const &computationId, HdExtComputationContext *context) override
Requests the scene delegate run the ExtComputation with the given id.
void PrimsAdded(const HdSceneIndexBase &sender, const AddedPrimEntries &entries) override
A notification indicating prims have been added to the scene.
GfMatrix4d GetTransform(SdfPath const &id) override
Returns the object space transform, including all parent transforms.
HdBasisCurvesTopology GetBasisCurvesTopology(SdfPath const &id) override
Gets the topological curve data for a given prim.
SdfPath GetInstancerId(SdfPath const &primId) override
Returns the parent instancer of the given rprim or instancer.
PxOsdSubdivTags GetSubdivTags(SdfPath const &id) override
Gets the subdivision surface tags (sharpness, holes, etc).
SdfPathVector GetInstancerPrototypes(SdfPath const &instancerId) override
Returns a list of prototypes of this instancer.
void PrimsDirtied(const HdSceneIndexBase &sender, const DirtiedPrimEntries &entries) override
A notification indicating prim datasources have been invalidated.
VtIntArray GetInstanceIndices(SdfPath const &instancerId, SdfPath const &prototypeId) override
Gets the extracted indices array of the prototype id used in the instancer.
bool GetVisible(SdfPath const &id) override
Returns the authored visible state of the prim.
VtValue GetCameraParamValue(SdfPath const &cameraId, TfToken const ¶mName) override
Returns a single value for a given camera and parameter.
VtValue GetExtComputationInput(SdfPath const &computationId, TfToken const &input) override
Returns a single value for a given computation id and input token.
size_t SampleTransform(SdfPath const &id, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues) override
Store up to maxSampleCount transform samples in *sampleValues.
VtValue Get(SdfPath const &id, TfToken const &key) override
Returns a named value.
VtValue GetIndexedPrimvar(SdfPath const &id, TfToken const &key, VtIntArray *outIndices) override
Returns a named primvar value.
VtArray< TfToken > GetCategories(SdfPath const &id) override
Returns the prim categories.
static HdSceneIndexBaseRefPtr AppendDefaultSceneFilters(HdSceneIndexBaseRefPtr inputSceneIndex, SdfPath const &delegateID)
Returns the end of a scene index chain containing the filters necessary for input to an instance of t...
size_t SamplePrimvar(SdfPath const &id, TfToken const &key, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues) override
Store up to maxSampleCount primvar samples in *samplesValues.
VtValue GetShadingStyle(SdfPath const &id) override
Returns the shading style for the given prim.
GfRange3d GetExtent(SdfPath const &id) override
Gets the axis aligned bounds of a prim.
Abstract interface to scene data.
A path value used to locate objects in layers or scenegraphs.
A mapping from SdfPath to MappedType, somewhat similar to map<SdfPath, MappedType> and TfHashMap<SdfP...
Token for efficient comparison, assignment, and hashing of known strings.
Represents an arbitrary dimensional rectangular container class.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Describes how the geometry of a prim should be displayed.
Describes the allocation structure of a render buffer bprim.
Small struct representing a 'prim' in the Hydra scene index.
The SceneDelegate is requested to synchronize prims as the result of executing a specific render pass...
std::vector< TfToken > TfTokenVector
Convenience types.