tornavis/source/blender/makesdna/DNA_xr_types.h

213 lines
5.6 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup DNA
*/
#pragma once
#include "DNA_view3d_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* -------------------------------------------------------------------- */
typedef struct XrSessionSettings {
/** Shading settings, struct shared with 3D-View so settings are the same. */
struct View3DShading shading;
float base_scale;
char _pad[3];
char base_pose_type; /* #eXRSessionBasePoseType */
/** Object to take the location and rotation as base position from. */
Object *base_pose_object;
float base_pose_location[3];
float base_pose_angle;
/** View3D draw flags (V3D_OFSDRAW_NONE, V3D_OFSDRAW_SHOW_ANNOTATION, ...). */
char draw_flags;
/** Draw style for controller visualization. */
char controller_draw_style;
char _pad2[2];
/** Clipping distance. */
float clip_start, clip_end;
int flag;
/** Object type settings to apply to VR view (unlike shading, not shared with window 3D-View). */
int object_type_exclude_viewport;
int object_type_exclude_select;
} XrSessionSettings;
typedef enum eXrSessionFlag {
XR_SESSION_USE_POSITION_TRACKING = (1 << 0),
XR_SESSION_USE_ABSOLUTE_TRACKING = (1 << 1),
} eXrSessionFlag;
typedef enum eXRSessionBasePoseType {
XR_BASE_POSE_SCENE_CAMERA = 0,
XR_BASE_POSE_OBJECT = 1,
XR_BASE_POSE_CUSTOM = 2,
} eXRSessionBasePoseType;
typedef enum eXrSessionControllerDrawStyle {
XR_CONTROLLER_DRAW_DARK = 0,
XR_CONTROLLER_DRAW_LIGHT = 1,
XR_CONTROLLER_DRAW_DARK_RAY = 2,
XR_CONTROLLER_DRAW_LIGHT_RAY = 3,
} eXrSessionControllerDrawStyle;
/** XR action type. Enum values match those in GHOST_XrActionType enum for consistency. */
typedef enum eXrActionType {
XR_BOOLEAN_INPUT = 1,
XR_FLOAT_INPUT = 2,
XR_VECTOR2F_INPUT = 3,
XR_POSE_INPUT = 4,
XR_VIBRATION_OUTPUT = 100,
} eXrActionType;
/** Determines how XR action operators are executed. */
typedef enum eXrOpFlag {
XR_OP_PRESS = 0,
XR_OP_RELEASE = 1,
XR_OP_MODAL = 2,
} eXrOpFlag;
typedef enum eXrActionFlag {
/** Action depends on two sub-action paths (i.e. two-handed/bi-manual action). */
XR_ACTION_BIMANUAL = (1 << 0),
} eXrActionFlag;
typedef enum eXrHapticFlag {
/** Whether to apply haptics to corresponding user paths for an action and its haptic action. */
XR_HAPTIC_MATCHUSERPATHS = (1 << 0),
/**
* Determines how haptics will be applied
* ("repeat" is mutually exclusive with "press"/"release").
*/
XR_HAPTIC_PRESS = (1 << 1),
XR_HAPTIC_RELEASE = (1 << 2),
XR_HAPTIC_REPEAT = (1 << 3),
} eXrHapticFlag;
/**
* For axis-based inputs (thumb-stick/track-pad/etc).
* Determines the region for action execution (mutually exclusive per axis).
*/
typedef enum eXrAxisFlag {
XR_AXIS0_POS = (1 << 0),
XR_AXIS0_NEG = (1 << 1),
XR_AXIS1_POS = (1 << 2),
XR_AXIS1_NEG = (1 << 3),
} eXrAxisFlag;
typedef enum eXrPoseFlag {
/* Pose represents controller grip/aim. */
XR_POSE_GRIP = (1 << 0),
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;
/** Unique name. */
char name[64]; /* MAX_NAME */
/** OpenXR interaction profile path. */
char profile[256];
/** OpenXR component paths. */
ListBase component_paths; /* XrComponentPath */
/** Input threshold/region. */
float float_threshold;
short axis_flag; /* eXrAxisFlag */
char _pad[2];
/** Pose action properties. */
float pose_location[3];
float pose_rotation[3];
} XrActionMapBinding;
/* -------------------------------------------------------------------- */
typedef struct XrUserPath {
struct XrUserPath *next, *prev;
char path[64]; /* XR_MAX_USER_PATH_LENGTH */
} XrUserPath;
typedef struct XrActionMapItem {
struct XrActionMapItem *next, *prev;
/** Unique name. */
char name[64]; /* MAX_NAME */
/** Type. */
char type; /** eXrActionType */
char _pad[7];
/** OpenXR user paths. */
ListBase user_paths; /* XrUserPath */
/** Operator to be called on XR events. */
char op[64]; /* OP_MAX_TYPENAME */
/** Operator properties, assigned to ptr->data and can be written to a file. */
IDProperty *op_properties;
/** RNA pointer to access properties. */
struct PointerRNA *op_properties_ptr;
short op_flag; /* eXrOpFlag */
short action_flag; /* eXrActionFlag */
short haptic_flag; /* eXrHapticFlag */
/** Pose action properties. */
short pose_flag; /* eXrPoseFlag */
/** Haptic properties. */
char haptic_name[64]; /* MAX_NAME */
float haptic_duration;
float haptic_frequency;
float haptic_amplitude;
short selbinding;
char _pad3[2];
ListBase bindings; /* XrActionMapBinding */
} XrActionMapItem;
/* -------------------------------------------------------------------- */
typedef struct XrActionMap {
struct XrActionMap *next, *prev;
/** Unique name. */
char name[64]; /* MAX_NAME */
ListBase items; /* XrActionMapItem */
short selitem;
char _pad[6];
} XrActionMap;
/* -------------------------------------------------------------------- */
#ifdef __cplusplus
}
#endif