diff options
author | Stefan Werner <stefan.werner@tangent-animation.com> | 2021-08-02 10:28:54 +0300 |
---|---|---|
committer | Stefan Werner <stefan.werner@tangent-animation.com> | 2021-08-02 10:28:54 +0300 |
commit | 34e8d79c3edbc58fd242cec0c1f2bed4e43855af (patch) | |
tree | 36c70e63515af2bd8ea840102493028faec37971 /source/blender/makesrna/intern/rna_xr.c | |
parent | 465fb31ed275618ec71e4925ab94bd4a9b077a12 (diff) | |
parent | 48722e8971133dbe14ecc6825a2451637df77eab (diff) |
Merge branch 'master' into cycles_texture_cache
Diffstat (limited to 'source/blender/makesrna/intern/rna_xr.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_xr.c | 88 |
1 files changed, 70 insertions, 18 deletions
diff --git a/source/blender/makesrna/intern/rna_xr.c b/source/blender/makesrna/intern/rna_xr.c index 04a8500d136..56e8418972c 100644 --- a/source/blender/makesrna/intern/rna_xr.c +++ b/source/blender/makesrna/intern/rna_xr.c @@ -34,6 +34,63 @@ # include "WM_api.h" +# ifdef WITH_XR_OPENXR +static wmXrData *rna_XrSession_wm_xr_data_get(PointerRNA *ptr) +{ + /* Callers could also get XrSessionState pointer through ptr->data, but prefer if we just + * consistently pass wmXrData pointers to the WM_xr_xxx() API. */ + + BLI_assert((ptr->type == &RNA_XrSessionSettings) || (ptr->type == &RNA_XrSessionState)); + + wmWindowManager *wm = (wmWindowManager *)ptr->owner_id; + BLI_assert(wm && (GS(wm->id.name) == ID_WM)); + + return &wm->xr; +} +# endif + +static bool rna_XrSessionSettings_use_positional_tracking_get(PointerRNA *ptr) +{ +# ifdef WITH_XR_OPENXR + const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); + return (xr->session_settings.flag & XR_SESSION_USE_POSITION_TRACKING) != 0; +# else + UNUSED_VARS(ptr); + return false; +# endif +} + +static void rna_XrSessionSettings_use_positional_tracking_set(PointerRNA *ptr, bool value) +{ +# ifdef WITH_XR_OPENXR + wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); + SET_FLAG_FROM_TEST(xr->session_settings.flag, value, XR_SESSION_USE_POSITION_TRACKING); +# else + UNUSED_VARS(ptr, value); +# endif +} + +static bool rna_XrSessionSettings_use_absolute_tracking_get(PointerRNA *ptr) +{ +# ifdef WITH_XR_OPENXR + const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); + return (xr->session_settings.flag & XR_SESSION_USE_ABSOLUTE_TRACKING) != 0; +# else + UNUSED_VARS(ptr); + return false; +# endif +} + +static void rna_XrSessionSettings_use_absolute_tracking_set(PointerRNA *ptr, bool value) +{ +# ifdef WITH_XR_OPENXR + wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); + SET_FLAG_FROM_TEST(xr->session_settings.flag, value, XR_SESSION_USE_ABSOLUTE_TRACKING); +# else + UNUSED_VARS(ptr, value); +# endif +} + static bool rna_XrSessionState_is_running(bContext *C) { # ifdef WITH_XR_OPENXR @@ -55,25 +112,10 @@ static void rna_XrSessionState_reset_to_base_pose(bContext *C) # endif } -# ifdef WITH_XR_OPENXR -static wmXrData *rna_XrSessionState_wm_xr_data_get(PointerRNA *ptr) -{ - /* Callers could also get XrSessionState pointer through ptr->data, but prefer if we just - * consistently pass wmXrData pointers to the WM_xr_xxx() API. */ - - BLI_assert(ptr->type == &RNA_XrSessionState); - - wmWindowManager *wm = (wmWindowManager *)ptr->owner_id; - BLI_assert(wm && (GS(wm->id.name) == ID_WM)); - - return &wm->xr; -} -# endif - static void rna_XrSessionState_viewer_pose_location_get(PointerRNA *ptr, float *r_values) { # ifdef WITH_XR_OPENXR - const wmXrData *xr = rna_XrSessionState_wm_xr_data_get(ptr); + const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); WM_xr_session_state_viewer_pose_location_get(xr, r_values); # else UNUSED_VARS(ptr); @@ -84,7 +126,7 @@ static void rna_XrSessionState_viewer_pose_location_get(PointerRNA *ptr, float * static void rna_XrSessionState_viewer_pose_rotation_get(PointerRNA *ptr, float *r_values) { # ifdef WITH_XR_OPENXR - const wmXrData *xr = rna_XrSessionState_wm_xr_data_get(ptr); + const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr); WM_xr_session_state_viewer_pose_rotation_get(xr, r_values); # else UNUSED_VARS(ptr); @@ -181,12 +223,22 @@ static void rna_def_xr_session_settings(BlenderRNA *brna) RNA_def_property_update(prop, NC_WM | ND_XR_DATA_CHANGED, NULL); prop = RNA_def_property(srna, "use_positional_tracking", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", XR_SESSION_USE_POSITION_TRACKING); + RNA_def_property_boolean_funcs(prop, + "rna_XrSessionSettings_use_positional_tracking_get", + "rna_XrSessionSettings_use_positional_tracking_set"); RNA_def_property_ui_text( prop, "Positional Tracking", "Allow VR headsets to affect the location in virtual space, in addition to the rotation"); RNA_def_property_update(prop, NC_WM | ND_XR_DATA_CHANGED, NULL); + + prop = RNA_def_property(srna, "use_absolute_tracking", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_funcs(prop, + "rna_XrSessionSettings_use_absolute_tracking_get", + "rna_XrSessionSettings_use_absolute_tracking_set"); + RNA_def_property_ui_text( + prop, "Absolute Tracking", "Use unadjusted location/rotation as defined by the XR runtime"); + RNA_def_property_update(prop, NC_WM | ND_XR_DATA_CHANGED, NULL); } static void rna_def_xr_session_state(BlenderRNA *brna) |