C Specification
A XrHandMeshIndexBufferMSFT structure includes an array of indices describing the triangle list of a hand mesh.
// Provided by XR_MSFT_hand_tracking_mesh
typedef struct XrHandMeshIndexBufferMSFT {
uint32_t indexBufferKey;
uint32_t indexCapacityInput;
uint32_t indexCountOutput;
uint32_t* indices;
} XrHandMeshIndexBufferMSFT;
Members
Description
An application should preallocate the indices array using the
XrSystemHandTrackingMeshPropertiesMSFT::maxHandMeshIndexCount
returned from xrGetSystemProperties.
In this way, the application can avoid possible insufficient buffer sizees
for each query, and therefore avoid reallocating memory each frame.
The input indexCapacityInput
must not be 0, and indices
must
not be NULL
, or else the runtime must return
XR_ERROR_VALIDATION_FAILURE
on calls to the xrUpdateHandMeshMSFT
function.
If the input indexCapacityInput
is not sufficient to contain all
output indices, the runtime must return XR_ERROR_SIZE_INSUFFICIENT
on
calls to xrUpdateHandMeshMSFT, not change the content in
indexBufferKey
and indices
, and return 0 for
indexCountOutput
.
If the input indexCapacityInput
is equal to or larger than the
XrSystemHandTrackingMeshPropertiesMSFT::maxHandMeshIndexCount
returned from xrGetSystemProperties, the runtime must not return
XR_ERROR_SIZE_INSUFFICIENT
error on xrUpdateHandMeshMSFT because
of insufficient index buffer size.
If the input indexBufferKey
is 0, the capacity of indices array is
sufficient, and hand mesh tracking is active, the runtime must return the
latest non-zero indexBufferKey
, and fill in indexCountOutput
and
indices
.
If the input indexBufferKey
is not 0, the runtime can either return
without changing indexCountOutput
or content in indices
, and
return XR_FALSE
for XrHandMeshMSFT::indexBufferChanged
indicating the indices are not changed; or return a new non-zero
indexBufferKey
and fill in latest data in indexCountOutput
and
indices
, and return XR_TRUE
for
XrHandMeshMSFT::indexBufferChanged
indicating the indices are
updated to a newer version.
An application can keep the XrHandMeshIndexBufferMSFT structure for
each frame in a frame loop and use the returned indexBufferKey
to
identify different triangle list topology described in indices
.
The application can therefore avoid unnecessary processing of indices, such
as coping them to GPU memory.
The runtime must return the same indexBufferKey
for the same
XrHandTrackerEXT at a given time, regardless of the input
XrHandPoseTypeMSFT in XrHandMeshUpdateInfoMSFT.
This ensures the index buffer has the same mesh topology and allows the
application to reason about vertices across different hand pose types.
For example, the application can build a procedure to perform UV mapping on
vertices of a hand mesh using
XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT
, and apply the resultant UV
data on vertices to the mesh returned from the same hand tracker using
XR_HAND_POSE_TYPE_TRACKED_MSFT
.
See Also
Document Notes
For more information, see the OpenXR Specification
This page is extracted from the OpenXR Specification. Fixes and changes should be made to the Specification, not directly.
Copyright
Copyright 2014-2024, The Khronos Group Inc.
This work is licensed under a Creative Commons Attribution 4.0 International License.