24 #ifndef PXR_USD_IMAGING_USD_IMAGING_PRIM_ADAPTER_H
25 #define PXR_USD_IMAGING_USD_IMAGING_PRIM_ADAPTER_H
30 #include "pxr/usdImaging/usdImaging/api.h"
31 #include "pxr/usdImaging/usdImaging/version.h"
36 #include "pxr/imaging/hd/changeTracker.h"
37 #include "pxr/imaging/hd/selection.h"
38 #include "pxr/usd/usd/attribute.h"
40 #include "pxr/usd/usd/timeCode.h"
44 #include "pxr/base/tf/type.h"
48 PXR_NAMESPACE_OPEN_SCOPE
58 using UsdImagingPrimAdapterSharedPtr =
59 std::shared_ptr<class UsdImagingPrimAdapter>;
66 :
public std::enable_shared_from_this<UsdImagingPrimAdapter>
86 instancerContext =
nullptr) = 0;
91 static bool ShouldCullSubtree(
UsdPrim const& prim);
97 virtual bool ShouldCullChildren()
const;
102 virtual bool ShouldIgnoreNativeInstanceSubtrees()
const;
108 virtual bool IsInstancerAdapter()
const;
139 virtual bool CanPopulateUsdInstance()
const;
152 HdDirtyBits* timeVaryingBits,
154 instancerContext =
nullptr)
const = 0;
163 HdDirtyBits requestedBits,
165 instancerContext =
nullptr)
const = 0;
190 TfToken const& propertyName) = 0;
206 virtual void MarkDirty(
UsdPrim const& prim,
212 virtual void MarkRefineLevelDirty(
UsdPrim const& prim,
217 virtual void MarkReprDirty(
UsdPrim const& prim,
222 virtual void MarkCullStyleDirty(
UsdPrim const& prim,
227 virtual void MarkRenderTagDirty(
UsdPrim const& prim,
232 virtual void MarkTransformDirty(
UsdPrim const& prim,
237 virtual void MarkVisibilityDirty(
UsdPrim const& prim,
242 virtual void MarkMaterialDirty(
UsdPrim const& prim,
247 virtual void MarkLightParamsDirty(
UsdPrim const& prim,
252 virtual void MarkWindowPolicyDirty(
UsdPrim const& prim,
260 virtual void InvokeComputation(
SdfPath const& cachePath,
269 virtual std::vector<VtArray<TfToken>>
287 size_t maxNumSamples,
295 SdfPath const& cachePath)
const;
301 SdfPath const& cachePath)
const;
314 size_t maxNumSamples,
317 VtIntArray *sampleIndices);
338 SdfPath const &protoInstancerPath,
348 HdInstancerContext *instancerCtx)
const;
376 virtual bool PopulateSelection(
380 int const hydraInstanceIndex,
381 VtIntArray
const &parentInstanceIndices,
382 HdSelectionSharedPtr
const &result)
const;
389 virtual HdVolumeFieldDescriptorVector
390 GetVolumeFieldDescriptors(
UsdPrim const& usdPrim,
SdfPath const &
id,
406 bool IsChildPath(
SdfPath const& path)
const;
425 TfToken const& instanceInheritablePurpose)
const;
441 bool ignoreRootTransform =
false)
const;
448 size_t maxNumSamples,
461 VtIntArray *outIndices)
const;
524 virtual const TfTokenVector &GetExtComputationSceneInputNames(
525 SdfPath const& cachePath)
const;
528 virtual HdExtComputationInputDescriptorVector
529 GetExtComputationInputs(
UsdPrim const& prim,
535 virtual HdExtComputationOutputDescriptorVector
536 GetExtComputationOutputs(
UsdPrim const& prim,
542 virtual HdExtComputationPrimvarDescriptorVector
543 GetExtComputationPrimvars(
546 HdInterpolation interpolation,
551 GetExtComputationInput(
560 SampleExtComputationInput(
566 size_t maxSampleCount,
572 GetExtComputationKernel(
579 GetInstanceIndices(
UsdPrim const& instancerPrim,
580 SdfPath const& instancerCachePath,
581 SdfPath const& prototypeCachePath,
594 using Keys = UsdImagingPrimvarDescCache::Key;
596 template <
typename T>
604 template <
typename T>
621 const UsdImagingPrimAdapterSharedPtr&
622 _GetPrimAdapter(
UsdPrim const& prim,
bool ignoreInstancing =
false)
const;
625 const UsdImagingPrimAdapterSharedPtr&
626 _GetAdapter(
TfToken const& adapterKey)
const;
635 SdfPath _GetPrimPathFromInstancerChain(
636 SdfPathVector
const& instancerChain)
const;
639 UsdTimeCode _GetTimeWithOffset(
float offset)
const;
643 SdfPath _ConvertCachePathToIndexPath(
SdfPath const& cachePath)
const;
647 SdfPath _ConvertIndexPathToCachePath(
SdfPath const& indexPath)
const;
651 TfToken _GetMaterialBindingPurpose()
const;
660 bool _IsPrimvarFilteringNeeded()
const;
669 bool _IsInInvisedPaths(
SdfPath const& usdPath)
const;
682 HdDirtyBits dirtyFlag,
TfToken const& perfToken,
683 HdDirtyBits* dirtyFlags,
bool isInherited,
684 bool* exists =
nullptr)
const;
693 bool _IsTransformVarying(
UsdPrim prim,
694 HdDirtyBits dirtyFlag,
696 HdDirtyBits* dirtyFlags)
const;
702 HdPrimvarDescriptorVector* vec,
704 HdInterpolation interp,
706 bool indexed =
false)
const;
711 HdPrimvarDescriptorVector* vec,
719 void _ComputeAndMergePrimvar(
723 HdPrimvarDescriptorVector* primvarDescs,
724 HdInterpolation *interpOverride =
nullptr)
const;
728 static bool _HasPrimvarsPrefix(
TfToken const& propertyName);
740 HdDirtyBits _ProcessNonPrefixedPrimvarPropertyChange(
745 HdInterpolation
const& primvarInterp,
746 HdDirtyBits valueChangeDirtyBit = HdChangeTracker::DirtyPrimvar)
const;
751 HdDirtyBits _ProcessPrefixedPrimvarPropertyChange(
755 HdDirtyBits valueChangeDirtyBit = HdChangeTracker::DirtyPrimvar,
756 bool inherited =
true)
const;
758 virtual void _RemovePrim(
SdfPath const& cachePath,
765 void _ResyncDependents(
SdfPath const& usdPath,
769 UsdImaging_CollectionCache& _GetCollectionCache()
const;
772 UsdImaging_CoordSysBindingStrategy::value_type
773 _GetCoordSysBindings(
UsdPrim const& prim)
const;
776 UsdImaging_InheritedPrimvarStrategy::value_type
777 _GetInheritedPrimvars(
UsdPrim const& prim)
const;
783 Usd_PrimFlagsConjunction _GetDisplayPredicate()
const;
786 Usd_PrimFlagsConjunction _GetDisplayPredicateForPrototypes()
const;
789 bool _DoesDelegateSupportCoordSys()
const;
793 static HdInterpolation _UsdToHdInterpolation(
TfToken const& usdInterp);
803 virtual UsdImagingPrimAdapterSharedPtr New()
const = 0;
807 class UsdImagingPrimAdapterFactory :
public UsdImagingPrimAdapterFactoryBase {
809 virtual UsdImagingPrimAdapterSharedPtr New()
const
811 return std::make_shared<T>();
816 PXR_NAMESPACE_CLOSE_SCOPE
818 #endif // PXR_USD_IMAGING_USD_IMAGING_PRIM_ADAPTER_H
Interface class that defines the execution environment for the client to run a computation.
Basic type: 3-dimensional floating point range.
virtual USDIMAGING_API HdDirtyBits ProcessPrimChange(UsdPrim const &prim, SdfPath const &cachePath, TfTokenVector const &changedFields)
Returns a bit mask of attributes to be updated, or HdChangeTracker::AllDirty if the entire prim must ...
virtual USDIMAGING_API PxOsdSubdivTags GetSubdivTags(UsdPrim const &usdPrim, SdfPath const &cachePath, UsdTimeCode time) const
Get the subdiv tags for this prim.
HighlightMode
Selection modes allow differentiation in selection highlight behavior.
This proxy class exposes a subset of the private Delegate API to PrimAdapters.
USDIMAGING_API TfToken GetInheritablePurpose(UsdPrim const &prim) const
Returns the purpose token for prim, but only if it is inheritable by child prims (i.e.
USDIMAGING_API void SetDelegate(UsdImagingDelegate *delegate)
A thread-local XformCache provided by the delegate.
virtual void UpdateForTime(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time, HdDirtyBits requestedBits, UsdImagingInstancerContext const *instancerContext=nullptr) const =0
Populates the cache for the given prim, time and requestedBits.
virtual USDIMAGING_API void ProcessPrimRemoval(SdfPath const &cachePath, UsdImagingIndexProxy *index)
Removes all associated Rprims and dependencies from the render index without scheduling them for repo...
Base class of all factory types.
virtual USDIMAGING_API size_t SamplePrimvar(UsdPrim const &usdPrim, SdfPath const &cachePath, TfToken const &key, UsdTimeCode time, size_t maxNumSamples, float *sampleTimes, VtValue *sampleValues, VtIntArray *sampleIndices)
Sample the primvar for the given prim.
Token for efficient comparison, assignment, and hashing of known strings.
virtual USDIMAGING_API bool GetDoubleSided(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Reads double-sided from the given prim. If not authored, returns false.
Stores a 4x4 matrix of double elements.
virtual bool IsSupported(UsdImagingIndexProxy const *index) const
Returns true if the adapter can be populated into the target index.
Represent a time value, which may be either numeric, holding a double value, or a sentinel value UsdT...
Base class for all PrimAdapters.
USDIMAGING_API TfToken GetModelDrawMode(UsdPrim const &prim)
Gets the model:drawMode attribute for the given prim, walking up the namespace if necessary...
virtual USDIMAGING_API GfMatrix4d GetInstancerTransform(UsdPrim const &instancerPrim, SdfPath const &instancerPath, UsdTimeCode time) const
Get the instancer transform for the given prim.
virtual void TrackVariability(UsdPrim const &prim, SdfPath const &cachePath, HdDirtyBits *timeVaryingBits, UsdImagingInstancerContext const *instancerContext=nullptr) const =0
For the given prim, variability is detected and stored in timeVaryingBits.
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
std::vector< TfToken > TfTokenVector
Convenience types.
A basic mathematical interval class.
Represents an arbitrary dimensional rectangular container class.
A path value used to locate objects in layers or scenegraphs.
A cache for primvar descriptors.
bool Get(T *value, UsdTimeCode time=UsdTimeCode::Default()) const
Perform value resolution to fetch the value of this attribute at the requested UsdTimeCode time...
virtual USDIMAGING_API GfRange3d GetExtent(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Reads the extent from the given prim.
virtual USDIMAGING_API SdfPath GetInstancerId(UsdPrim const &usdPrim, SdfPath const &cachePath) const
Return the instancerId for this prim.
virtual USDIMAGING_API size_t SampleTransform(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time, size_t maxNumSamples, float *sampleTimes, GfMatrix4d *sampleValues)
Samples the transform for the given prim.
USDIMAGING_API GfMatrix4d GetRootTransform() const
The root transform provided by the delegate.
virtual USDIMAGING_API bool GetVisible(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Returns true if the given prim is visible, taking into account inherited visibility values...
virtual USDIMAGING_API size_t SampleInstancerTransform(UsdPrim const &instancerPrim, SdfPath const &instancerPath, UsdTimeCode time, size_t maxNumSamples, float *sampleTimes, GfMatrix4d *sampleValues)
Sample the instancer transform for the given prim.
USDIMAGING_API SdfPath GetMaterialUsdPath(UsdPrim const &prim) const
Gets the material path for the given prim, walking up namespace if necessary.
virtual USDIMAGING_API HdCullStyle GetCullStyle(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Gets the cullstyle of a specific path in the scene graph.
virtual USDIMAGING_API VtValue Get(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &key, UsdTimeCode time, VtIntArray *outIndices) const
Gets the value of the parameter named key for the given prim (which has the given cache path) and giv...
USD_API UsdAttribute GetAttribute(const TfToken &attrName) const
Return a UsdAttribute with the name attrName.
Object used by instancer prim adapters to pass along context about the instancer and instance prim to...
Schema wrapper for UsdAttribute for authoring and introspecting attributes that are primvars...
virtual HdDirtyBits ProcessPropertyChange(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &propertyName)=0
Returns a bit mask of attributes to be updated, or HdChangeTracker::AllDirty if the entire prim must ...
virtual SdfPath Populate(UsdPrim const &prim, UsdImagingIndexProxy *index, UsdImagingInstancerContext const *instancerContext=nullptr)=0
Called to populate the RenderIndex for this UsdPrim.
The primary translation layer between the Hydra (Hd) core and the Usd scene graph.
virtual USDIMAGING_API SdfPathVector GetInstancerPrototypes(UsdPrim const &usdPrim, SdfPath const &cachePath) const
Return the list of known prototypes of this prim.
virtual USDIMAGING_API GfMatrix4d GetRelativeInstancerTransform(SdfPath const &instancerPath, SdfPath const &protoInstancerPath, UsdTimeCode time) const
Returns the transform of protoInstancerPath relative to instancerPath.
virtual USDIMAGING_API void ProcessPrimResync(SdfPath const &cachePath, UsdImagingIndexProxy *index)
When a PrimResync event occurs, the prim may have been deleted entirely, adapter plug-ins should over...
virtual USDIMAGING_API GfMatrix4d GetTransform(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time, bool ignoreRootTransform=false) const
Fetches the transform for the given prim at the given time from a pre-computed cache of prim transfor...
USDIMAGING_API VtArray< VtIntArray > GetPerPrototypeIndices(UsdPrim const &prim, UsdTimeCode time) const
Computes the per-prototype instance indices for a UsdGeomPointInstancer.
virtual USDIMAGING_API TfToken GetPurpose(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &instanceInheritablePurpose) const
Returns the purpose token for prim.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
virtual USDIMAGING_API std::vector< VtArray< TfToken > > GetInstanceCategories(UsdPrim const &prim)
Return an array of the categories used by each instance.
virtual USDIMAGING_API VtValue GetTopology(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Gets the topology object of a specific Usd prim.