24 #ifndef PXR_IMAGING_HD_SCENE_DELEGATE_H 25 #define PXR_IMAGING_HD_SCENE_DELEGATE_H 28 #include "pxr/imaging/hd/api.h" 29 #include "pxr/imaging/hd/version.h" 31 #include "pxr/imaging/hd/aov.h" 32 #include "pxr/imaging/hd/basisCurvesTopology.h" 33 #include "pxr/imaging/hd/enums.h" 34 #include "pxr/imaging/hd/meshTopology.h" 35 #include "pxr/imaging/hd/renderIndex.h" 36 #include "pxr/imaging/hd/repr.h" 37 #include "pxr/imaging/hd/timeSampleArray.h" 43 #include "pxr/base/vt/value.h" 44 #include "pxr/usd/sdf/path.h" 52 PXR_NAMESPACE_OPEN_SCOPE
57 typedef std::shared_ptr<SdfPathVector> HdIdVectorSharedPtr;
60 typedef std::vector<std::pair<SdfPath, int>> HdInstancerContext;
73 std::vector<HdDirtyBits> dirtyBits;
130 bool flatShading =
false,
131 bool displacement =
true,
132 bool occludedSelectionShowsThrough_ =
false,
133 bool pointsShadingEnabled_ =
false,
134 bool materialIsFinal_ =
false)
142 if (refineLevel_ < 0) {
144 }
else if (refineLevel_ > 8) {
162 return !(*
this == rhs);
184 ,
role(HdPrimvarRoleTokens->none)
188 HdInterpolation interp_,
189 TfToken const& role_=HdPrimvarRoleTokens->none,
198 return !(*
this == rhs);
202 typedef std::vector<HdPrimvarDescriptor> HdPrimvarDescriptorVector;
215 TfToken sourceComputationOutputName;
221 HdInterpolation interp_,
223 SdfPath const & sourceComputationId_,
224 TfToken const & sourceComputationOutputName_,
227 , sourceComputationId(sourceComputationId_)
228 , sourceComputationOutputName(sourceComputationOutputName_)
229 , valueType(valueType_)
232 return HdPrimvarDescriptor::operator==(rhs) &&
233 sourceComputationId == rhs.sourceComputationId &&
234 sourceComputationOutputName == rhs.sourceComputationOutputName &&
235 valueType == rhs.valueType;
238 return !(*
this == rhs);
242 typedef std::vector<HdExtComputationPrimvarDescriptor>
243 HdExtComputationPrimvarDescriptorVector;
256 TfToken sourceComputationOutputName;
261 SdfPath const & sourceComputationId_,
262 TfToken const & sourceComputationOutputName_)
263 : name(name_), sourceComputationId(sourceComputationId_)
264 , sourceComputationOutputName(sourceComputationOutputName_)
268 return name == rhs.name &&
269 sourceComputationId == rhs.sourceComputationId &&
270 sourceComputationOutputName == rhs.sourceComputationOutputName;
273 return !(*
this == rhs);
277 typedef std::vector<HdExtComputationInputDescriptor>
278 HdExtComputationInputDescriptorVector;
294 : name(name_), valueType(valueType_)
298 return name == rhs.name &&
299 valueType == rhs.valueType;
302 return !(*
this == rhs);
306 typedef std::vector<HdExtComputationOutputDescriptor>
307 HdExtComputationOutputDescriptorVector;
321 TfToken const & fieldPrimType_,
323 : fieldName(fieldName_), fieldPrimType(fieldPrimType_), fieldId(fieldId_)
327 typedef std::vector<HdVolumeFieldDescriptor>
328 HdVolumeFieldDescriptorVector;
436 VtIntArray *outIndices);
453 virtual std::vector<VtArray<TfToken>>
474 size_t maxSampleCount,
481 template <
unsigned int CAPACITY>
485 size_t authoredSamples =
487 if (authoredSamples > CAPACITY) {
488 sa->
Resize(authoredSamples);
489 size_t authoredSamplesSecondAttempt =
497 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
499 sa->count = authoredSamples;
512 size_t maxSampleCount,
520 template <
unsigned int CAPACITY>
524 size_t authoredSamples =
530 if (authoredSamples > CAPACITY) {
531 sa->
Resize(authoredSamples);
532 size_t authoredSamplesSecondAttempt =
540 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
542 sa->count = authoredSamples;
566 size_t maxSampleCount,
573 template <
unsigned int CAPACITY>
588 size_t maxSampleCount,
591 VtIntArray *sampleIndices);
596 template <
unsigned int CAPACITY>
648 HdInstancerContext *instancerContext =
nullptr);
657 std::vector<int> instanceIndices,
658 std::vector<HdInstancerContext> *instancerContexts =
nullptr);
705 virtual HdVolumeFieldDescriptorVector
706 GetVolumeFieldDescriptors(
SdfPath const &volumeId);
729 virtual HdExtComputationInputDescriptorVector
737 virtual HdExtComputationOutputDescriptorVector
749 virtual HdExtComputationPrimvarDescriptorVector
751 HdInterpolation interpolationMode);
769 size_t maxSampleCount,
777 template <
unsigned int CAPACITY>
782 computationId, input, CAPACITY,
783 sa->times.
data(), sa->values.data());
785 if (authoredSamples > CAPACITY) {
786 sa->
Resize(authoredSamples);
788 computationId, input, authoredSamples,
789 sa->times.
data(), sa->values.data());
792 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
794 sa->count = authoredSamples;
823 virtual HdPrimvarDescriptorVector
841 template <
unsigned int CAPACITY>
846 size_t authoredSamples =
853 if (authoredSamples > CAPACITY) {
854 sa->
Resize(authoredSamples);
855 size_t authoredSamplesSecondAttempt =
864 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
866 sa->count = authoredSamples;
869 template <
unsigned int CAPACITY>
874 size_t authoredSamples =
882 if (authoredSamples > CAPACITY) {
883 sa->
Resize(authoredSamples);
884 size_t authoredSamplesSecondAttempt =
894 TF_VERIFY(authoredSamples == authoredSamplesSecondAttempt);
896 sa->count = authoredSamples;
899 PXR_NAMESPACE_CLOSE_SCOPE
901 #endif //PXR_IMAGING_HD_SCENE_DELEGATE_H Interface class that defines the execution environment for the client to run a computation.
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Basic type: 3-dimensional floating point range.
virtual HD_API void InvokeExtComputation(SdfPath const &computationId, HdExtComputationContext *context)
Requests the scene delegate run the ExtComputation with the given id.
virtual HD_API HdBasisCurvesTopology GetBasisCurvesTopology(SdfPath const &id)
Gets the topological curve data for a given prim.
Describes how the geometry of a prim should be displayed.
value_type * data()
Direct access to the underlying array.
virtual HD_API VtValue GetShadingStyle(SdfPath const &id)
Returns the shading style for the given prim.
virtual HD_API VtValue Get(SdfPath const &id, TfToken const &key)
Returns a named value.
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...
HdTupleType represents zero, one, or more values of the same HdType.
virtual HD_API SdfPath GetMaterialId(SdfPath const &rprimId)
Returns the material ID bound to the rprim rprimId.
virtual HD_API std::vector< VtArray< TfToken > > GetInstanceCategories(SdfPath const &instancerId)
Returns the categories for all instances in the instancer.
#define TF_CODING_ERROR(fmt, args)
Issue an internal programming error, but continue execution.
Describes the allocation structure of a render buffer bprim.
bool materialIsFinal
Is this prim exempt from having its material disabled or overridden, for example, when a renderer cho...
bool flatShadingEnabled
Is the prim flat shaded.
virtual HD_API GfMatrix4d GetInstancerTransform(SdfPath const &instancerId)
Returns the instancer transform.
void SampleExtComputationInput(SdfPath const &computationId, TfToken const &input, HdTimeSampleArray< VtValue, CAPACITY > *sa)
Convenience form of SampleExtComputationInput() that takes an HdTimeSampleArray.
TfToken name
Name of the primvar.
virtual HD_API bool GetDoubleSided(SdfPath const &id)
Returns the doubleSided state for the given prim.
virtual HD_API void PostSyncCleanup()
Opportunity for the delegate to clean itself up after performing parallel work during sync phase.
virtual HD_API VtValue GetCameraParamValue(SdfPath const &cameraId, TfToken const ¶mName)
Returns a single value for a given camera and parameter.
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 HdIdVectorSharedPtr GetCoordSysBindings(SdfPath const &id)
Returns the coordinate system bindings, or a nullptr if none are bound.
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 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 HdRenderBufferDescriptor GetRenderBufferDescriptor(SdfPath const &id)
Returns the allocation descriptor for a given render buffer prim.
void SampleInstancerTransform(SdfPath const &instancerId, HdTimeSampleArray< GfMatrix4d, CAPACITY > *sa)
Convenience form of SampleInstancerTransform() that takes an HdTimeSampleArray.
Token for efficient comparison, assignment, and hashing of known strings.
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...
Describes an output of an ExtComputation.
HdInterpolation interpolation
Interpolation (data-sampling rate) of the primvar.
Description of a single field related to a volume primitive.
virtual HD_API size_t SampleTransform(SdfPath const &id, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues)
Store up to maxSampleCount transform samples in *sampleValues.
Stores a 4x4 matrix of double elements.
#define TF_VERIFY(cond, format,...)
Checks a condition and reports an error if it evaluates false.
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.
virtual HD_API HdCullStyle GetCullStyle(SdfPath const &id)
Returns the cullstyle for the given prim.
Adapter class providing data exchange with the client scene graph.
virtual HD_API SdfPathVector GetInstancerPrototypes(SdfPath const &instancerId)
Returns a list of prototypes of this instancer.
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...
std::vector< TfToken > TfTokenVector
Convenience types.
bool occludedSelectionShowsThrough
Does the prim act "transparent" to allow occluded selection to show through?
void SampleTransform(SdfPath const &id, HdTimeSampleArray< GfMatrix4d, CAPACITY > *sa)
Convenience form of SampleTransform() that takes an HdTimeSampleArray.
A path value used to locate objects in layers or scenegraphs.
bool indexed
Optional bool, true if primvar is indexed.
virtual HD_API VtValue GetExtComputationInput(SdfPath const &computationId, TfToken const &input)
Returns a single value for a given computation id and input token.
Topology data for basisCurves.
virtual HD_API void Sync(HdSyncRequestVector *request)
Synchronizes the delegate state for the given request vector.
HdDisplayStyle(int refineLevel_, bool flatShading=false, bool displacement=true, bool occludedSelectionShowsThrough_=false, bool pointsShadingEnabled_=false, bool materialIsFinal_=false)
Creates a DisplayStyle.
virtual HD_API bool GetVisible(SdfPath const &id)
Returns the authored visible state of the 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 VtValue GetIndexedPrimvar(SdfPath const &id, TfToken const &key, VtIntArray *outIndices)
Returns a named primvar value.
int refineLevel
The prim refine level, in the range [0, 8].
HdDisplayStyle()
Creates a default DisplayStyle.
virtual HD_API HdExtComputationInputDescriptorVector GetExtComputationInputDescriptors(SdfPath const &computationId)
For the given computation id, returns a list of computation input descriptors.
virtual HD_API HdPrimvarDescriptorVector GetPrimvarDescriptors(SdfPath const &id, HdInterpolation interpolation)
Returns descriptors for all primvars of the given interpolation type.
virtual HD_API HdMeshTopology GetMeshTopology(SdfPath const &id)
Gets the topological mesh data for a given prim.
virtual HD_API GfRange3d GetExtent(SdfPath const &id)
Gets the axis aligned bounds of a prim.
virtual HD_API HdReprSelector GetReprSelector(SdfPath const &id)
Returns the authored repr (if any) for the given prim.
void Resize(unsigned int newSize) override
Resize the internal buffers.
The SceneDelegate is requested to synchronize prims as the result of executing a specific render pass...
virtual HD_API PxOsdSubdivTags GetSubdivTags(SdfPath const &id)
Gets the subdivision surface tags (sharpness, holes, etc).
virtual HD_API TfToken GetRenderTag(SdfPath const &id)
Returns the render tag that will be used to bucket prims during render pass bucketing.
Describes one or more authored display representations for an rprim.
virtual HD_API bool IsEnabled(TfToken const &option) const
Returns true if the named option is enabled by the delegate.
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 size_t SampleInstancerTransform(SdfPath const &instancerId, size_t maxSampleCount, float *sampleTimes, GfMatrix4d *sampleValues)
Store up to maxSampleCount transform samples in *sampleValues.
An array of a value sampled over time, in struct-of-arrays layout.
Extends HdPrimvarDescriptor to describe a primvar that takes data from the output of an ExtComputatio...
virtual void Resize(unsigned int newSize)
Resize the internal buffers.
virtual HD_API HdDisplayStyle GetDisplayStyle(SdfPath const &id)
Returns the refinement level for the given prim in the range [0,8].
bool displacementEnabled
Is the prim displacement shaded.
virtual HD_API std::string GetExtComputationKernel(SdfPath const &computationId)
Returns the kernel source assigned to the computation at the path id.
virtual HD_API SdfPath GetInstancerId(SdfPath const &primId)
Returns the parent instancer of the given rprim or instancer.
TfToken role
Optional "role" indicating a desired interpretation – for example, to distinguish color/vector/point/...
Topology data for meshes.
HdRenderIndex & GetRenderIndex()
Returns the RenderIndex owned by this delegate.
bool pointsShadingEnabled
Should the prim's points get shaded like surfaces, as opposed to constant shaded?
An array of a value and its indices sampled over time, in struct-of-arrays layout.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
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 VtArray< TfToken > GetCategories(SdfPath const &id)
Returns the prim categories.