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"
35#include "pxr/usdImaging/usdImaging/types.h"
37#include "pxr/imaging/hd/changeTracker.h"
38#include "pxr/imaging/hd/selection.h"
39#include "pxr/usd/sdf/path.h"
40#include "pxr/usd/usd/attribute.h"
42#include "pxr/usd/usd/timeCode.h"
46#include "pxr/base/tf/type.h"
50PXR_NAMESPACE_OPEN_SCOPE
62using UsdImagingPrimAdapterSharedPtr =
63 std::shared_ptr<class UsdImagingPrimAdapter>;
70 :
public std::enable_shared_from_this<UsdImagingPrimAdapter>
84 virtual TfToken GetImagingSubprimType(
88 virtual HdContainerDataSourceHandle GetImagingSubprimData(
98 UsdImagingPropertyInvalidationType invalidationType);
142 UsdImagingPropertyInvalidationType invalidationType);
154 instancerContext =
nullptr) = 0;
159 static bool ShouldCullSubtree(
UsdPrim const& prim);
165 virtual bool ShouldCullChildren()
const;
170 virtual bool ShouldIgnoreNativeInstanceSubtrees()
const;
176 virtual bool IsInstancerAdapter()
const;
207 virtual bool CanPopulateUsdInstance()
const;
220 HdDirtyBits* timeVaryingBits,
222 instancerContext =
nullptr)
const = 0;
231 HdDirtyBits requestedBits,
233 instancerContext =
nullptr)
const = 0;
258 TfToken const& propertyName) = 0;
274 virtual void MarkDirty(
UsdPrim const& prim,
280 virtual void MarkRefineLevelDirty(
UsdPrim const& prim,
285 virtual void MarkReprDirty(
UsdPrim const& prim,
290 virtual void MarkCullStyleDirty(
UsdPrim const& prim,
295 virtual void MarkRenderTagDirty(
UsdPrim const& prim,
300 virtual void MarkTransformDirty(
UsdPrim const& prim,
305 virtual void MarkVisibilityDirty(
UsdPrim const& prim,
310 virtual void MarkMaterialDirty(
UsdPrim const& prim,
315 virtual void MarkLightParamsDirty(
UsdPrim const& prim,
320 virtual void MarkWindowPolicyDirty(
UsdPrim const& prim,
325 virtual void MarkCollectionsDirty(
UsdPrim const& prim,
333 virtual void InvokeComputation(
SdfPath const& cachePath,
342 virtual std::vector<VtArray<TfToken>>
360 size_t maxNumSamples,
368 SdfPath const& cachePath)
const;
374 SdfPath const& cachePath)
const;
387 size_t maxNumSamples,
390 VtIntArray *sampleIndices);
411 SdfPath const &protoInstancerPath,
422 HdInstancerContext *instancerCtx)
const;
425 virtual SdfPathVector GetScenePrimPaths(
SdfPath const& cachePath,
426 std::vector<int>
const& instanceIndices,
427 std::vector<HdInstancerContext> *instancerCtxs)
const;
455 virtual bool PopulateSelection(
459 int const hydraInstanceIndex,
460 VtIntArray
const &parentInstanceIndices,
461 HdSelectionSharedPtr
const &result)
const;
468 virtual HdVolumeFieldDescriptorVector
469 GetVolumeFieldDescriptors(
UsdPrim const& usdPrim,
SdfPath const &
id,
497 bool IsChildPath(
SdfPath const& path)
const;
516 TfToken const& instanceInheritablePurpose)
const;
532 bool ignoreRootTransform =
false)
const;
539 size_t maxNumSamples,
552 VtIntArray *outIndices)
const;
620 virtual const TfTokenVector &GetExtComputationSceneInputNames(
621 SdfPath const& cachePath)
const;
624 virtual HdExtComputationInputDescriptorVector
625 GetExtComputationInputs(
UsdPrim const& prim,
631 virtual HdExtComputationOutputDescriptorVector
632 GetExtComputationOutputs(
UsdPrim const& prim,
638 virtual HdExtComputationPrimvarDescriptorVector
639 GetExtComputationPrimvars(
642 HdInterpolation interpolation,
647 GetExtComputationInput(
656 SampleExtComputationInput(
662 size_t maxSampleCount,
668 GetExtComputationKernel(
675 GetInstanceIndices(
UsdPrim const& instancerPrim,
676 SdfPath const& instancerCachePath,
677 SdfPath const& prototypeCachePath,
715 using Keys = UsdImagingPrimvarDescCache::Key;
717 template <
typename T>
725 template <
typename T>
735 UsdImaging_NonlinearSampleCountCache*
736 _GetNonlinearSampleCountCache()
const;
739 UsdImaging_BlurScaleCache*
740 _GetBlurScaleCache()
const;
750 const UsdImagingPrimAdapterSharedPtr&
751 _GetPrimAdapter(
UsdPrim const& prim,
bool ignoreInstancing =
false)
const;
754 const UsdImagingPrimAdapterSharedPtr&
755 _GetAdapter(
TfToken const& adapterKey)
const;
764 SdfPath _GetPrimPathFromInstancerChain(
765 SdfPathVector
const& instancerChain)
const;
768 UsdTimeCode _GetTimeWithOffset(
float offset)
const;
772 SdfPath _ConvertCachePathToIndexPath(
SdfPath const& cachePath)
const;
776 SdfPath _ConvertIndexPathToCachePath(
SdfPath const& indexPath)
const;
780 TfToken _GetMaterialBindingPurpose()
const;
802 bool _IsPrimvarFilteringNeeded()
const;
811 bool _IsInInvisedPaths(
SdfPath const& usdPath)
const;
824 HdDirtyBits dirtyFlag,
TfToken const& perfToken,
825 HdDirtyBits* dirtyFlags,
bool isInherited,
826 bool* exists =
nullptr)
const;
835 bool _IsTransformVarying(
UsdPrim prim,
836 HdDirtyBits dirtyFlag,
838 HdDirtyBits* dirtyFlags)
const;
844 HdPrimvarDescriptorVector* vec,
846 HdInterpolation interp,
848 bool indexed =
false)
const;
853 HdPrimvarDescriptorVector* vec,
861 void _ComputeAndMergePrimvar(
865 HdPrimvarDescriptorVector* primvarDescs,
866 HdInterpolation *interpOverride =
nullptr)
const;
870 static bool _HasPrimvarsPrefix(
TfToken const& propertyName);
882 HdDirtyBits _ProcessNonPrefixedPrimvarPropertyChange(
887 HdInterpolation
const& primvarInterp,
888 HdDirtyBits valueChangeDirtyBit = HdChangeTracker::DirtyPrimvar)
const;
893 HdDirtyBits _ProcessPrefixedPrimvarPropertyChange(
897 HdDirtyBits valueChangeDirtyBit = HdChangeTracker::DirtyPrimvar,
898 bool inherited =
true)
const;
900 virtual void _RemovePrim(
SdfPath const& cachePath,
907 void _ResyncDependents(
SdfPath const& usdPath,
911 UsdImaging_CollectionCache& _GetCollectionCache()
const;
914 UsdStageRefPtr _GetStage()
const;
917 UsdImaging_CoordSysBindingStrategy::value_type
918 _GetCoordSysBindings(
UsdPrim const& prim)
const;
921 UsdImaging_InheritedPrimvarStrategy::value_type
922 _GetInheritedPrimvars(
UsdPrim const& prim)
const;
927 TfToken const& primvarName)
const;
933 Usd_PrimFlagsConjunction _GetDisplayPredicate()
const;
936 Usd_PrimFlagsConjunction _GetDisplayPredicateForPrototypes()
const;
939 bool _DoesDelegateSupportCoordSys()
const;
947 virtual UsdImagingPrimAdapterSharedPtr New()
const = 0;
951class UsdImagingPrimAdapterFactory :
public UsdImagingPrimAdapterFactoryBase {
953 virtual UsdImagingPrimAdapterSharedPtr New()
const
955 return std::make_shared<T>();
959PXR_NAMESPACE_CLOSE_SCOPE
A basic mathematical interval class.
Stores a 4x4 matrix of double elements.
Basic type: 3-dimensional floating point range.
Represents a set of data source locators closed under descendancy.
Interface class that defines the execution environment for the client to run a computation.
HighlightMode
Selection modes allow differentiation in selection highlight behavior.
A path value used to locate objects in layers or scenegraphs.
Token for efficient comparison, assignment, and hashing of known strings.
Base class of all factory types.
Scenegraph object for authoring and retrieving numeric, string, and array valued data,...
bool Get(T *value, UsdTimeCode time=UsdTimeCode::Default()) const
Perform value resolution to fetch the value of this attribute at the requested UsdTimeCode time,...
Schema wrapper for UsdAttribute for authoring and introspecting attributes that are primvars.
This class is used as a context object with global stage information, that gets passed down to dataso...
The primary translation layer between the Hydra (Hd) core and the Usd scene graph.
This proxy class exposes a subset of the private Delegate API to PrimAdapters.
Delegate support for instanced prims.
Delegate support for UsdGeomPointInstancer.
Base class for all PrimAdapters.
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...
USDIMAGING_API SdfPath GetMaterialUsdPath(UsdPrim const &prim) const
Gets the material path for the given prim, walking up namespace if necessary.
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...
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 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...
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.
USDIMAGING_API VtArray< VtIntArray > GetPerPrototypeIndices(UsdPrim const &prim, UsdTimeCode time) const
Computes the per-prototype instance indices for a UsdGeomPointInstancer.
USDIMAGING_API HdModelDrawMode GetFullModelDrawMode(UsdPrim const &prim)
Gets the model draw mode object for the given prim, walking up the namespace if necessary.
USDIMAGING_API void SetDelegate(UsdImagingDelegate *delegate)
A thread-local XformCache provided by the delegate.
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 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.
virtual USDIMAGING_API PopulationMode GetPopulationMode()
Returns the prim's behavior with regard to population and invalidation.
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.
virtual SdfPath Populate(UsdPrim const &prim, UsdImagingIndexProxy *index, UsdImagingInstancerContext const *instancerContext=nullptr)=0
Called to populate the RenderIndex for this UsdPrim.
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 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.
USDIMAGING_API TfToken GetInheritablePurpose(UsdPrim const &prim) const
Returns the purpose token for prim, but only if it is inheritable by child prims (i....
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...
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 std::vector< VtArray< TfToken > > GetInstanceCategories(UsdPrim const &prim)
Return an array of the categories used by each instance.
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 VtValue GetTopology(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Gets the topology object of a specific Usd prim.
USDIMAGING_API GfMatrix4d GetRootTransform() const
The root transform provided by the delegate.
virtual USDIMAGING_API TfToken GetPurpose(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &instanceInheritablePurpose) const
Returns the purpose token for prim.
static USDIMAGING_API UsdAttribute LookupLightParamAttribute(UsdPrim const &prim, TfToken const ¶mName)
Provides to paramName->UsdAttribute value mappings.
virtual bool IsSupported(UsdImagingIndexProxy const *index) const
Returns true if the adapter can be populated into the target index.
virtual USDIMAGING_API GfRange3d GetExtent(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const
Reads the extent from the given prim.
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 PxOsdSubdivTags GetSubdivTags(UsdPrim const &usdPrim, SdfPath const &cachePath, UsdTimeCode time) const
Get the subdiv tags for this prim.
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 bool _GetSceneLightsEnabled() const
Returns whether lights found in the usdscene are enabled.
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 HdDataSourceLocatorSet InvalidateImagingSubprimFromDescendent(UsdPrim const &prim, UsdPrim const &descendentPrim, TfToken const &subprim, TfTokenVector const &properties, UsdImagingPropertyInvalidationType invalidationType)
This is called (for each result of GetImagingSubprims) when this adapter's GetScope() result is Repre...
virtual USDIMAGING_API SdfPath GetInstancerId(UsdPrim const &usdPrim, SdfPath const &cachePath) const
Return the instancerId for this prim.
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.
USDIMAGING_API bool _GetSceneMaterialsEnabled() const
Returns whether custom shading of prims is enabled.
@ RepresentsSelfAndDescendents
The adapter is responsible for USD prims of its registered type as well as any descendents of those p...
@ RepresentedByAncestor
Changes to prims of this adapter's registered type are sent to the first ancestor prim whose adapter'...
@ RepresentsSelf
The adapter is responsible only for USD prims of its registered type.
virtual USDIMAGING_API SdfPath GetScenePrimPath(SdfPath const &cachePath, int instanceIndex, HdInstancerContext *instancerCtx) const
A cache for primvar descriptors.
UsdPrim is the sole persistent scenegraph object on a UsdStage, and is the embodiment of a "Prim" as ...
USD_API UsdAttribute GetAttribute(const TfToken &attrName) const
Return a UsdAttribute with the name attrName.
Represent a time value, which may be either numeric, holding a double value, or a sentinel value UsdT...
Represents an arbitrary dimensional rectangular container class.
Provides a container which may hold any type, and provides introspection and iteration over array typ...
Object used by instancer prim adapters to pass along context about the instancer and instance prim to...
Describes optional alternative imaging behavior for prims.
std::vector< TfToken > TfTokenVector
Convenience types.