void UsdImagingPointsAdapter::UpdateForTime(UsdPrim const& prim, SdfPath const& cachePath, UsdTimeCode time, HdDirtyBits requestedBits, HdDirtyBits* resultBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::UpdateForTime( prim, cachePath, time, requestedBits, resultBits, instancerContext); UsdImagingValueCache* valueCache = _GetValueCache(); PrimvarInfoVector& primvars = valueCache->GetPrimvars(cachePath); VtValue& pointsValues = valueCache->GetPoints(cachePath); if (requestedBits & HdChangeTracker::DirtyPoints) { _GetPoints(prim, &pointsValues, time); UsdImagingValueCache::PrimvarInfo primvar; primvar.name = HdTokens->points; primvar.interpolation = UsdGeomTokens->vertex; _MergePrimvar(primvar, &primvars); } if (requestedBits & HdChangeTracker::DirtyWidths) { UsdImagingValueCache::PrimvarInfo primvar; UsdGeomPoints points(prim); VtFloatArray widths; primvar.name = UsdGeomTokens->widths; // XXX Add support for real constant interpolation primvar.interpolation = UsdGeomTokens->vertex; // Read the widths, if there is no widths create a buffer // and fill it with default widths of 1.0f if (!points.GetWidthsAttr().Get(&widths, time)) { // Check if we have just updated the points because in that // case we don't need to read the points again if (!(requestedBits & HdChangeTracker::DirtyPoints)) { _GetPoints(prim, &pointsValues, time); } for(size_t i = 0; i < pointsValues.Get<VtVec3fArray>().size() ; i ++) { widths.push_back(1.0f); } } _MergePrimvar(primvar, &primvars); valueCache->GetWidths(cachePath) = VtValue(widths); } }
void UsdImagingPointsAdapter::UpdateForTimePrep(UsdPrim const& prim, SdfPath const& cachePath, UsdTimeCode time, HdDirtyBits requestedBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::UpdateForTimePrep( prim, cachePath, time, requestedBits, instancerContext); UsdImagingValueCache* valueCache = _GetValueCache(); if (requestedBits & HdChangeTracker::DirtyPoints) valueCache->GetPoints(cachePath); if (requestedBits & HdChangeTracker::DirtyWidths) valueCache->GetWidths(cachePath); }