7 #ifndef PXR_IMAGING_HDX_PICK_TASK_H
8 #define PXR_IMAGING_HDX_PICK_TASK_H
36 #define HDX_PICK_TOKENS \
41 (pickPrimsAndInstances) \
45 (pickPointsAndInstances) \
48 (resolveNearestToCamera) \
49 (resolveNearestToCenter) \
170 FromPickHit(HdSceneIndexBaseRefPtr
const &terminalSceneIndex,
186 static std::vector<HdxPrimOriginInfo>
187 FromPickHits(HdSceneIndexBaseRefPtr
const &terminalSceneIndex,
188 const std::vector<HdxPickHit> &hits);
197 static std::vector<HdxPrimOriginInfo>
199 const std::vector<HdxPickHit> &hits);
209 const TfToken &nameInPrimOrigin =
210 HdPrimOriginSchemaTokens->scenePath)
const;
220 const TfToken &nameInPrimOrigin =
221 HdPrimOriginSchemaTokens->scenePath)
const;
270 ,
pickTarget(HdxPickTokens->pickPrimsAndInstances)
271 ,
resolveMode(HdxPickTokens->resolveNearestToCamera)
339 return (int32_t(idColor[0] & 0xff) << 0) |
340 (int32_t(idColor[1] & 0xff) << 8) |
341 (int32_t(idColor[2] & 0xff) << 16) |
342 (int32_t(idColor[3] & 0xff) << 24);
349 bool _useOverlayPass;
355 void _InitIfNeeded();
356 void _CreateAovBindings();
357 void _CleanupAovBindings();
358 void _ResizeOrCreateBufferForAOV(
361 void _ConditionStencilWithGLCallback(
365 bool _UseOcclusionPass()
const;
366 bool _UseOverlayPass()
const;
367 void _UpdateUseOverlayPass();
369 void _ClearPickBuffer();
374 _ReadAovBuffer(
TfToken const & aovName)
const;
392 std::vector<std::unique_ptr<HdStRenderBuffer>> _pickableAovBuffers;
395 size_t _pickableDepthIndex;
397 std::unique_ptr<HdStRenderBuffer> _overlayDepthStencilBuffer;
431 int const* instanceIds,
432 int const* elementIds,
451 HdxPickResult&
operator=(HdxPickResult &&);
480 bool _ResolveHit(
int index,
int x,
int y,
float z,
HdxPickHit* hit)
const;
482 size_t _GetHash(
int index)
const;
483 bool _IsValidHit(
int index)
const;
487 int _GetPrimId(
int index)
const {
488 return _primIds ? _primIds[
index] : -1;
490 int _GetInstanceId(
int index)
const {
491 return _instanceIds ? _instanceIds[
index] : -1;
493 int _GetElementId(
int index)
const {
494 return _elementIds ? _elementIds[
index] : -1;
496 int _GetEdgeId(
int index)
const {
497 return _edgeIds ? _edgeIds[
index] : -1;
499 int _GetPointId(
int index)
const {
500 return _pointIds ? _pointIds[
index] : -1;
506 GfVec3f _GetNormal(
int index)
const;
509 int const* _instanceIds;
510 int const* _elementIds;
512 int const* _pointIds;
514 float const* _depths;
557 #endif // PXR_IMAGING_HDX_PICK_TASK_H
static HDX_API HdxPrimOriginInfo FromPickHit(HdSceneIndexBaseRefPtr const &terminalSceneIndex, const HdxPickHit &hit)
Query terminal scene index for information about picked prim.
std::shared_ptr< class HdRenderPassState > HdRenderPassStateSharedPtr
GfVec3f worldSpaceHitNormal
std::shared_ptr< class HdStShaderCode > HdStShaderCodeSharedPtr
int instanceId
Index of the picked instance.
HDX_API size_t GetHash() const
std::shared_ptr< class HdRenderPass > HdRenderPassSharedPtr
#define PXR_NAMESPACE_OPEN_SCOPE
HDX_API void Execute(HdTaskContext *ctx) override
Execute the pick task.
std::vector< HdxPickHit > HdxPickHitVector
GLdouble GLdouble GLdouble z
HDX_API void ResolveUnique(HdxPickHitVector *allHits) const
bool IsEmpty() const noexcept
Returns true if this is the empty path (SdfPath::EmptyPath()).
GfVec3d worldSpaceHitPoint
HdxPickHitVector * outHits
bool doUnpickablesOcclude
TF_DECLARE_PUBLIC_TOKENS(HdxPickTokens, HDX_API, HDX_PICK_TOKENS)
HdxPickTaskContextParams()
HDX_API HdInstancerContext ComputeInstancerContext(const TfToken &nameInPrimOrigin=HdPrimOriginSchemaTokens->scenePath) const
DepthMaskCallback depthMaskCallback
std::vector< std::pair< SdfPath, int > > HdInstancerContext
Instancer context: a pair of instancer paths and instance indices.
HDX_API void ResolveNearestToCenter(HdxPickHitVector *allHits) const
static HDX_API std::vector< HdxPrimOriginInfo > FromPickHits(HdSceneIndexBaseRefPtr const &terminalSceneIndex, const std::vector< HdxPickHit > &hits)
HDX_API ~HdxPickTask() override
bool operator!=(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Inequality operator, does exact floating point comparisons.
HDX_API HdxPickResult & operator=(HdxPickResult &&)
std::vector< TfToken > TfTokenVector
Convenience types.
HDX_API void ResolveAll(HdxPickHitVector *allHits) const
A utility class for resolving ID buffers into hits.
HDX_API SdfPath GetFullPath(const TfToken &nameInPrimOrigin=HdPrimOriginSchemaTokens->scenePath) const
HDX_API const TfTokenVector & GetRenderTags() const override
HDX_API std::ostream & operator<<(std::ostream &out, const HdxPickHit &h)
std::unordered_map< TfToken, VtValue, TfToken::HashFunctor > HdTaskContext
HdContainerDataSourceHandle primOrigin
GfMatrix4d projectionMatrix
HDX_API void Sync(HdSceneDelegate *delegate, HdTaskContext *ctx, HdDirtyBits *dirtyBits) override
Sync the render pass resources.
HDX_API void Prepare(HdTaskContext *ctx, HdRenderIndex *renderIndex) override
Prepare the pick task.
GLfloat GLfloat GLfloat GLfloat h
HDX_API bool IsValid() const
Return whether the result was given well-formed parameters.
HDX_API HdxPickResult(int const *primIds, int const *instanceIds, int const *elementIds, int const *edgeIds, int const *pointIds, int const *neyes, float const *depths, HdRenderIndex const *index, TfToken const &pickTarget, GfMatrix4d const &viewMatrix, GfMatrix4d const &projectionMatrix, GfVec2f const &depthRange, GfVec2i const &bufferSize, GfVec4i const &subRect)
static int DecodeIDRenderColor(unsigned char const idColor[4])
Utility: Given a UNorm8Vec4 pixel, unpack it into an int32 ID.
HDX_API bool operator<(HdxPickHit const &lhs, HdxPickHit const &rhs)
HdContainerDataSourceHandle instancePrimOrigin
#define PXR_NAMESPACE_CLOSE_SCOPE
std::shared_ptr< HdBufferArrayRange > HdBufferArrayRangeSharedPtr
SdfPath instancerSceneIndexPath
The path of the instancer in the scene index.
std::vector< GfVec4d > clipPlanes
std::vector< HdRenderPassAovBinding > HdRenderPassAovBindingVector
std::vector< HdxInstancerContext > instancerContexts
HdRprimCollection collection
HDX_API void ResolveNearestToCamera(HdxPickHitVector *allHits) const
HdContainerDataSourceHandle instancerPrimOrigin
The prim origin data source of the instancer.
bool operator==(const Mat3< T0 > &m0, const Mat3< T1 > &m1)
Equality operator, does exact floating point comparisons.
SdfPath instanceSceneIndexPath
std::function< void(void)> DepthMaskCallback