void UsdImagingCubeAdapter::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(); if (requestedBits & HdChangeTracker::DirtyTransform) { // Update the transform with the size authored for the cube. GfMatrix4d& ctm = valueCache->GetTransform(cachePath); GfMatrix4d xf = GetMeshTransform(prim, time); ctm = xf * ctm; } if (requestedBits & HdChangeTracker::DirtyTopology) { valueCache->GetTopology(cachePath) = GetMeshTopology(); } if (requestedBits & HdChangeTracker::DirtyPoints) { valueCache->GetPoints(cachePath)= GetMeshPoints(prim, time); // Expose points as a primvar. UsdImagingValueCache::PrimvarInfo primvar; primvar.name = HdTokens->points; primvar.interpolation = UsdGeomTokens->vertex; PrimvarInfoVector& primvars = valueCache->GetPrimvars(cachePath); _MergePrimvar(primvar, &primvars); } }
void UsdImagingMeshAdapter::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); if (requestedBits & HdChangeTracker::DirtyTopology) { VtValue& topology = valueCache->GetTopology(cachePath); _GetMeshTopology(prim, &topology, time); } if (requestedBits & HdChangeTracker::DirtyPoints) { VtValue& points = valueCache->GetPoints(cachePath); _GetPoints(prim, &points, time); UsdImagingValueCache::PrimvarInfo primvar; primvar.name = HdTokens->points; primvar.interpolation = UsdGeomTokens->vertex; _MergePrimvar(primvar, &primvars); } if (requestedBits & HdChangeTracker::DirtySubdivTags) { SubdivTags& tags = valueCache->GetSubdivTags(cachePath); _GetSubdivTags(prim, &tags, time); } }
// Thread safe. // * Populate dirty bits for the given \p time. void UsdImagingConeAdapter::UpdateForTime(UsdPrim const& prim, SdfPath const& cachePath, UsdTimeCode time, int requestedBits, int* resultBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::UpdateForTime( prim, cachePath, time, requestedBits, resultBits, instancerContext); UsdImagingValueCache* valueCache = _GetValueCache(); if (requestedBits & HdChangeTracker::DirtyTopology) { valueCache->GetTopology(cachePath) = GetMeshTopology(); } if (requestedBits & HdChangeTracker::DirtyPoints) { valueCache->GetPoints(cachePath) = GetMeshPoints(prim, time); // Expose points as a primvar. UsdImagingValueCache::PrimvarInfo primvar; primvar.name = HdTokens->points; primvar.interpolation = UsdGeomTokens->vertex; _MergePrimvar(primvar, &valueCache->GetPrimvars(cachePath)); } }
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 UsdImagingCubeAdapter::UpdateForTimePrep(UsdPrim const& prim, SdfPath const& cachePath, UsdTimeCode time, HdDirtyBits requestedBits, UsdImagingInstancerContext const* instancerContext) { BaseAdapter::UpdateForTimePrep(prim, cachePath, time, requestedBits); UsdImagingValueCache* valueCache = _GetValueCache(); // This adapter will never mark these as dirty, however the client may // explicitly ask for them, after the initial cached value is gone. if (requestedBits & HdChangeTracker::DirtyPoints) valueCache->GetPoints(cachePath); if (requestedBits & HdChangeTracker::DirtyTopology) valueCache->GetTopology(cachePath); }
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); }