Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Kim <pk15950@gmail.com>2022-02-17 09:41:53 +0300
committerPeter Kim <pk15950@gmail.com>2022-02-17 09:51:16 +0300
commit6a8709ba136ef4e8522555f279294a886595e34c (patch)
tree1edbe054f8e9b14c537e841c56ee648816f4ee53 /source/blender/makesdna
parent7d4d8a13ce9e93c7382edbd816042837bf3aa4e6 (diff)
XR: Allow variable count of action map subactions
Previously, the number of action map subactions was limited to two per action (identified by user_path0, user_path1), however for devices with more than two user paths (e.g. Vive Tracker) it will be useful to support a variable amount instead. For example, a single pose action could then be used to query the positions of all connected trackers, with each tracker having its own subaction tracking space. NOTE: This introduces breaking changes for the XR Python API as follows: - XrActionMapItem: The new `user_paths` collection property replaces the `user_path0`/`user_path1` properties. - XrActionMapBinding: The new `component_paths` collection property replaces the `component_path0`/`component_path1` properties. Reviewed By: Severin Differential Revision: https://developer.blender.org/D13949
Diffstat (limited to 'source/blender/makesdna')
-rw-r--r--source/blender/makesdna/DNA_xr_types.h26
1 files changed, 22 insertions, 4 deletions
diff --git a/source/blender/makesdna/DNA_xr_types.h b/source/blender/makesdna/DNA_xr_types.h
index bf77339a494..09eab0d7bf7 100644
--- a/source/blender/makesdna/DNA_xr_types.h
+++ b/source/blender/makesdna/DNA_xr_types.h
@@ -106,8 +106,23 @@ typedef enum eXrPoseFlag {
XR_POSE_AIM = (1 << 1),
} eXrPoseFlag;
+/**
+ * The following user and component path lengths are dependent on OpenXR's XR_MAX_PATH_LENGTH
+ * (256). A user path will be combined with a component path to identify an action binding, and
+ * that combined path should also have a max of XR_MAX_PATH_LENGTH (e.g. user_path =
+ * /user/hand/left, component_path = /input/trigger/value, full_path =
+ * /user/hand/left/input/trigger/value).
+ */
+#define XR_MAX_USER_PATH_LENGTH 64
+#define XR_MAX_COMPONENT_PATH_LENGTH 192
+
/* -------------------------------------------------------------------- */
+typedef struct XrComponentPath {
+ struct XrComponentPath *next, *prev;
+ char path[192]; /* XR_MAX_COMPONENT_PATH_LENGTH */
+} XrComponentPath;
+
typedef struct XrActionMapBinding {
struct XrActionMapBinding *next, *prev;
@@ -117,8 +132,7 @@ typedef struct XrActionMapBinding {
/** OpenXR interaction profile path. */
char profile[256];
/** OpenXR component paths. */
- char component_path0[192];
- char component_path1[192];
+ ListBase component_paths; /* XrComponentPath */
/** Input threshold/region. */
float float_threshold;
@@ -132,6 +146,11 @@ typedef struct XrActionMapBinding {
/* -------------------------------------------------------------------- */
+typedef struct XrUserPath {
+ struct XrUserPath *next, *prev;
+ char path[64]; /* XR_MAX_USER_PATH_LENGTH */
+} XrUserPath;
+
typedef struct XrActionMapItem {
struct XrActionMapItem *next, *prev;
@@ -142,8 +161,7 @@ typedef struct XrActionMapItem {
char _pad[7];
/** OpenXR user paths. */
- char user_path0[64];
- char user_path1[64];
+ ListBase user_paths; /* XrUserPath */
/** Operator to be called on XR events. */
char op[64]; /* OP_MAX_TYPENAME */