UsdSkelAnimQuery UsdSkel_CacheImpl::ReadScope::FindOrCreateAnimQuery(const UsdPrim& prim) { TRACE_FUNCTION(); if(ARCH_UNLIKELY(!prim || !prim.IsActive())) return UsdSkelAnimQuery(); if(prim.IsInstanceProxy()) return FindOrCreateAnimQuery(prim.GetPrimInMaster()); { _PrimToAnimMap::const_accessor a; if(_cache->_animQueryCache.find(a, prim)) return UsdSkelAnimQuery(a->second); } if (UsdSkelIsSkelAnimationPrim(prim)) { _PrimToAnimMap::accessor a; if(_cache->_animQueryCache.insert(a, prim)) { a->second = UsdSkel_AnimQueryImpl::New(prim); } return UsdSkelAnimQuery(a->second); } return UsdSkelAnimQuery(); }
bool UsdSkel_CacheImpl::ReadScope::Populate(const UsdSkelRoot& root) { TRACE_FUNCTION(); TF_DEBUG(USDSKEL_CACHE).Msg("[UsdSkelCache]: Populate map from <%s>\n", root.GetPrim().GetPath().GetText()); if(!root) { TF_CODING_ERROR("'root' is invalid."); return false; } _RecursivePopulate(root.GetPrim(), SkinningQueryKey(), UsdSkelAnimQuery(), /*depth*/ 1); return true; }