HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
changes.h
Go to the documentation of this file.
1 //
2 // Copyright 2016 Pixar
3 //
4 // Licensed under the terms set forth in the LICENSE.txt file available at
5 // https://openusd.org/license.
6 //
7 #ifndef PXR_USD_PCP_CHANGES_H
8 #define PXR_USD_PCP_CHANGES_H
9 
10 /// \file pcp/changes.h
11 
12 #include "pxr/pxr.h"
13 #include "pxr/usd/pcp/api.h"
14 #include "pxr/usd/pcp/dependency.h"
15 #include "pxr/usd/pcp/errors.h"
17 #include "pxr/usd/sdf/changeList.h"
19 #include "pxr/usd/sdf/path.h"
20 #include "pxr/usd/sdf/types.h"
22 
23 #include <map>
24 #include <set>
25 #include <unordered_set>
26 
28 
31 
32 class PcpCache;
33 class PcpSite;
34 
35 /// \class PcpLayerStackChanges
36 ///
37 /// Types of changes per layer stack.
38 ///
40 public:
41  /// Must rebuild the layer tree. Implies didChangeLayerOffsets.
43 
44  /// Must rebuild the layer offsets.
46 
47  /// Must rebuild the relocation tables.
49 
50  /// Must rebuild expression variables.
52 
53  /// A significant layer stack change means the composed opinions of
54  /// the layer stack may have changed in arbitrary ways. This
55  /// represents a coarse invalidation. By way of contrast, an example
56  /// of an insignificant change is adding or removing a layer empty
57  /// of opinions.
59 
60  /// New relocation maps for this layer stack.
61  /// If didChangeRelocates is true, these fields will be populated
62  /// as part of determining the changes to this layer stack.
63  /// However, we do not immediately apply those changes to the
64  /// layer stack; we store them here and commit them in Apply().
71 
72  /// Paths that are affected by the above relocation changes.
74 
75  /// New expression variables for this layer stack.
77 
79  : didChangeLayers(false)
80  , didChangeLayerOffsets(false)
81  , didChangeRelocates(false)
83  , didChangeSignificantly(false)
84  , _didChangeExpressionVariablesSource(false)
85  {}
86 
87 private:
88  friend class PcpChanges;
89  friend class PcpLayerStack;
90 
91  // Expression variables source has changed.
92  bool _didChangeExpressionVariablesSource;
93 
94  // New source for expression variables for this layer stack.
95  PcpExpressionVariablesSource _newExpressionVariablesSource;
96 };
97 
98 /// \class PcpCacheChanges
99 ///
100 /// Types of changes per cache.
101 ///
103 public:
104  enum TargetType {
107  };
108 
109  /// Must rebuild the indexes at and below each path. This
110  /// implies rebuilding the prim/property stacks at
111  /// and below each path.
113 
114  /// Must rebuild the prim/property stacks at each path.
116 
117  /// Must rebuild the prim indexes at each path. This implies rebuilding
118  /// the prim stack at each path.
120 
121  /// Must rebuild the connections/targets at each path.
122  std::map<SdfPath, int, SdfPath::FastLessThan> didChangeTargets;
123 
124  /// Must update the path on every namespace object at and below each
125  /// given path. The first path is the old path to the object and the
126  /// second path is the new path. The order of the vector matters and
127  /// indicates the order in which the namespace edits occur.
128  std::vector<std::pair<SdfPath, SdfPath>> didChangePath;
129 
130  /// Layers used in the composition may have changed.
131  bool didMaybeChangeLayers = false;
132 
133  /// Set of layers that were explicitly muted or removed from a sublayer
134  /// list and all sublayers of those layers, recursively.
135  std::unordered_set<SdfLayerHandle, TfHash> layersAffectedByMutingOrRemoval;
136 
137  // Holds all the diff changelists that were computed when adding/removing
138  // sublayers or muting/unmuting layers.
140 
141 private:
142  friend class PcpCache;
143  friend class PcpChanges;
144 
145  using _ProcessedLayerSublayerPathPairsKey =
146  std::pair<SdfLayerHandle, std::string>;
147 
148  using _LayerToLayerStacks =
149  std::unordered_map<SdfLayerHandle, PcpLayerStackPtrVector, TfHash>;
150 
151  /// Sets a list of layer stacks that should override query results for the
152  /// supplied layer. In practice, this is used during change processing for
153  /// layers that are being unmuted or sublayers that are being added.
154  void _SetLayerStacksUsingLayerOverride(
155  const SdfLayerHandle& layer,
156  const PcpLayerStackPtrVector& layerStacks);
157 
158  /// Returns the overrides set for the supplied layer.
159  const PcpLayerStackPtrVector&
160  _GetLayerStacksUsingLayerOverride(const SdfLayerHandle& layer) const;
161 
162  // Set of hashed layer / sublayer path pairs that have been processed in
163  // in this round of changes. These values are checked in order to avoid
164  // recursively processing cycles created in layer stacks.
165  std::unordered_set<_ProcessedLayerSublayerPathPairsKey, TfHash>
166  _processedLayerSublayerPathPairs;
167 
168  // Must rebuild the prim/property stacks at each path due to a change
169  // that only affects the internal representation of the stack and
170  // not its contents. Because this causes no externally-observable
171  // changes in state, clients do not need to be aware of these changes.
172  SdfPathSet _didChangeSpecsInternal;
173 
174  // This set serves a similar purpose to _didChangeSpecsInternal above,
175  // however, during processing descendants of the specs in this set will also
176  // be marked as changed. A performance gain is accomplished by placing the
177  // ancestor specs in this set and processing children iteratively when
178  // applying changes to the cache.
179  SdfPathSet _didChangePrimSpecsAndChildrenInternal;
180 
181  // Holds layer stack overrides set for individual layers
182  _LayerToLayerStacks _layerToLayerStackOverrides;
183 };
184 
185 /// Structure used to temporarily retain layers and layerStacks within
186 /// a code block. Analogous to the autorelease pool in obj-c.
187 class PcpLifeboat {
188 public:
189  PcpLifeboat();
190  ~PcpLifeboat();
191 
192  /// Ensure that \p layer exists until this object is destroyed.
193  void Retain(const SdfLayerRefPtr& layer);
194 
195  /// Ensure that \p layerStack exists until this object is destroyed.
196  void Retain(const PcpLayerStackRefPtr& layerStack);
197 
198  /// Returns reference to the set of layer stacks currently being held
199  /// in the lifeboat.
200  const std::set<PcpLayerStackRefPtr>& GetLayerStacks() const;
201 
202  /// Swap the contents of this and \p other.
203  void Swap(PcpLifeboat& other);
204 
205 private:
206  std::set<SdfLayerRefPtr> _layers;
207  std::set<PcpLayerStackRefPtr> _layerStacks;
208 };
209 
210 /// \class PcpChanges
211 ///
212 /// Describes Pcp changes.
213 ///
214 /// Collects changes to Pcp necessary to reflect changes in Sdf. It does
215 /// not cause any changes to any Pcp caches, layer stacks, etc; it only
216 /// computes what changes would be necessary to Pcp to reflect the Sdf
217 /// changes.
218 ///
219 class PcpChanges {
220 public:
223 
224  /// Breaks down \p changes into individual changes on \p cache. This
225  /// simply translates data in \p changes into other Did...() calls on
226  /// this object.
227  ///
228  /// Clients will typically call this method once then call \c Apply() or
229  /// get the changes using \c GetLayerStackChanges() and
230  /// \c GetCacheChanges().
231  PCP_API
232  void DidChange(const PcpCache* cache,
233  const SdfLayerChangeListVec& changes);
234 
235  /// Tries to load the sublayer of \p layer at \p sublayerPath. If
236  /// successful, any layer stack using \p layer is marked as having changed
237  /// and all prims in \p cache using any prim in any of those layer stacks
238  /// are marked as changed.
239  PCP_API
240  void DidMaybeFixSublayer(const PcpCache* cache,
241  const SdfLayerHandle& layer,
242  const std::string& assetPath);
243 
244  /// Tries to load the asset at \p assetPath. If successful, any prim
245  /// in \p cache using the site \p site is marked as changed.
246  PCP_API
247  void DidMaybeFixAsset(const PcpCache* cache,
248  const PcpSite& site,
249  const SdfLayerHandle& srcLayer,
250  const std::string& assetPath);
251 
252  /// The layer identified by \p layerId was muted in \p cache.
253  PCP_API
254  void _DidMuteLayer(const PcpCache* cache, const std::string& layerId);
255 
256  /// The layer identified by \p layerId was unmuted in \p cache.
257  PCP_API
258  void _DidUnmuteLayer(const PcpCache* cache, const std::string& layerId);
259 
260  /// Sets the list of layers that will ultimately be muted and unmuted for
261  /// this round of changes. This is used as hints for various change
262  /// processing methods. Note that identifiers passed into this function
263  /// will be opened and placed in the lifeboat associated with this
264  /// PcpChanges object.
265  void DidMuteAndUnmuteLayers(const PcpCache* cache,
266  const std::vector<std::string>& layersToMute,
267  const std::vector<std::string>& layersToUnmute);
268 
269  /// The object at \p path changed significantly enough to require
270  /// recomputing the entire prim or property index. A significant change
271  /// implies changes to every namespace descendant's index, specs, and
272  /// dependencies.
273  PCP_API
274  void DidChangeSignificantly(const PcpCache* cache, const SdfPath& path);
275 
279  };
280 
281  /// The spec stack for the prim or property has changed, due to the
282  /// addition or removal of the spec in \p changedLayer at \p changedPath.
283  /// This is used when inert prims/properties are added or removed or when
284  /// any change requires rebuilding the property stack. It implies that
285  /// dependencies on those specs has changed.
286  PCP_API
287  void DidChangeSpecs(const PcpCache* cache, const SdfPath& path,
288  const SdfLayerHandle& changedLayer,
289  const SdfPath& changedPath, ChangeSpecsType changeType);
290 
291  /// The spec stack for the prim or property at \p path in \p cache has
292  /// changed.
293  PCP_API
294  void DidChangeSpecStack(const PcpCache* cache, const SdfPath& path);
295 
296  /// The connections on the attribute or targets on the relationship have
297  /// changed.
298  PCP_API
299  void DidChangeTargets(const PcpCache* cache, const SdfPath& path,
300  PcpCacheChanges::TargetType targetType);
301 
302  /// The composed object at \p oldPath was moved to \p newPath. This
303  /// implies every corresponding Sd change. This object will subsume
304  /// those Sd changes under this higher-level move. Sd path changes
305  /// that are not so subsumed will be converted to DidChangePrimGraph()
306  /// and/or DidChangeSpecs() changes.
307  PCP_API
308  void DidChangePaths(const PcpCache* cache,
309  const SdfPath& oldPath, const SdfPath& newPath);
310 
311  /// Remove any changes for \p cache.
312  PCP_API
313  void DidDestroyCache(const PcpCache* cache);
314 
315  /// The asset resolver has changed, invalidating previously-resolved
316  /// asset paths. This function will check all prim indexes in \p cache
317  /// for composition arcs that may now refer to a different asset and
318  /// mark them as needing significant resyncs.
319  PCP_API
320  void DidChangeAssetResolver(const PcpCache* cache);
321 
322  /// Swap the contents of this and \p other.
323  PCP_API
324  void Swap(PcpChanges& other);
325 
326  /// Returns \c true iff there are no changes.
327  PCP_API
328  bool IsEmpty() const;
329 
330  typedef std::map<PcpLayerStackPtr, PcpLayerStackChanges> LayerStackChanges;
331  typedef std::map<PcpCache*, PcpCacheChanges> CacheChanges;
332 
333  /// Returns a map of all of the layer stack changes. Note that some
334  /// keys may be to expired layer stacks.
335  PCP_API
337 
338  /// Returns a map of all of the cache changes.
339  PCP_API
340  const CacheChanges& GetCacheChanges() const;
341 
342  /// Returns the lifeboat responsible for maintaining the lifetime of
343  /// layers and layer stacks during change processing. Consumers may
344  /// inspect this object to determine which of these objects, if any,
345  /// had their lifetimes affected during change processing.
346  PCP_API
347  const PcpLifeboat& GetLifeboat() const;
348 
349  /// Applies the changes to the layer stacks and caches.
350  PCP_API
351  void Apply() const;
352 
353  /// Returns dependencies of the given site of scene description.
354  /// This is similar to PcpCache::FindSiteDependencies but takes
355  /// into account additional information from changes processed
356  /// by this object.
357  PCP_API
359  FindSiteDependencies(const PcpCache* cache,
360  const SdfLayerHandle& siteLayer,
361  const SdfPath& sitePath,
362  PcpDependencyFlags depMask,
363  bool recurseOnSite,
364  bool recurseOnIndex,
365  bool filterForExistingCachesOnly) const;
366 
367  /// Returns every layer stack that includes \p layer.
368  /// This is similar to PcpCache::FindAllLayerStacksUsingLayer but takes
369  /// into account additional information from changes processed
370  /// by this object.
371  PCP_API
372  const PcpLayerStackPtrVector&
374  const SdfLayerHandle& layer) const;
375 
376 private:
377  // Internal data types for namespace edits from Sd.
378  typedef std::map<SdfPath, SdfPath> _PathEditMap;
379  typedef std::map<PcpCache*, _PathEditMap> _RenameChanges;
380 
381  // Returns the PcpLayerStackChanges for the given layer stack.
382  PcpLayerStackChanges& _GetLayerStackChanges(const PcpLayerStackPtr&);
383 
384  // Returns the PcpCacheChanges for the given cache.
385  PcpCacheChanges& _GetCacheChanges(const PcpCache* cache);
386 
387  // Returns the _PathEditMap for the given cache.
388  _PathEditMap& _GetRenameChanges(const PcpCache* cache);
389 
390 
391  // Optimize the changes.
392  void _Optimize() const;
393 
394  // Optimize the changes.
395  void _Optimize();
396 
397  // Optimize the changes for a given cache.
398  void _Optimize(PcpCacheChanges*);
399 
400  // Optimize path changes.
401  void _OptimizePathChanges(const PcpCache* cache, PcpCacheChanges* changes,
402  const _PathEditMap* pathChanges);
403 
404  // Sublayer change type for _DidChangeSublayer.
405  enum _SublayerChangeType {
406  _SublayerAdded,
407  _SublayerRemoved
408  };
409 
410  // Helper function for loading a sublayer of \p layer at \p sublayerPath
411  // for processing changes described by \p sublayerChange.
412  SdfLayerRefPtr _LoadSublayerForChange(const PcpCache* cache,
413  const SdfLayerHandle& layer,
414  const std::string& sublayerPath,
415  _SublayerChangeType changeType) const;
416 
417  // Helper function for loading a sublayer at \p sublayerPath
418  // for processing changes described by \p sublayerChange.
419  SdfLayerRefPtr _LoadSublayerForChange(const PcpCache* cache,
420  const std::string& sublayerPath,
421  _SublayerChangeType changeType) const;
422 
423  // Propagates changes to \p sublayer specified by \p sublayerChange to
424  // the dependents of that sublayer. This includes all layer stacks
425  // that include the sublayer.
426  void _DidChangeSublayerAndLayerStacks(const PcpCache* cache,
427  const PcpLayerStackPtrVector& stacks,
428  const std::string& sublayerPath,
429  const SdfLayerHandle& sublayer,
430  _SublayerChangeType sublayerChange,
431  std::string* debugSummary);
432 
433  // Propagates changes to \p sublayer specified by \p sublayerChange to
434  // the dependents of that sublayer.
435  void _DidChangeSublayer(const PcpCache* cache,
436  const PcpLayerStackPtrVector& layerStacks,
437  const std::string& sublayerPath,
438  const SdfLayerHandle& sublayer,
439  _SublayerChangeType sublayerChange,
440  std::string* debugSummary,
441  bool *significant);
442 
443  // Propagates changes due to the addition/removal of the sublayer
444  // at the given \p sublayerPath to/from the parent \p layer.
445  void _DidAddOrRemoveSublayer(const PcpCache* cache,
446  const PcpLayerStackPtrVector& layerStacks,
447  const SdfLayerHandle& layer,
448  const std::string& sublayerPath,
449  _SublayerChangeType sublayerChange,
450  std::string* debugSummary,
451  std::vector<bool> *significant);
452 
453  // Mark the layer stack as having changed.
454  void _DidChangeLayerStack(
455  const PcpCache* cache,
456  const PcpLayerStackPtr& layerStack,
457  bool requiresLayerStackChange,
458  bool requiresLayerStackOffsetsChange,
459  bool requiresSignificantChange);
460 
461  // Mark the layer stack's relocations as having changed.
462  // Recompute the new relocations, storing the result in the Changes,
463  // so that change-processing can determine which other caches it
464  // needs to invalidate.
465  void _DidChangeLayerStackRelocations(
466  const PcpCache* cache,
467  const PcpLayerStackPtr& layerStack,
468  std::string* debugSummary);
469 
470  // Register changes to any prim indexes in \p caches that are affected
471  // by a change to a layer's resolved path used by \p layerStack.
472  void _DidChangeLayerStackResolvedPath(
473  const PcpCache* cache,
474  const PcpLayerStackPtr& layerStack,
475  bool requiresLayerStackChange,
476  std::string* debugSummary);
477 
478  // Register changes to layer stacks and prim indexes in \p cache that are
479  // affected by a change to a layer's expression variables used by
480  // \p layerStack.
481  void _DidChangeLayerStackExpressionVariables(
482  const PcpCache* cache,
483  const PcpLayerStackPtr& layerStack,
484  std::string* debugSummary);
485 
486  // The spec stack for the prim or property index at \p path must be
487  // recomputed due to a change that affects only the internal representation
488  // of the stack and not its contents.
489  void _DidChangeSpecStackInternal(
490  const PcpCache* cache, const SdfPath& path);
491 
492  void _DidChangeSpecStackAndChildrenInternal(
493  const PcpCache* cache, const SdfPath& path);
494 
495  // This method is used when processing layer operations. It ensures that
496  // affected layer stacks and their dependent spec stacks are marked as
497  // changed.
498  void _ProcessLayerStackAndDependencyChanges(
499  const PcpCache* cache,
500  const PcpLayerStackPtrVector& layerStacks);
501 
502  // When muting or unmuting a layer that is being referenced or payloaded,
503  // we need to ensure that all the relevant sites are recomposed. This
504  // function searches site dependencies of the provided layer stacks and
505  // marks those that are introduced via reference or payload arcs as
506  // significantly changed.
507  void _MarkReferencingSitesAsSignificantlyChanged(
508  const PcpCache* cache,
509  const PcpLayerStackPtrVector& layerStacks);
510 
511 private:
512  LayerStackChanges _layerStackChanges;
513  CacheChanges _cacheChanges;
514  _RenameChanges _renameChanges;
515  mutable PcpLifeboat _lifeboat;
516 };
517 
519 
520 #endif // PXR_USD_PCP_CHANGES_H
Definition: layer.h:81
PXR_NAMESPACE_OPEN_SCOPE SDF_DECLARE_HANDLES(SdfLayer)
std::vector< PcpDependency > PcpDependencyVector
Definition: dependency.h:115
PCP_API void DidMaybeFixSublayer(const PcpCache *cache, const SdfLayerHandle &layer, const std::string &assetPath)
SdfRelocatesMap newIncrementalRelocatesTargetToSource
Definition: changes.h:68
VtDictionary newExpressionVariables
New expression variables for this layer stack.
Definition: changes.h:76
SdfPathSet didChangePrims
Definition: changes.h:119
SdfLayerChangeListVec layerChangeListVec
Definition: changes.h:139
std::map< SdfPath, SdfPath > SdfRelocatesMap
A map of source SdfPaths to target SdfPaths for relocation.
Definition: types.h:270
#define PXR_NAMESPACE_OPEN_SCOPE
Definition: pxr.h:73
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
TF_DECLARE_WEAK_AND_REF_PTRS(PcpLayerStack)
PCP_API ~PcpChanges()
bool didChangeExpressionVariables
Must rebuild expression variables.
Definition: changes.h:51
Definition: cache.h:76
PCP_API void Apply() const
Applies the changes to the layer stacks and caches.
Definition: site.h:28
PCP_API const CacheChanges & GetCacheChanges() const
Returns a map of all of the cache changes.
SdfPathVector newRelocatesPrimPaths
Definition: changes.h:69
PCP_API void DidChangeAssetResolver(const PcpCache *cache)
GLenum GLuint GLint GLint layer
Definition: glcorearb.h:1299
PCP_API const LayerStackChanges & GetLayerStackChanges() const
PCP_API void DidChangeSignificantly(const PcpCache *cache, const SdfPath &path)
SdfPathSet pathsAffectedByRelocationChanges
Paths that are affected by the above relocation changes.
Definition: changes.h:73
std::vector< class SdfPath > SdfPathVector
PCP_API const PcpLifeboat & GetLifeboat() const
std::map< SdfPath, int, SdfPath::FastLessThan > didChangeTargets
Must rebuild the connections/targets at each path.
Definition: changes.h:122
PCP_API PcpChanges()
PCP_API void DidDestroyCache(const PcpCache *cache)
Remove any changes for cache.
PcpErrorVector newRelocatesErrors
Definition: changes.h:70
PCP_API const PcpLayerStackPtrVector & FindAllLayerStacksUsingLayer(const PcpCache *cache, const SdfLayerHandle &layer) const
void Swap(PcpLifeboat &other)
Swap the contents of this and other.
SdfRelocatesMap newIncrementalRelocatesSourceToTarget
Definition: changes.h:67
bool didChangeLayers
Must rebuild the layer tree. Implies didChangeLayerOffsets.
Definition: changes.h:42
std::map< PcpLayerStackPtr, PcpLayerStackChanges > LayerStackChanges
Definition: changes.h:330
Definition: path.h:280
PCP_API void Swap(PcpChanges &other)
Swap the contents of this and other.
PCP_API void DidChangeSpecs(const PcpCache *cache, const SdfPath &path, const SdfLayerHandle &changedLayer, const SdfPath &changedPath, ChangeSpecsType changeType)
PCP_API PcpDependencyVector FindSiteDependencies(const PcpCache *cache, const SdfLayerHandle &siteLayer, const SdfPath &sitePath, PcpDependencyFlags depMask, bool recurseOnSite, bool recurseOnIndex, bool filterForExistingCachesOnly) const
PCP_API void DidChangePaths(const PcpCache *cache, const SdfPath &oldPath, const SdfPath &newPath)
std::vector< PcpErrorBasePtr > PcpErrorVector
Definition: errors.h:65
bool didMaybeChangeLayers
Layers used in the composition may have changed.
Definition: changes.h:131
std::set< class SdfPath > SdfPathSet
A set of SdfPaths.
Definition: path.h:199
std::map< PcpCache *, PcpCacheChanges > CacheChanges
Definition: changes.h:331
SdfPathSet didChangeSpecs
Must rebuild the prim/property stacks at each path.
Definition: changes.h:115
bool didChangeRelocates
Must rebuild the relocation tables.
Definition: changes.h:48
std::vector< std::pair< SdfLayerHandle, SdfChangeList > > SdfLayerChangeListVec
Definition: changeList.h:25
SdfPathSet didChangeSignificantly
Definition: changes.h:112
PCP_API bool IsEmpty() const
Returns true iff there are no changes.
SdfRelocatesMap newRelocatesTargetToSource
Definition: changes.h:65
PCP_API void DidChangeTargets(const PcpCache *cache, const SdfPath &path, PcpCacheChanges::TargetType targetType)
PCP_API void _DidUnmuteLayer(const PcpCache *cache, const std::string &layerId)
The layer identified by layerId was unmuted in cache.
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:74
ChangeSpecsType
Definition: changes.h:276
bool didChangeSignificantly
Definition: changes.h:58
PCP_API void DidMaybeFixAsset(const PcpCache *cache, const PcpSite &site, const SdfLayerHandle &srcLayer, const std::string &assetPath)
SdfRelocatesMap newRelocatesSourceToTarget
Definition: changes.h:66
PCP_API void _DidMuteLayer(const PcpCache *cache, const std::string &layerId)
The layer identified by layerId was muted in cache.
const std::set< PcpLayerStackRefPtr > & GetLayerStacks() const
void Retain(const SdfLayerRefPtr &layer)
Ensure that layer exists until this object is destroyed.
PCP_API void DidChangeSpecStack(const PcpCache *cache, const SdfPath &path)
PCP_API void DidChange(const PcpCache *cache, const SdfLayerChangeListVec &changes)
unsigned int PcpDependencyFlags
A typedef for a bitmask of flags from PcpDependencyType.
Definition: dependency.h:92
void DidMuteAndUnmuteLayers(const PcpCache *cache, const std::vector< std::string > &layersToMute, const std::vector< std::string > &layersToUnmute)
bool didChangeLayerOffsets
Must rebuild the layer offsets.
Definition: changes.h:45
std::unordered_set< SdfLayerHandle, TfHash > layersAffectedByMutingOrRemoval
Definition: changes.h:135
std::vector< std::pair< SdfPath, SdfPath > > didChangePath
Definition: changes.h:128
#define PCP_API
Definition: api.h:23