void UsdImagingPointsAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, HdDirtyBits requestedBits, HdDirtyBits* dirtyBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::TrackVariability( prim, cachePath, requestedBits, dirtyBits, instancerContext); if (requestedBits & HdChangeTracker::DirtyPoints) { // Discover time-varying points. _IsVarying(prim, UsdGeomTokens->points, HdChangeTracker::DirtyPoints, UsdImagingTokens->usdVaryingPrimVar, dirtyBits, /*isInherited*/false); } if (requestedBits & HdChangeTracker::DirtyWidths) { _IsVarying(prim, UsdGeomTokens->widths, HdChangeTracker::DirtyWidths, UsdImagingTokens->usdVaryingWidths, dirtyBits, /*isInherited*/false); } }
void UsdImagingCapsuleAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, HdDirtyBits* timeVaryingBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::TrackVariability( prim, cachePath, timeVaryingBits, instancerContext); // WARNING: This method is executed from multiple threads, the value cache // has been carefully pre-populated to avoid mutating the underlying // container during update. if (!_IsVarying(prim, UsdGeomTokens->radius, HdChangeTracker::DirtyPoints, UsdImagingTokens->usdVaryingPrimVar, timeVaryingBits, /*isInherited*/false)) { _IsVarying(prim, UsdGeomTokens->height, HdChangeTracker::DirtyPoints, UsdImagingTokens->usdVaryingPrimVar, timeVaryingBits, /*isInherited*/false); } }
void UsdImagingMeshAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, HdDirtyBits requestedBits, HdDirtyBits* dirtyBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::TrackVariability( prim, cachePath, requestedBits, dirtyBits, instancerContext); // WARNING: This method is executed from multiple threads, the value cache // has been carefully pre-populated to avoid mutating the underlying // container during update. if (requestedBits & HdChangeTracker::DirtyPoints) { // Discover time-varying points. _IsVarying(prim, UsdGeomTokens->points, HdChangeTracker::DirtyPoints, UsdImagingTokens->usdVaryingPrimVar, dirtyBits, /*isInherited*/false); } if (requestedBits & HdChangeTracker::DirtyTopology) { // Discover time-varying topology. if (!_IsVarying(prim, UsdGeomTokens->faceVertexCounts, HdChangeTracker::DirtyTopology, UsdImagingTokens->usdVaryingTopology, dirtyBits, /*isInherited*/false)) { // Only do this check if the faceVertexCounts is not already known // to be varying. if (!_IsVarying(prim, UsdGeomTokens->faceVertexIndices, HdChangeTracker::DirtyTopology, UsdImagingTokens->usdVaryingTopology, dirtyBits, /*isInherited*/false)) { // Only do this check if both faceVertexCounts and // faceVertexIndices are not known to be varying. _IsVarying(prim, UsdGeomTokens->holeIndices, HdChangeTracker::DirtyTopology, UsdImagingTokens->usdVaryingTopology, dirtyBits, /*isInherited*/false); } } } }
void UsdImagingCubeAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, HdDirtyBits* timeVaryingBits, UsdImagingInstancerContext const* instancerContext) const { BaseAdapter::TrackVariability( prim, cachePath, timeVaryingBits, instancerContext); // WARNING: This method is executed from multiple threads, the value cache // has been carefully pre-populated to avoid mutating the underlying // container during update. // The base adapter may already be setting that transform dirty bit. // _IsVarying will clear it, so check it isn't already marked as // varying before checking for additional set cases. if ((*timeVaryingBits & HdChangeTracker::DirtyTransform) == 0) { _IsVarying(prim, UsdGeomTokens->size, HdChangeTracker::DirtyTransform, UsdImagingTokens->usdVaryingXform, timeVaryingBits, /*inherited*/false); } }
void UsdImagingCubeAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, HdDirtyBits requestedBits, HdDirtyBits* dirtyBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::TrackVariability( prim, cachePath, requestedBits, dirtyBits, instancerContext); // WARNING: This method is executed from multiple threads, the value cache // has been carefully pre-populated to avoid mutating the underlying // container during update. UsdTimeCode time(1.0); if (requestedBits & HdChangeTracker::DirtyTransform) { if (!(*dirtyBits & HdChangeTracker::DirtyTransform)) { _IsVarying(prim, UsdGeomTokens->size, HdChangeTracker::DirtyTransform, UsdImagingTokens->usdVaryingXform, dirtyBits, /*inherited*/false); } } }
void UsdImagingGprimAdapter::TrackVariability(UsdPrim const& prim, SdfPath const& cachePath, int requestedBits, int* dirtyBits, UsdImagingInstancerContext const* instancerContext) { // WARNING: This method is executed from multiple threads, the value cache // has been carefully pre-populated to avoid mutating the underlying // container during update. // Why is this OK? // Either the value is unvarying, in which case the time ordinate doesn't // matter; or the value is varying, in which case we will update it upon // first call to Delegate::SetTime(). UsdTimeCode time(1.0); UsdImagingValueCache* valueCache = _GetValueCache(); if (requestedBits & HdChangeTracker::DirtyPrimVar) { if (not _IsVarying(prim, UsdGeomTokens->primvarsDisplayColor, HdChangeTracker::DirtyPrimVar, UsdImagingTokens->usdVaryingPrimVar, dirtyBits, false)) { // Only do this second check if the displayColor isn't already known // to be varying. _IsVarying(prim, UsdGeomTokens->primvarsDisplayOpacity, HdChangeTracker::DirtyPrimVar, UsdImagingTokens->usdVaryingPrimVar, dirtyBits, false); } } if (requestedBits & HdChangeTracker::DirtyExtent) { // Discover time-varying extent. _IsVarying(prim, UsdGeomTokens->extent, HdChangeTracker::DirtyExtent, UsdImagingTokens->usdVaryingExtent, dirtyBits, false); } if (requestedBits & HdChangeTracker::DirtyTransform) { // Discover time-varying transforms. _IsTransformVarying(prim, HdChangeTracker::DirtyTransform, UsdImagingTokens->usdVaryingXform, dirtyBits); } if (requestedBits & HdChangeTracker::DirtyVisibility) { valueCache->GetVisible(cachePath) = GetVisible(prim, time); // Discover time-varying visibility. _IsVarying(prim, UsdGeomTokens->visibility, HdChangeTracker::DirtyVisibility, UsdImagingTokens->usdVaryingVisibility, dirtyBits, true); TfToken purpose = _GetPurpose(prim, time); // Empty purpose means there is no opinion, fall back to geom. if (purpose.IsEmpty()) purpose = UsdGeomTokens->default_; valueCache->GetPurpose(cachePath) = purpose; } }