![]() |
Selection highlighting in Hydra: More...
Public Member Functions | |
virtual HDX_API void | UpdateSelection (HdRenderIndex *index) |
Optional override to update the HdSelection during HdxSelectionTask::Prepare. More... | |
virtual HDX_API bool | GetSelectionOffsetBuffer (HdRenderIndex const *index, bool enableSelection, VtIntArray *offsets) const |
Encodes the selection state (HdxSelection) as an integer array. More... | |
virtual HDX_API VtVec4fArray | GetSelectedPointColors () const |
HDX_API int | GetVersion () const |
Returns a monotonically increasing version number, which increments whenever the result of GetBuffers has changed. More... | |
HDX_API void | SetSelection (HdSelectionSharedPtr const &selection) |
The collection of selected objects is expected to be created externally and set via SetSelection. More... | |
HDX_API HdSelectionSharedPtr const & | GetSelectionMap () const |
XXX: Rename to GetSelection. More... | |
Protected Member Functions | |
HDX_API void | _IncrementVersion () |
Increments the internal selection state version, used for invalidation via GetVersion(). More... | |
virtual HDX_API bool | _GetSelectionOffsets (HdSelection::HighlightMode const &mode, HdRenderIndex const *index, size_t modeOffset, std::vector< int > *offsets) const |
Selection highlighting in Hydra:
HdxSelectionTracker is a base class for observing selection state and providing selection highlighting details to interested clients.
Hydra Storm (*) supports selection highlighting of: (a) a set of rprims, wherein each rprim is entirely highlighted (b) a set of instances of an rprim, wherein each instance is highlighted (c) a set of subprimitives of an rprim, wherein each subprim is highlighted. Subprimitives support is limited to elements (faces of meshes, or individual curves of basis curves), edges of meshes/curves, and points of meshes.
Background: The current selection implementation is, in a sense, global in nature. If there are no selected objects, we do not bind any selection-related resources, nor does the shader execute any selection-related operations.
If there are one or more selected objects, we don't choose to have them in a separate 'selection' collection. Instead, we stick by AZDO principles and avoid command buffer changes as a result of selection updates (which would involve removal of draw items corresponding to the selected objects from each render pass' command buffer and building the selection pass' command buffer). We build an integer buffer encoding of the selected items, for use in the fragment shader, that allows us to perform a small number of lookups to quickly tell us if a fragment needs to be highlighted.
Conceptually, the implementation is split into: (a) HdSelection : Client facing API that builds a collection of selected items. This is agnostic of the rendering backend. (b) HdxSelectionTracker: Base class that observes (a) and encodes it as needed by (c). This may be specialized to be backend specific. (c) HdxSelectionTask : A scene task that, currently, only syncs resources related to selection highlighting. Currently, this is tied to Storm. (d) HdxRenderSetupTask : A scene task that sets up the render pass shader to use the selection highlighting mixin in the render pass(es) of HdxRenderTask. This is relevant only to Storm.
HdxSelectionTracker takes HdSelection and generates a GPU buffer to be used
Applications may use HdxSelectionTracker as-is, or extend it as needed.
HdxSelectionTask takes HdxSelectionTracker as a task parameter, and uploads the selection buffer encoding to the GPU.
Definition at line 100 of file selectionTracker.h.
|
protected |
Increments the internal selection state version, used for invalidation via GetVersion().
|
inline |
XXX: Rename to GetSelection.
Definition at line 143 of file selectionTracker.h.
|
virtual |
Encodes the selection state (HdxSelection) as an integer array.
This is uploaded to the GPU and decoded in the fragment shader to provide selection highlighting behavior. See HdxSelectionTask. Returns true if offsets has anything selected. enableSelection
is a global on/off switch for selection; if it's false, nothing will be encoded.
HDX_API int GetVersion | ( | ) | const |
Returns a monotonically increasing version number, which increments whenever the result of GetBuffers has changed.
Note that this number may overflow and become negative, thus clients should use a not-equal comparison.
|
inline |
The collection of selected objects is expected to be created externally and set via SetSelection.
Definition at line 136 of file selectionTracker.h.
|
virtual |
Optional override to update the HdSelection during HdxSelectionTask::Prepare.