7#ifndef PXR_IMAGING_HD_SCENE_DELEGATE_H
8#define PXR_IMAGING_HD_SCENE_DELEGATE_H
11#include "pxr/imaging/hd/api.h"
12#include "pxr/imaging/hd/version.h"
14#include "pxr/imaging/hd/aov.h"
15#include "pxr/imaging/hd/basisCurvesTopology.h"
16#include "pxr/imaging/hd/enums.h"
17#include "pxr/imaging/hd/meshTopology.h"
18#include "pxr/imaging/hd/renderIndex.h"
19#include "pxr/imaging/hd/repr.h"
20#include "pxr/imaging/hd/timeSampleArray.h"
26#include "pxr/base/vt/value.h"
28#include "pxr/usd/sdf/path.h"
36PXR_NAMESPACE_OPEN_SCOPE
41typedef std::shared_ptr<SdfPathVector> HdIdVectorSharedPtr;
44typedef std::vector<std::pair<SdfPath, int>> HdInstancerContext;
57 std::vector<HdDirtyBits> dirtyBits;
114 bool flatShading =
false,
115 bool displacement =
true,
116 bool occludedSelectionShowsThrough_ =
false,
117 bool pointsShadingEnabled_ =
false,
118 bool materialIsFinal_ =
false)
126 if (refineLevel_ < 0) {
128 }
else if (refineLevel_ > 8) {
146 return !(*
this == rhs);
168 ,
role(HdPrimvarRoleTokens->none)
172 HdInterpolation interp_,
173 TfToken const& role_=HdPrimvarRoleTokens->none,
182 return !(*
this == rhs);
186typedef std::vector<HdPrimvarDescriptor> HdPrimvarDescriptorVector;
220 : drawMode(HdModelDrawModeTokens->inherited)
221 , applyDrawMode(
false)
223 , cardGeometry(HdModelDrawModeTokens->cross)
228 bool applyDrawMode_=
false,
230 TfToken const& cardGeometry_=HdModelDrawModeTokens->cross,
237 : drawMode(drawMode_), applyDrawMode(applyDrawMode_),
238 drawModeColor(drawModeColor_), cardGeometry(cardGeometry_),
239 cardTextureXPos(cardTextureXPos_), cardTextureYPos(cardTextureYPos_),
240 cardTextureZPos(cardTextureZPos_), cardTextureXNeg(cardTextureXNeg_),
241 cardTextureYNeg(cardTextureYNeg_), cardTextureZNeg(cardTextureZNeg_)
245 return drawMode == rhs.drawMode &&
246 applyDrawMode == rhs.applyDrawMode &&
247 drawModeColor == rhs.drawModeColor &&
248 cardGeometry == rhs.cardGeometry &&
249 cardTextureXPos == rhs.cardTextureXPos &&
250 cardTextureYPos == rhs.cardTextureYPos &&
251 cardTextureZPos == rhs.cardTextureZPos &&
252 cardTextureXNeg == rhs.cardTextureXNeg &&
253 cardTextureYNeg == rhs.cardTextureYNeg &&
254 cardTextureZNeg == rhs.cardTextureZNeg;
257 return !(*
this == rhs);
272 TfToken sourceComputationOutputName;
278 HdInterpolation interp_,
280 SdfPath const & sourceComputationId_,
281 TfToken const & sourceComputationOutputName_,
284 , sourceComputationId(sourceComputationId_)
285 , sourceComputationOutputName(sourceComputationOutputName_)
286 , valueType(valueType_)
289 return HdPrimvarDescriptor::operator==(rhs) &&
290 sourceComputationId == rhs.sourceComputationId &&
291 sourceComputationOutputName == rhs.sourceComputationOutputName &&
292 valueType == rhs.valueType;
295 return !(*
this == rhs);
299typedef std::vector<HdExtComputationPrimvarDescriptor>
300 HdExtComputationPrimvarDescriptorVector;
313 TfToken sourceComputationOutputName;
318 SdfPath const & sourceComputationId_,
319 TfToken const & sourceComputationOutputName_)
320 : name(name_), sourceComputationId(sourceComputationId_)
321 , sourceComputationOutputName(sourceComputationOutputName_)
325 return name == rhs.name &&
326 sourceComputationId == rhs.sourceComputationId &&
327 sourceComputationOutputName == rhs.sourceComputationOutputName;
330 return !(*
this == rhs);
334typedef std::vector<HdExtComputationInputDescriptor>
335 HdExtComputationInputDescriptorVector;
351 : name(name_), valueType(valueType_)
355 return name == rhs.name &&
356 valueType == rhs.valueType;
359 return !(*
this == rhs);
363typedef std::vector<HdExtComputationOutputDescriptor>
364 HdExtComputationOutputDescriptorVector;
378 TfToken const & fieldPrimType_,
380 : fieldName(fieldName_), fieldPrimType(fieldPrimType_), fieldId(fieldId_)
384typedef std::vector<HdVolumeFieldDescriptor>
385 HdVolumeFieldDescriptorVector;
493 VtIntArray *outIndices);
511 virtual std::vector<VtArray<TfToken>>
536 size_t maxSampleCount,
548 size_t maxSampleCount,
555 template <
unsigned int CAPACITY>
563 template <
unsigned int CAPACITY>
580 size_t maxSampleCount,
593 size_t maxSampleCount,
601 template <
unsigned int CAPACITY>
610 template <
unsigned int CAPACITY>
613 float startTime,
float endTime,
637 size_t maxSampleCount,
650 size_t maxSampleCount,
657 template <
unsigned int CAPACITY>
666 template <
unsigned int CAPACITY>
683 size_t maxSampleCount,
686 VtIntArray *sampleIndices);
697 size_t maxSampleCount,
700 VtIntArray *sampleIndices);
706 template <
unsigned int CAPACITY>
715 template <
unsigned int CAPACITY>
769 HdInstancerContext *instancerContext =
nullptr);
778 std::vector<int> instanceIndices,
779 std::vector<HdInstancerContext> *instancerContexts =
nullptr);
826 virtual HdVolumeFieldDescriptorVector
827 GetVolumeFieldDescriptors(
SdfPath const &volumeId);
850 virtual HdExtComputationInputDescriptorVector
858 virtual HdExtComputationOutputDescriptorVector
870 virtual HdExtComputationPrimvarDescriptorVector
872 HdInterpolation interpolationMode);
890 size_t maxSampleCount,
902 size_t maxSampleCount,
910 template <
unsigned int CAPACITY>
919 template <
unsigned int CAPACITY>
952 virtual HdPrimvarDescriptorVector
970template <
unsigned int CAPACITY>
974 size_t authoredSamples =
976 if (authoredSamples > CAPACITY) {
977 sa->
Resize(authoredSamples);
978 size_t authoredSamplesSecondAttempt =
986 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
988 sa->count = authoredSamples;
991template <
unsigned int CAPACITY>
997 size_t authoredSamples =
999 sa->times.
data(), sa->values.
data());
1000 if (authoredSamples > CAPACITY) {
1001 sa->
Resize(authoredSamples);
1002 size_t authoredSamplesSecondAttempt =
1012 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1014 sa->count = authoredSamples;
1017template <
unsigned int CAPACITY>
1022 size_t authoredSamples =
1028 if (authoredSamples > CAPACITY) {
1029 sa->
Resize(authoredSamples);
1030 size_t authoredSamplesSecondAttempt =
1038 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1040 sa->count = authoredSamples;
1043template <
unsigned int CAPACITY>
1047 float startTime,
float endTime,
1049 size_t authoredSamples =
1057 if (authoredSamples > CAPACITY) {
1058 sa->
Resize(authoredSamples);
1059 size_t authoredSamplesSecondAttempt =
1069 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1071 sa->count = authoredSamples;
1074template <
unsigned int CAPACITY>
1079 size_t authoredSamples =
1086 if (authoredSamples > CAPACITY) {
1087 sa->
Resize(authoredSamples);
1088 size_t authoredSamplesSecondAttempt =
1097 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1099 sa->count = authoredSamples;
1102template <
unsigned int CAPACITY>
1109 size_t authoredSamples =
1118 if (authoredSamples > CAPACITY) {
1119 sa->
Resize(authoredSamples);
1120 size_t authoredSamplesSecondAttempt =
1131 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1133 sa->count = authoredSamples;
1136template <
unsigned int CAPACITY>
1141 size_t authoredSamples =
1148 sa->indices.
data());
1149 if (authoredSamples > CAPACITY) {
1150 sa->
Resize(authoredSamples);
1151 size_t authoredSamplesSecondAttempt =
1158 sa->indices.
data());
1161 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1163 sa->count = authoredSamples;
1166template <
unsigned int CAPACITY>
1173 size_t authoredSamples =
1182 sa->indices.
data());
1183 if (authoredSamples > CAPACITY) {
1184 sa->
Resize(authoredSamples);
1185 size_t authoredSamplesSecondAttempt =
1194 sa->indices.
data());
1197 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1199 sa->count = authoredSamples;
1202template <
unsigned int CAPACITY>
1209 computationId, input, CAPACITY,
1210 sa->times.
data(), sa->values.
data());
1212 if (authoredSamples > CAPACITY) {
1213 sa->
Resize(authoredSamples);
1215 computationId, input, authoredSamples,
1216 sa->times.
data(), sa->values.
data());
1219 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1221 sa->count = authoredSamples;
1224template <
unsigned int CAPACITY>
1233 computationId, input, startTime, endTime, CAPACITY,
1234 sa->times.
data(), sa->values.
data());
1236 if (authoredSamples > CAPACITY) {
1237 sa->
Resize(authoredSamples);
1239 computationId, input, startTime, endTime, authoredSamples,
1240 sa->times.
data(), sa->values.
data());
1243 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
1245 sa->count = authoredSamples;
1248PXR_NAMESPACE_CLOSE_SCOPE
Stores a 4x4 matrix of double elements.
Basic type: 3-dimensional floating point range.
Basic type for a vector of 3 float components.
Topology data for basisCurves.
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.
virtual HD_API HdRenderBufferDescriptor GetRenderBufferDescriptor(SdfPath const &id)
Returns the allocation descriptor for a given render buffer prim.
virtual HD_API size_t SampleIndexedPrimvar(SdfPath const &id, TfToken const &key, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues, VtIntArray *sampleIndices)
SamplePrimvar() for getting an unflattened primvar and its indices.
virtual HD_API TfToken GetRenderTag(SdfPath const &id)
Returns the render tag that will be used to bucket prims during render pass bucketing.
virtual HD_API size_t SampleExtComputationInput(SdfPath const &computationId, TfToken const &input, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues)
Return up to maxSampleCount samples for a given computation id and input token.
virtual HD_API SdfPath GetInstancerId(SdfPath const &primId)
Returns the parent instancer of the given rprim or instancer.
virtual HD_API GfMatrix4d GetTransform(SdfPath const &id)
Returns the object space transform, including all parent transforms.
virtual HD_API HdExtComputationOutputDescriptorVector GetExtComputationOutputDescriptors(SdfPath const &computationId)
For the given computation id, returns a list of computation output descriptors.
virtual HD_API HdPrimvarDescriptorVector GetPrimvarDescriptors(SdfPath const &id, HdInterpolation interpolation)
Returns descriptors for all primvars of the given interpolation type.
virtual HD_API HdDisplayStyle GetDisplayStyle(SdfPath const &id)
Returns the refinement level for the given prim in the range [0,8].
virtual HD_API VtValue GetShadingStyle(SdfPath const &id)
Returns the shading style for the given prim.
virtual HD_API bool IsEnabled(TfToken const &option) const
Returns true if the named option is enabled by the delegate.
virtual HD_API SdfPathVector GetInstancerPrototypes(SdfPath const &instancerId)
Returns a list of prototypes of this instancer.
virtual HD_API VtIntArray GetInstanceIndices(SdfPath const &instancerId, SdfPath const &prototypeId)
Gets the extracted indices array of the prototype id used in the instancer.
virtual HD_API VtValue GetCameraParamValue(SdfPath const &cameraId, TfToken const ¶mName)
Returns a single value for a given camera and parameter.
virtual HD_API SdfPath GetMaterialId(SdfPath const &rprimId)
Returns the material ID bound to the rprim rprimId.
virtual HD_API GfRange3d GetExtent(SdfPath const &id)
Gets the axis aligned bounds of a prim.
virtual HD_API size_t SamplePrimvar(SdfPath const &id, TfToken const &key, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues)
Store up to maxSampleCount primvar samples in *samplesValues.
HD_API HdSceneDelegate(HdRenderIndex *parentIndex, SdfPath const &delegateID)
Constructor used for nested delegate objects which share a RenderIndex.
virtual HD_API GfMatrix4d GetInstancerTransform(SdfPath const &instancerId)
Returns the instancer transform.
virtual HD_API TfTokenVector GetExtComputationSceneInputNames(SdfPath const &computationId)
For the given computation id, returns a list of inputs which will be requested from the scene delegat...
virtual HD_API SdfPathVector GetScenePrimPaths(SdfPath const &rprimId, std::vector< int > instanceIndices, std::vector< HdInstancerContext > *instancerContexts=nullptr)
A vectorized version of GetScenePrimPath that allows the prim adapter to amortize expensive calculati...
virtual HD_API void PostSyncCleanup()
Opportunity for the delegate to clean itself up after performing parallel work during sync phase.
virtual HD_API size_t SampleTransform(SdfPath const &id, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues)
Store up to maxSampleCount transform samples in *sampleValues.
virtual HD_API HdExtComputationPrimvarDescriptorVector GetExtComputationPrimvarDescriptors(SdfPath const &id, HdInterpolation interpolationMode)
Returns a list of primvar names that should be bound to a generated output from an ExtComputation for...
SdfPath const & GetDelegateID() const
Returns the ID of this delegate, which is used as a prefix for all objects it creates in the RenderIn...
virtual HD_API bool GetDoubleSided(SdfPath const &id)
Returns the doubleSided state for the given prim.
virtual HD_API VtArray< TfToken > GetCategories(SdfPath const &id)
Returns the prim categories.
virtual HD_API void Sync(HdSyncRequestVector *request)
Synchronizes the delegate state for the given request vector.
virtual HD_API HdIdVectorSharedPtr GetCoordSysBindings(SdfPath const &id)
Returns the coordinate system bindings, or a nullptr if none are bound.
virtual HD_API VtValue GetExtComputationInput(SdfPath const &computationId, TfToken const &input)
Returns a single value for a given computation id and input token.
virtual HD_API size_t SampleInstancerTransform(SdfPath const &instancerId, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues)
Store up to maxSampleCount transform samples in *sampleValues.
HdRenderIndex & GetRenderIndex()
Returns the RenderIndex owned by this delegate.
virtual HD_API void InvokeExtComputation(SdfPath const &computationId, HdExtComputationContext *context)
Requests the scene delegate run the ExtComputation with the given id.
virtual HD_API SdfPath GetScenePrimPath(SdfPath const &rprimId, int instanceIndex, HdInstancerContext *instancerContext=nullptr)
Returns the scene address of the prim corresponding to the given rprim/instance index.
virtual HD_API VtValue Get(SdfPath const &id, TfToken const &key)
Returns a named value.
virtual HD_API VtValue GetIndexedPrimvar(SdfPath const &id, TfToken const &key, VtIntArray *outIndices)
Returns a named primvar value.
virtual HD_API HdExtComputationInputDescriptorVector GetExtComputationInputDescriptors(SdfPath const &computationId)
For the given computation id, returns a list of computation input descriptors.
virtual HD_API HdMeshTopology GetMeshTopology(SdfPath const &id)
Gets the topological mesh data for a given prim.
virtual HD_API HdReprSelector GetReprSelector(SdfPath const &id)
Returns the authored repr (if any) for the given prim.
virtual HD_API PxOsdSubdivTags GetSubdivTags(SdfPath const &id)
Gets the subdivision surface tags (sharpness, holes, etc).
virtual HD_API HdModelDrawMode GetModelDrawMode(SdfPath const &id)
Returns the model draw mode object for the given prim.
virtual HD_API HdBasisCurvesTopology GetBasisCurvesTopology(SdfPath const &id)
Gets the topological curve data for a given prim.
virtual HD_API bool GetVisible(SdfPath const &id)
Returns the authored visible state of the prim.
virtual HD_API std::string GetExtComputationKernel(SdfPath const &computationId)
Returns the kernel source assigned to the computation at the path id.
virtual HD_API std::vector< VtArray< TfToken > > GetInstanceCategories(SdfPath const &instancerId)
Returns the categories for each of the instances in the instancer.
virtual HD_API HdCullStyle GetCullStyle(SdfPath const &id)
Returns the cullstyle for the given prim.
Contains an asset path and an optional resolved path.
A path value used to locate objects in layers or scenegraphs.
value_type * data()
Direct access to the underlying array.
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...
#define TF_CODING_ERROR(fmt, args)
Issue an internal programming error, but continue execution.
#define TF_VERIFY(cond, format,...)
Checks a condition and reports an error if it evaluates false.
Describes how the geometry of a prim should be displayed.
bool flatShadingEnabled
Is the prim flat shaded.
bool displacementEnabled
Is the prim displacement shaded.
bool pointsShadingEnabled
Should the prim's points get shaded like surfaces, as opposed to constant shaded?
HdDisplayStyle()
Creates a default DisplayStyle.
bool materialIsFinal
Is this prim exempt from having its material disabled or overridden, for example, when a renderer cho...
HdDisplayStyle(int refineLevel_, bool flatShading=false, bool displacement=true, bool occludedSelectionShowsThrough_=false, bool pointsShadingEnabled_=false, bool materialIsFinal_=false)
Creates a DisplayStyle.
int refineLevel
The prim refine level, in the range [0, 8].
bool occludedSelectionShowsThrough
Does the prim act "transparent" to allow occluded selection to show through?
Describes an output of an ExtComputation.
Extends HdPrimvarDescriptor to describe a primvar that takes data from the output of an ExtComputatio...
An array of a value and its indices sampled over time, in struct-of-arrays layout.
void Resize(unsigned int newSize) override
Resize the internal buffers.
Describes optional alternative imaging behavior for prims.
bool indexed
Optional bool, true if primvar is indexed.
HdInterpolation interpolation
Interpolation (data-sampling rate) of the primvar.
TfToken role
Optional "role" indicating a desired interpretation – for example, to distinguish color/vector/point/...
TfToken name
Name of the primvar.
Describes the allocation structure of a render buffer bprim.
The SceneDelegate is requested to synchronize prims as the result of executing a specific render pass...
An array of a value sampled over time, in struct-of-arrays layout.
virtual void Resize(unsigned int newSize)
Resize the internal buffers.
HdTupleType represents zero, one, or more values of the same HdType.
Description of a single field related to a volume primitive.
std::vector< TfToken > TfTokenVector
Convenience types.