Loading...
Searching...
No Matches
changeTracker.h
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_IMAGING_HD_CHANGE_TRACKER_H
25#define PXR_IMAGING_HD_CHANGE_TRACKER_H
26
27#include "pxr/pxr.h"
28#include "pxr/imaging/hd/api.h"
29#include "pxr/imaging/hd/version.h"
30#include "pxr/imaging/hd/rprimCollection.h"
31#include "pxr/imaging/hd/types.h"
32#include "pxr/usd/sdf/path.h"
33#include "pxr/base/tf/hashmap.h"
34
35#include <tbb/concurrent_hash_map.h>
36#include <atomic>
37
38PXR_NAMESPACE_OPEN_SCOPE
39
41
52{
53public:
54
55 // Common dirty bits for Rprims
56 // XXX: Move this to HdRprim
57 enum RprimDirtyBits : HdDirtyBits {
58 Clean = 0,
59 InitRepr = 1 << 0,
60 Varying = 1 << 1,
61 AllDirty = ~Varying,
62 DirtyPrimID = 1 << 2,
63 DirtyExtent = 1 << 3,
64 DirtyDisplayStyle = 1 << 4,
65 DirtyPoints = 1 << 5,
66 DirtyPrimvar = 1 << 6,
67 DirtyMaterialId = 1 << 7,
68 DirtyTopology = 1 << 8,
69 DirtyTransform = 1 << 9,
70 DirtyVisibility = 1 << 10,
71 DirtyNormals = 1 << 11,
72 DirtyDoubleSided = 1 << 12,
73 DirtyCullStyle = 1 << 13,
74 DirtySubdivTags = 1 << 14,
75 DirtyWidths = 1 << 15,
76 DirtyInstancer = 1 << 16,
77 DirtyInstanceIndex = 1 << 17,
78 DirtyRepr = 1 << 18,
79 DirtyRenderTag = 1 << 19,
80 DirtyComputationPrimvarDesc = 1 << 20,
81 DirtyCategories = 1 << 21,
82 DirtyVolumeField = 1 << 22,
83 AllSceneDirtyBits = ((1<<23) - 1),
84
85 NewRepr = 1 << 23,
86
87 CustomBitsBegin = 1 << 24,
88 CustomBitsEnd = 1 << 30,
89 CustomBitsMask = 0x7f << 24,
90 };
91
92 // InstancerDirtybits are a subset of rprim dirty bits right now:
93 // DirtyPrimvar, DirtyTransform, DirtyInstanceIndex, DirtyInstancer.
94
95 // Dirty bits for Tasks
96 // XXX: Move this to HdTask
97 enum TaskDirtyBits : HdDirtyBits {
98 DirtyParams = 1 << 2,
99 DirtyCollection = 1 << 3,
100 DirtyRenderTags = 1 << 4,
101 };
102
103 HD_API
105 HD_API
106 virtual ~HdChangeTracker();
107
108 // ---------------------------------------------------------------------- //
111 // ---------------------------------------------------------------------- //
112
114 HD_API
115 void RprimInserted(SdfPath const& id, HdDirtyBits initialDirtyState);
116
118 HD_API
119 void RprimRemoved(SdfPath const& id);
120
121 // ---------------------------------------------------------------------- //
125 // ---------------------------------------------------------------------- //
126
128 HD_API
129 HdDirtyBits GetRprimDirtyBits(SdfPath const& id) const;
130
133 HD_API
134 void MarkRprimDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
135
139 HD_API
140 void MarkRprimClean(SdfPath const& id, HdDirtyBits newBits=Clean);
141
143 HD_API
144 void MarkPrimvarDirty(SdfPath const& id, TfToken const& name);
145
149 HD_API
150 void MarkAllRprimsDirty(HdDirtyBits bits);
151
159 HD_API
161
165 HD_API
167
168
169 // ---------------------------------------------------------------------- //
170
172 HD_API
173 bool IsRprimDirty(SdfPath const& id);
174
176 HD_API
177 bool IsExtentDirty(SdfPath const& id);
178
180 HD_API
182
185 HD_API
186 bool IsPrimvarDirty(SdfPath const& id, TfToken const& name);
187
189 HD_API
190 bool IsAnyPrimvarDirty(SdfPath const& id);
191
193 HD_API
194 bool IsTopologyDirty(SdfPath const& id);
195
197 HD_API
199
201 HD_API
202 bool IsCullStyleDirty(SdfPath const& id);
203
205 HD_API
206 bool IsSubdivTagsDirty(SdfPath const& id);
207
209 HD_API
210 bool IsTransformDirty(SdfPath const& id);
211
213 HD_API
214 bool IsVisibilityDirty(SdfPath const& id);
215
217 HD_API
218 bool IsPrimIdDirty(SdfPath const& id);
219
222 static bool IsDirty(HdDirtyBits dirtyBits) {
223 return (dirtyBits & AllDirty) != 0;
224 }
225
227 static bool IsClean(HdDirtyBits dirtyBits) {
228 return (dirtyBits & AllDirty) == 0;
229 }
230
232 static bool IsVarying(HdDirtyBits dirtyBits) {
233 return (dirtyBits & Varying) != 0;
234 }
235
237 HD_API
238 static bool IsExtentDirty(HdDirtyBits dirtyBits, SdfPath const& id);
239
241 HD_API
242 static bool IsDisplayStyleDirty(HdDirtyBits dirtyBits, SdfPath const& id);
243
245 HD_API
246 static bool IsSubdivTagsDirty(HdDirtyBits dirtyBits, SdfPath const& id);
247
250 HD_API
251 static bool IsPrimvarDirty(HdDirtyBits dirtyBits, SdfPath const& id,
252 TfToken const& name);
253
256 HD_API
257 static bool IsAnyPrimvarDirty(HdDirtyBits dirtyBits, SdfPath const& id);
258
260 HD_API
261 static bool IsTopologyDirty(HdDirtyBits dirtyBits, SdfPath const& id);
262
264 HD_API
265 static bool IsDoubleSidedDirty(HdDirtyBits dirtyBits, SdfPath const& id);
266
268 HD_API
269 static bool IsCullStyleDirty(HdDirtyBits dirtyBits, SdfPath const& id);
270
272 HD_API
273 static bool IsTransformDirty(HdDirtyBits dirtyBits, SdfPath const& id);
274
276 HD_API
277 static bool IsVisibilityDirty(HdDirtyBits dirtyBits, SdfPath const& id);
278
280 HD_API
281 static bool IsPrimIdDirty(HdDirtyBits dirtyBits, SdfPath const& id);
282
284 HD_API
285 static bool IsInstancerDirty(HdDirtyBits dirtyBits, SdfPath const& id);
286
288 HD_API
289 static bool IsInstanceIndexDirty(HdDirtyBits dirtyBits, SdfPath const& id);
290
291 HD_API
292 static bool IsReprDirty(HdDirtyBits dirtyBits, SdfPath const &id);
293
294 // ---------------------------------------------------------------------- //
295
297 HD_API
298 static void MarkPrimvarDirty(HdDirtyBits *dirtyBits, TfToken const &name);
299
300 // ---------------------------------------------------------------------- //
304 // ---------------------------------------------------------------------- //
305
307 HD_API
308 void TaskInserted(SdfPath const& id, HdDirtyBits initialDirtyState);
309
311 HD_API
312 void TaskRemoved(SdfPath const& id);
313
315 HD_API
316 void MarkTaskDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
317
319 HD_API
320 HdDirtyBits GetTaskDirtyBits(SdfPath const& id);
321
323 HD_API
324 void MarkTaskClean(SdfPath const& id, HdDirtyBits newBits=Clean);
325
328 HD_API
329 unsigned GetRenderTagVersion() const;
330
332 HD_API
333 unsigned GetTaskRenderTagsVersion() const;
334
335 // ---------------------------------------------------------------------- //
339 // ---------------------------------------------------------------------- //
340
342 HD_API
343 void InstancerInserted(SdfPath const& id, HdDirtyBits initialDirtyState);
344
346 HD_API
347 void InstancerRemoved(SdfPath const& id);
348
350 HD_API
351 HdDirtyBits GetInstancerDirtyBits(SdfPath const& id);
352
355 HD_API
356 void MarkInstancerDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
357
359 HD_API
360 void MarkInstancerClean(SdfPath const& id, HdDirtyBits newBits=Clean);
361
365 HD_API
366 void AddInstancerRprimDependency(SdfPath const& instancerId,
367 SdfPath const& rprimId);
368
371 HD_API
373 SdfPath const& rprimId);
374
378 HD_API
379 void AddInstancerInstancerDependency(SdfPath const& parentInstancerId,
380 SdfPath const& instancerId);
381
384 HD_API
385 void RemoveInstancerInstancerDependency(SdfPath const& parentInstancerId,
386 SdfPath const& instancerId);
387
388 // ---------------------------------------------------------------------- //
392 // ---------------------------------------------------------------------- //
393
395 HD_API
396 void SprimInserted(SdfPath const& id, HdDirtyBits initialDirtyState);
397
399 HD_API
400 void SprimRemoved(SdfPath const& id);
401
403 HD_API
404 HdDirtyBits GetSprimDirtyBits(SdfPath const& id);
405
407 HD_API
408 void MarkSprimDirty(SdfPath const& id, HdDirtyBits bits);
409
411 HD_API
412 void MarkSprimClean(SdfPath const& id, HdDirtyBits newBits=Clean);
413
417 HD_API
418 void AddInstancerSprimDependency(SdfPath const& instancerId,
419 SdfPath const& sprimId);
420
423 HD_API
425 SdfPath const& sprimId);
426
429 HD_API
430 void AddSprimSprimDependency(SdfPath const& parentSprimId,
431 SdfPath const& sprimId);
432
435 HD_API
436 void RemoveSprimSprimDependency(SdfPath const& parentSprimId,
437 SdfPath const& sprimId);
438
440 HD_API
442
443 // ---------------------------------------------------------------------- //
447 // ---------------------------------------------------------------------- //
448
450 HD_API
451 void BprimInserted(SdfPath const& id, HdDirtyBits initialDirtyState);
452
454 HD_API
455 void BprimRemoved(SdfPath const& id);
456
458 HD_API
459 HdDirtyBits GetBprimDirtyBits(SdfPath const& id);
460
462 HD_API
463 void MarkBprimDirty(SdfPath const& id, HdDirtyBits bits);
464
466 HD_API
467 void MarkBprimClean(SdfPath const& id, HdDirtyBits newBits=Clean);
468
469 // ---------------------------------------------------------------------- //
473 // ---------------------------------------------------------------------- //
474
476 HD_API
477 void AddCollection(TfToken const& collectionName);
478
481 HD_API
482 void MarkCollectionDirty(TfToken const& collectionName);
483
485 HD_API
486 unsigned GetCollectionVersion(TfToken const& collectionName) const;
487
490 HD_API
491 unsigned GetVisibilityChangeCount() const;
492
496 HD_API
498
501 unsigned GetVaryingStateVersion() const {
502 return _varyingStateVersion;
503 }
504
505 // ---------------------------------------------------------------------- //
509 // ---------------------------------------------------------------------- //
510
514 unsigned GetRprimIndexVersion() const {
515 return _rprimIndexVersion;
516 }
517
521 unsigned GetSprimIndexVersion() const {
522 return _sprimIndexVersion;
523 }
524
528 unsigned GetBprimIndexVersion() const {
529 return _bprimIndexVersion;
530 }
531
535 unsigned GetInstancerIndexVersion() const {
536 return _instancerIndexVersion;
537 }
538
539
545 unsigned GetSceneStateVersion() const {
546 return _sceneStateVersion;
547 }
548
549 // ---------------------------------------------------------------------- //
553 // ---------------------------------------------------------------------- //
554
556 HD_API
557 void AddState(TfToken const& name);
558
561 HD_API
562 void MarkStateDirty(TfToken const& name);
563
565 HD_API
566 unsigned GetStateVersion(TfToken const &name) const;
567
568 // ---------------------------------------------------------------------- //
572 // ---------------------------------------------------------------------- //
573 HD_API
574 static std::string StringifyDirtyBits(HdDirtyBits dirtyBits);
575
576 HD_API
577 static void DumpDirtyBits(HdDirtyBits dirtyBits);
578
580
581private:
582
583 // Don't allow copies
584 HdChangeTracker(const HdChangeTracker &) = delete;
585 HdChangeTracker &operator=(const HdChangeTracker &) = delete;
586
587
588 static void _LogCacheAccess(TfToken const& cacheName,
589 SdfPath const& id, bool hit);
590
591 typedef TfHashMap<SdfPath, HdDirtyBits, SdfPath::Hash> _IDStateMap;
592 typedef TfHashMap<TfToken, int, TfToken::HashFunctor> _CollectionStateMap;
593 typedef TfHashMap<TfToken, unsigned, TfToken::HashFunctor> _GeneralStateMap;
594
595 struct _PathHashCompare {
596 static bool equal(const SdfPath& a, const SdfPath& b)
597 { return a == b; }
598
599 static size_t hash(const SdfPath& path)
600 { return hash_value(path); }
601 };
602 typedef tbb::concurrent_hash_map<SdfPath, SdfPathSet, _PathHashCompare>
603 _DependencyMap;
604
605 // Core dirty state.
606 _IDStateMap _rprimState;
607 _IDStateMap _instancerState;
608 _IDStateMap _taskState;
609 _IDStateMap _sprimState;
610 _IDStateMap _bprimState;
611 _GeneralStateMap _generalState;
612
613 // Collection versions / state.
614 _CollectionStateMap _collectionState;
615
616 // Provides reverse-association between instancers and the child
617 // instancers/prims that use them.
618 _DependencyMap _instancerRprimDependencies;
619 _DependencyMap _instancerSprimDependencies;
620 _DependencyMap _instancerInstancerDependencies;
621
622 // Provides forward and reverse-association between sprims and the child
623 // sprims that reference them. For example, a light prim (child) who needs
624 // to know when its light filter (parent) is modified.
625 // Maps parent sprim to child sprim.
626 _DependencyMap _sprimSprimTargetDependencies;
627 // Maps child sprim to parent sprim.
628 _DependencyMap _sprimSprimSourceDependencies;
629
630 // Dependency map helpers
631 void _AddDependency(_DependencyMap &depMap,
632 SdfPath const& parent, SdfPath const& child);
633 void _RemoveDependency(_DependencyMap &depMap,
634 SdfPath const& parent, SdfPath const& child);
635
636 // Typically the Rprims that get marked dirty per update iteration end up
637 // being a stable set of objects; to leverage this fact, we require the
638 // delegate notify the change tracker when that state changes, which bumps
639 // the varyingStateVersion, which triggers downstream invalidation.
640 unsigned _varyingStateVersion;
641
642 // Tracks changes (insertions/removals) of prims in the render index.
643 // This is used to indicating that cached gather operations need to be
644 // re-evaluated, such as dirty lists or batch building.
645 unsigned _rprimIndexVersion;
646 unsigned _sprimIndexVersion;
647 unsigned _bprimIndexVersion;
648 unsigned _instancerIndexVersion;
649
650 // The following tracks any changes of state. As a result it is very broad.
651 // The use case to detect, when no changes have been made, as to
652 // avoid the need to sync or reset progressive renderers.
653 unsigned _sceneStateVersion;
654
655 // Used to detect that visibility changed somewhere in the render index.
656 unsigned _visChangeCount;
657
658 // Used to detect that instance indices changed somewhere in the render index.
659 unsigned _instanceIndicesChangeCount;
660
661 // Used to detect changes to the render tag opinion of rprims.
662 unsigned _rprimRenderTagVersion;
663
664 // Used to detect changes to the render tags opinion of tasks.
665 unsigned _taskRenderTagsVersion;
666
667 // Allow HdRenderIndex to provide a scene index to forward dirty
668 // information. This is necessary to accommodate legacy HdSceneDelegate
669 // based applications that rely on the HdChangeTracker for invalidating
670 // state on Hydra prims.
671 friend class HdRenderIndex;
672 // Does not take ownership. The HdRenderIndex manages the lifetime of this
673 // scene index.
674 HdRetainedSceneIndex * _emulationSceneIndex;
675 void _SetTargetSceneIndex(HdRetainedSceneIndex *emulationSceneIndex);
676
677 // Private methods which implement the behaviors of their public
678 // equivalents. The public versions check to see if legacy emulation is
679 // active. If so, they dirty the HdRetainedSceneIndex member instead
680 // of directly acting. If legacy render delegate emulation is active, these
681 // will eventually make their way back to the private methods via
682 // HdSceneIndexAdapterSceneDelegate. This prevents dirtying cycles while
683 // allowing single HdRenderIndex/HdChangeTracker instances to be used for
684 // both ends of emulation.
686 void _MarkRprimDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
687 void _MarkSprimDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
688 void _MarkBprimDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
689 void _MarkInstancerDirty(SdfPath const& id, HdDirtyBits bits=AllDirty);
690};
691
692
693PXR_NAMESPACE_CLOSE_SCOPE
694
695#endif //PXR_IMAGING_HD_CHANGE_TRACKER_H
Tracks changes from the HdSceneDelegate, providing invalidation cues to the render engine.
Definition: changeTracker.h:52
HD_API void MarkSprimDirty(SdfPath const &id, HdDirtyBits bits)
Set the dirty flags to bits.
HD_API bool IsRprimDirty(SdfPath const &id)
Returns true if the rprim identified by id has any dirty flags set.
HD_API HdDirtyBits GetRprimDirtyBits(SdfPath const &id) const
Returns the dirty bits for the rprim with id.
HD_API HdDirtyBits GetInstancerDirtyBits(SdfPath const &id)
Returns the dirty bits for the instancer with id.
HD_API bool IsTransformDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty transform.
HD_API void MarkTaskClean(SdfPath const &id, HdDirtyBits newBits=Clean)
Set the dirty flags to newBits.
unsigned GetRprimIndexVersion() const
Returns the current version of the Render Index's RPrim set.
HD_API void SprimInserted(SdfPath const &id, HdDirtyBits initialDirtyState)
Start tracking sprim with the given id.
unsigned GetBprimIndexVersion() const
Returns the current version of the Render Index's BPrim set.
HD_API HdDirtyBits GetTaskDirtyBits(SdfPath const &id)
Get the dirty bits for Task with the given id.
HD_API bool IsPrimIdDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty primID.
HD_API bool IsSubdivTagsDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty subdiv tags.
HD_API void MarkInstancerClean(SdfPath const &id, HdDirtyBits newBits=Clean)
Clean the specified dirty bits for the instancer with id.
HD_API void AddState(TfToken const &name)
Adds a named state for tracking.
HD_API void MarkAllRprimsDirty(HdDirtyBits bits)
Flag all the Rprim with the given id as being dirty.
static bool IsVarying(HdDirtyBits dirtyBits)
Returns true if the varying flag is set.
HD_API void RemoveSprimSprimDependency(SdfPath const &parentSprimId, SdfPath const &sprimId)
Remove a dependency between sprimId and parent sprim parentSprimId.
static HD_API bool IsVisibilityDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has dirty visibility. id is for perflog.
HD_API void MarkBprimClean(SdfPath const &id, HdDirtyBits newBits=Clean)
Set the dirty flags to newBits.
HD_API void AddCollection(TfToken const &collectionName)
Adds a named collection for tracking.
HD_API void MarkSprimClean(SdfPath const &id, HdDirtyBits newBits=Clean)
Set the dirty flags to newBits.
HD_API void MarkStateDirty(TfToken const &name)
Marks a named state as being dirty., this bumps the version of the state.
HD_API void AddInstancerRprimDependency(SdfPath const &instancerId, SdfPath const &rprimId)
Insert a dependency between rprimId and parent instancer instancerId.
static HD_API bool IsTopologyDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty topology. id is for perflog.
HD_API void BprimInserted(SdfPath const &id, HdDirtyBits initialDirtyState)
Start tracking bprim with the given id.
static HD_API bool IsDoubleSidedDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has dirty doubleSided state. id is for perflog.
unsigned GetSceneStateVersion() const
Returns the current version of the scene state.
HD_API bool IsExtentDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty extent.
HD_API void InstancerInserted(SdfPath const &id, HdDirtyBits initialDirtyState)
Start tracking Instancer with the given id.
HD_API bool IsDisplayStyleDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty display style.
HD_API void RemoveInstancerRprimDependency(SdfPath const &instancerId, SdfPath const &rprimId)
Remove a dependency between rprimId and parent instancer instancerId.
HD_API void AddSprimSprimDependency(SdfPath const &parentSprimId, SdfPath const &sprimId)
Insert a dependency between sprimId and parent sprim parentSprimId.
HD_API bool IsTopologyDirty(SdfPath const &id)
Returns true if the rprim identified by id has a dirty topology.
unsigned GetSprimIndexVersion() const
Returns the current version of the Render Index's SPrim set.
static HD_API bool IsCullStyleDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has dirty cullstyle. id is for perflog.
HD_API unsigned GetVisibilityChangeCount() const
Returns the number of changes to visibility.
HD_API unsigned GetStateVersion(TfToken const &name) const
Returns the current version of the named state.
HD_API void InstancerRemoved(SdfPath const &id)
Stop tracking Instancer with the given id.
HD_API void RemoveSprimFromSprimSprimDependencies(SdfPath const &sprimId)
Remove all dependencies involving sprimId as a parent or child.
unsigned GetInstancerIndexVersion() const
Returns the current version of the Render Index's Instancer set.
HD_API void MarkRprimClean(SdfPath const &id, HdDirtyBits newBits=Clean)
Clear the dirty flags for an HdRprim.
HD_API bool IsAnyPrimvarDirty(SdfPath const &id)
Returns true if the rprim identified by id has any dirty primvars.
HD_API void RemoveInstancerSprimDependency(SdfPath const &instancerId, SdfPath const &sprimId)
Remove a dependency between sprimId and parent instancer instancerId.
HD_API bool IsPrimvarDirty(SdfPath const &id, TfToken const &name)
Returns true if the rprim identified by id with primvar name is dirty.
HD_API bool IsDoubleSidedDirty(SdfPath const &id)
Returns true if the rprim identified by id has dirty doubleSided state.
static HD_API bool IsInstancerDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty instancer. id is for perflog.
HD_API void AddInstancerSprimDependency(SdfPath const &instancerId, SdfPath const &sprimId)
Insert a dependency between sprimId and parent instancer instancerId.
HD_API HdDirtyBits GetSprimDirtyBits(SdfPath const &id)
Get the dirty bits for sprim with the given id.
HD_API void ResetVaryingState()
Clear Varying bit of all prims.
HD_API void BprimRemoved(SdfPath const &id)
Stop tracking bprim with the given id.
HD_API bool IsVisibilityDirty(SdfPath const &id)
Returns true if the rprim identified by id has dirty visibility.
static HD_API void MarkPrimvarDirty(HdDirtyBits *dirtyBits, TfToken const &name)
Set the primvar dirty flag to dirtyBits.
unsigned GetVaryingStateVersion() const
Returns the current version of varying state.
static HD_API bool IsDisplayStyleDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty display style. id is for perflog.
HD_API bool IsCullStyleDirty(SdfPath const &id)
Returns true if the rprim identified by id has dirty cullstyle.
HD_API void ResetRprimVaryingState(SdfPath const &id)
Reset the varying state on one Rprim This is done for Rprims, where we choose not to clean them (due ...
static HD_API bool IsPrimIdDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty primID. id is for perflog.
HD_API void MarkInstancerDirty(SdfPath const &id, HdDirtyBits bits=AllDirty)
Flag the Instancer with the given id as being dirty.
HD_API void MarkBprimDirty(SdfPath const &id, HdDirtyBits bits)
Set the dirty flags to bits.
static HD_API bool IsAnyPrimvarDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has any dirty primvars.
HD_API HdDirtyBits GetBprimDirtyBits(SdfPath const &id)
Get the dirty bits for bprim with the given id.
static HD_API bool IsInstanceIndexDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty instance index. id is for perflog.
HD_API void TaskInserted(SdfPath const &id, HdDirtyBits initialDirtyState)
Start tracking Task with the given id.
HD_API void MarkRprimDirty(SdfPath const &id, HdDirtyBits bits=AllDirty)
Flag the Rprim with the given id as being dirty.
static bool IsDirty(HdDirtyBits dirtyBits)
Returns true if the dirtyBits has any flags set other than the varying flag.
HD_API unsigned GetInstanceIndicesChangeCount() const
Returns the number of changes to instance index.
HD_API void RprimInserted(SdfPath const &id, HdDirtyBits initialDirtyState)
Start tracking Rprim with the given id.
HD_API void MarkCollectionDirty(TfToken const &collectionName)
Marks a named collection as being dirty, this bumps the version of the collection.
static HD_API bool IsTransformDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty transform. id is for perflog.
HD_API unsigned GetCollectionVersion(TfToken const &collectionName) const
Returns the current version of the named collection.
static HD_API bool IsPrimvarDirty(HdDirtyBits dirtyBits, SdfPath const &id, TfToken const &name)
Returns true if the dirtyBits has a dirty primvar name.
static HD_API bool IsExtentDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty extent. id is for perflog.
static HD_API bool IsSubdivTagsDirty(HdDirtyBits dirtyBits, SdfPath const &id)
Returns true if the dirtyBits has a dirty subdiv tags. id is for perflog.
HD_API void MarkTaskDirty(SdfPath const &id, HdDirtyBits bits=AllDirty)
Set the dirty flags to bits.
HD_API unsigned GetTaskRenderTagsVersion() const
Retrieve the current version number of the task's render tags opinion.
static bool IsClean(HdDirtyBits dirtyBits)
Returns true if the dirtyBits has no flags set except the varying flag.
HD_API unsigned GetRenderTagVersion() const
Retrieve the current version number of the rprim render tag set XXX Rename to GetRprimRenderTagVersio...
HD_API void SprimRemoved(SdfPath const &id)
Stop tracking sprim with the given id.
HD_API void AddInstancerInstancerDependency(SdfPath const &parentInstancerId, SdfPath const &instancerId)
Insert a dependency between instancerId and parent instancer parentInstancerId.
HD_API void RprimRemoved(SdfPath const &id)
Stop tracking Rprim with the given id.
HD_API void MarkPrimvarDirty(SdfPath const &id, TfToken const &name)
Mark the primvar for the rprim with id as being dirty.
HD_API void TaskRemoved(SdfPath const &id)
Stop tracking Task with the given id.
HD_API void RemoveInstancerInstancerDependency(SdfPath const &parentInstancerId, SdfPath const &instancerId)
Remove a dependency between instancerId and parent instancer parentInstancerId.
The Hydra render index is a flattened representation of the client scene graph, which may be composed...
Definition: renderIndex.h:121
Concrete scene container which can be externally populated and dirtied.
Scene delegate which observes notices from an HdSceneIndex and applies them to an HdRenderIndex.
A path value used to locate objects in layers or scenegraphs.
Definition: path.h:291
Token for efficient comparison, assignment, and hashing of known strings.
Definition: token.h:88
size_t hash_value(const TfToken &x)
Overload hash_value for TfToken.
Definition: token.h:454