7 #ifndef PXR_USD_IMAGING_USD_SKEL_IMAGING_SKELETON_ADAPTER_H
8 #define PXR_USD_IMAGING_USD_SKEL_IMAGING_SKELETON_ADAPTER_H
22 #include <unordered_map>
47 instancerContext=
nullptr)
override;
62 instancerContext =
nullptr)
const override;
71 instancerContext=
nullptr)
const override;
80 const TfToken& propertyName)
override;
167 TfToken const& instanceInheritablePurpose)
184 SdfPath const& cachePath)
const override;
225 size_t maxSampleCount,
227 VtValue *sampleValues)
override;
242 VtIntArray *outIndices)
const override;
253 TfToken const &subprim)
override;
279 bool _IsCallbackForSkeleton(
const UsdPrim& prim)
const;
288 float _GetSkeletonDisplayOpacity(
const UsdPrim& prim,
291 void _TrackBoneMeshVariability(
296 instancerContext =
nullptr)
const;
298 void _UpdateBoneMeshForTime(
308 bool _IsAffectedByTimeVaryingSkelAnim(
const SdfPath& skinnedPrimPath)
311 void _RemoveSkinnedPrimAndComputations(
const SdfPath& cachePath,
317 bool _IsSkinningComputationPath(
const SdfPath& cachePath)
const;
320 _IsSkinningInputAggregatorComputationPath(
const SdfPath& cachePath)
const;
322 void _TrackSkinningComputationVariability(
324 const SdfPath& computationPath,
327 instancerContext =
nullptr)
const;
329 VtVec3fArray _GetSkinnedPrimPoints(
const UsdPrim& skinnedPrim,
330 const SdfPath& skinnedPrimCachePath,
333 SdfPath _GetSkinningComputationPath(
const SdfPath& skinnedPrimPath)
const;
335 SdfPath _GetSkinningInputAggregatorComputationPath(
336 const SdfPath& skinnedPrimPath)
const;
340 std::string _LoadSkinningComputeKernel(
const TfToken& kernelKey);
343 const std::string& _GetLBSSkinningComputeKernel();
346 const std::string& _GetDQSSkinningComputeKernel();
351 bool _IsSkinnedPrimPath(
const SdfPath& cachePath)
const;
353 void _TrackSkinnedPrimVariability(
358 instancerContext =
nullptr)
const;
360 void _UpdateSkinnedPrimForTime(
372 _GetExtComputationInputForSkinningComputation(
380 _GetExtComputationInputForInputAggregator(
388 _SampleExtComputationInputForSkinningComputation(
394 size_t maxSampleCount,
399 _SampleExtComputationInputForInputAggregator(
405 size_t maxSampleCount,
432 TfToken ComputePurpose()
const;
437 VtVec3fArray _boneMeshPoints;
438 VtIntArray _boneMeshJointIndices;
442 _SkelData* _GetSkelData(
const SdfPath& cachePath)
const;
446 std::unordered_map<SdfPath, std::shared_ptr<_SkelData>,
SdfPath::Hash>;
447 _SkelDataMap _skelDataCache;
450 struct _SkinnedPrimData {
451 _SkinnedPrimData() =
default;
456 _SkinnedPrimData(
const SdfPath& skelPath,
461 std::shared_ptr<UsdSkelBlendShapeQuery> blendShapeQuery;
464 SdfPath skelPath, skelRootPath;
465 bool hasJointInfluences =
false;
468 const _SkinnedPrimData* _GetSkinnedPrimData(
const SdfPath& cachePath)
const;
470 using _SkinnedPrimDataMap =
471 std::unordered_map<SdfPath, _SkinnedPrimData, SdfPath::Hash>;
472 _SkinnedPrimDataMap _skinnedPrimDataCache;
479 using _SkelBindingMap =
480 std::unordered_map<SdfPath, UsdSkelBinding, SdfPath::Hash>;
481 _SkelBindingMap _skelBindingMap;
487 #endif // USDSKELIMAGING_SKELETONADAPTER
USDSKELIMAGING_API HdDataSourceLocatorSet InvalidateImagingSubprim(UsdPrim const &prim, TfToken const &subprim, TfTokenVector const &properties, UsdImagingPropertyInvalidationType invalidationType) override
GT_API const UT_StringHolder time
USDSKELIMAGING_API void MarkDirty(const UsdPrim &prim, const SdfPath &cachePath, HdDirtyBits dirty, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API void TrackVariability(const UsdPrim &prim, const SdfPath &cachePath, HdDirtyBits *timeVaryingBits, const UsdImagingInstancerContext *instancerContext=nullptr) const override
Thread Safe.
USDSKELIMAGING_API bool IsSupported(const UsdImagingIndexProxy *index) const override
Returns true if the adapter can be populated into the target index.
std::vector< HdExtComputationInputDescriptor > HdExtComputationInputDescriptorVector
virtual USDSKELIMAGING_API ~UsdSkelImagingSkeletonAdapter()
USDSKELIMAGING_API HdExtComputationPrimvarDescriptorVector GetExtComputationPrimvars(UsdPrim const &prim, SdfPath const &cachePath, HdInterpolation interpolation, const UsdImagingInstancerContext *instancerContext) const override
USDSKELIMAGING_API VtValue GetExtComputationInput(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &name, UsdTimeCode time, const UsdImagingInstancerContext *instancerContext) const override
std::vector< HdExtComputationOutputDescriptor > HdExtComputationOutputDescriptorVector
USDSKELIMAGING_API void ProcessPrimRemoval(SdfPath const &primPath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API void MarkMaterialDirty(const UsdPrim &prim, const SdfPath &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API TfToken GetImagingSubprimType(UsdPrim const &prim, TfToken const &subprim) override
USDSKELIMAGING_API SdfPath Populate(const UsdPrim &prim, UsdImagingIndexProxy *index, const UsdImagingInstancerContext *instancerContext=nullptr) override
USDSKELIMAGING_API void MarkRefineLevelDirty(UsdPrim const &prim, SdfPath const &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API VtValue GetTopology(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const override
USDSKELIMAGING_API GfRange3d GetExtent(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const override
USDSKELIMAGING_API void InvokeComputation(SdfPath const &cachePath, HdExtComputationContext *context) override
USDSKELIMAGING_API std::string GetExtComputationKernel(UsdPrim const &prim, SdfPath const &cachePath, const UsdImagingInstancerContext *instancerContext) const override
void _RemovePrim(const SdfPath &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API HdContainerDataSourceHandle GetImagingSubprimData(UsdPrim const &prim, TfToken const &subprim, const UsdImagingDataSourceStageGlobals &stageGlobals) override
std::vector< TfToken > TfTokenVector
Convenience types.
GLuint const GLchar * name
USDSKELIMAGING_API void MarkRenderTagDirty(UsdPrim const &prim, SdfPath const &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API SdfPath GetMaterialId(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const override
The root transform provided by the delegate.
std::set< class SdfPath > SdfPathSet
A set of SdfPaths.
USDSKELIMAGING_API void MarkVisibilityDirty(const UsdPrim &prim, const SdfPath &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API HdDirtyBits ProcessPropertyChange(const UsdPrim &prim, const SdfPath &cachePath, const TfToken &propertyName) override
USDSKELIMAGING_API void MarkTransformDirty(const UsdPrim &prim, const SdfPath &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API TfTokenVector GetImagingSubprims(UsdPrim const &prim) override
#define USDSKELIMAGING_API
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
USDSKELIMAGING_API VtValue Get(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &key, UsdTimeCode time, VtIntArray *outIndices) const override
USDSKELIMAGING_API void ProcessPrimResync(SdfPath const &primPath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API HdExtComputationInputDescriptorVector GetExtComputationInputs(UsdPrim const &prim, SdfPath const &cachePath, const UsdImagingInstancerContext *instancerContext) const override
#define PXR_NAMESPACE_CLOSE_SCOPE
USDSKELIMAGING_API PxOsdSubdivTags GetSubdivTags(UsdPrim const &usdPrim, SdfPath const &cachePath, UsdTimeCode time) const override
Get the subdiv tags for this prim.
UsdSkelImagingSkeletonAdapter()
USDSKELIMAGING_API void MarkReprDirty(UsdPrim const &prim, SdfPath const &cachePath, UsdImagingIndexProxy *index) override
USDSKELIMAGING_API bool GetDoubleSided(UsdPrim const &prim, SdfPath const &cachePath, UsdTimeCode time) const override
Reads double-sided from the given prim. If not authored, returns false.
USDSKELIMAGING_API void RegisterSkelBinding(UsdSkelBinding const &binding)
USDSKELIMAGING_API size_t SampleExtComputationInput(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &name, UsdTimeCode time, const UsdImagingInstancerContext *instancerContext, size_t maxSampleCount, float *sampleTimes, VtValue *sampleValues) override
USDSKELIMAGING_API void UpdateForTime(const UsdPrim &prim, const SdfPath &cachePath, UsdTimeCode time, HdDirtyBits requestedBits, const UsdImagingInstancerContext *instancerContext=nullptr) const override
Thread Safe.
USDSKELIMAGING_API TfToken GetPurpose(UsdPrim const &prim, SdfPath const &cachePath, TfToken const &instanceInheritablePurpose) const override
USDSKELIMAGING_API HdExtComputationOutputDescriptorVector GetExtComputationOutputs(UsdPrim const &prim, SdfPath const &cachePath, const UsdImagingInstancerContext *instancerContext) const override
USDSKELIMAGING_API const TfTokenVector & GetExtComputationSceneInputNames(SdfPath const &cachePath) const override
UsdImagingPropertyInvalidationType
USDSKELIMAGING_API void MarkCullStyleDirty(UsdPrim const &prim, SdfPath const &cachePath, UsdImagingIndexProxy *index) override
std::vector< HdExtComputationPrimvarDescriptor > HdExtComputationPrimvarDescriptorVector