Blender  V3.3
rna_xr.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
7 #include "BLI_math.h"
8 
9 #include "DNA_space_types.h"
10 #include "DNA_view3d_types.h"
12 #include "DNA_xr_types.h"
13 
14 #include "RNA_access.h"
15 #include "RNA_define.h"
16 #include "RNA_enum_types.h"
17 
18 #include "WM_types.h"
19 
20 #include "rna_internal.h"
21 
22 #ifdef RNA_RUNTIME
23 
24 # include "BLI_listbase.h"
25 
26 # include "WM_api.h"
27 
28 /* -------------------------------------------------------------------- */
29 
30 # ifdef WITH_XR_OPENXR
31 static wmXrData *rna_XrSession_wm_xr_data_get(PointerRNA *ptr)
32 {
33  /* Callers could also get XrSessionState pointer through ptr->data, but prefer if we just
34  * consistently pass wmXrData pointers to the WM_xr_xxx() API. */
35 
36  BLI_assert(ELEM(ptr->type, &RNA_XrSessionSettings, &RNA_XrSessionState));
37 
39  BLI_assert(wm && (GS(wm->id.name) == ID_WM));
40 
41  return &wm->xr;
42 }
43 # endif
44 
45 /* -------------------------------------------------------------------- */
49 static XrComponentPath *rna_XrComponentPath_new(XrActionMapBinding *amb, const char *path_str)
50 {
51 # ifdef WITH_XR_OPENXR
52  XrComponentPath *component_path = MEM_callocN(sizeof(XrComponentPath), __func__);
53  BLI_strncpy(component_path->path, path_str, sizeof(component_path->path));
54  BLI_addtail(&amb->component_paths, component_path);
55  return component_path;
56 # else
57  UNUSED_VARS(amb, path_str);
58  return NULL;
59 # endif
60 }
61 
62 static void rna_XrComponentPath_remove(XrActionMapBinding *amb, PointerRNA *component_path_ptr)
63 {
64 # ifdef WITH_XR_OPENXR
65  XrComponentPath *component_path = component_path_ptr->data;
66  int idx = BLI_findindex(&amb->component_paths, component_path);
67  if (idx != -1) {
68  BLI_freelinkN(&amb->component_paths, component_path);
69  }
70  RNA_POINTER_INVALIDATE(component_path_ptr);
71 # else
72  UNUSED_VARS(amb, component_path_ptr);
73 # endif
74 }
75 
76 static XrComponentPath *rna_XrComponentPath_find(XrActionMapBinding *amb, const char *path_str)
77 {
78 # ifdef WITH_XR_OPENXR
79  return BLI_findstring(&amb->component_paths, path_str, offsetof(XrComponentPath, path));
80 # else
81  UNUSED_VARS(amb, path_str);
82  return NULL;
83 # endif
84 }
85 
86 static XrActionMapBinding *rna_XrActionMapBinding_new(XrActionMapItem *ami,
87  const char *name,
88  bool replace_existing)
89 {
90 # ifdef WITH_XR_OPENXR
91  return WM_xr_actionmap_binding_new(ami, name, replace_existing);
92 # else
93  UNUSED_VARS(ami, name, replace_existing);
94  return NULL;
95 # endif
96 }
97 
98 static XrActionMapBinding *rna_XrActionMapBinding_new_from_binding(XrActionMapItem *ami,
99  XrActionMapBinding *amb_src)
100 {
101 # ifdef WITH_XR_OPENXR
102  return WM_xr_actionmap_binding_add_copy(ami, amb_src);
103 # else
104  UNUSED_VARS(ami, amb_src);
105  return NULL;
106 # endif
107 }
108 
109 static void rna_XrActionMapBinding_remove(XrActionMapItem *ami,
110  ReportList *reports,
111  PointerRNA *amb_ptr)
112 {
113 # ifdef WITH_XR_OPENXR
114  XrActionMapBinding *amb = amb_ptr->data;
115  if (WM_xr_actionmap_binding_remove(ami, amb) == false) {
116  BKE_reportf(reports,
117  RPT_ERROR,
118  "ActionMapBinding '%s' cannot be removed from '%s'",
119  amb->name,
120  ami->name);
121  return;
122  }
123  RNA_POINTER_INVALIDATE(amb_ptr);
124 # else
125  UNUSED_VARS(ami, reports, amb_ptr);
126 # endif
127 }
128 
129 static XrActionMapBinding *rna_XrActionMapBinding_find(XrActionMapItem *ami, const char *name)
130 {
131 # ifdef WITH_XR_OPENXR
132  return WM_xr_actionmap_binding_find(ami, name);
133 # else
134  UNUSED_VARS(ami, name);
135  return NULL;
136 # endif
137 }
138 
139 static void rna_XrActionMapBinding_component_paths_begin(CollectionPropertyIterator *iter,
140  PointerRNA *ptr)
141 {
142 # ifdef WITH_XR_OPENXR
145 # else
146  UNUSED_VARS(iter, ptr);
147 # endif
148 }
149 
150 static int rna_XrActionMapBinding_component_paths_length(PointerRNA *ptr)
151 {
152 # ifdef WITH_XR_OPENXR
154  return BLI_listbase_count(&amb->component_paths);
155 # else
156  UNUSED_VARS(ptr);
157  return 0;
158 # endif
159 }
160 
161 static int rna_XrActionMapBinding_axis0_region_get(PointerRNA *ptr)
162 {
163 # ifdef WITH_XR_OPENXR
164  XrActionMapBinding *amb = ptr->data;
165  if ((amb->axis_flag & XR_AXIS0_POS) != 0) {
166  return XR_AXIS0_POS;
167  }
168  if ((amb->axis_flag & XR_AXIS0_NEG) != 0) {
169  return XR_AXIS0_NEG;
170  }
171 # else
172  UNUSED_VARS(ptr);
173 # endif
174  return 0;
175 }
176 
177 static void rna_XrActionMapBinding_axis0_region_set(PointerRNA *ptr, int value)
178 {
179 # ifdef WITH_XR_OPENXR
180  XrActionMapBinding *amb = ptr->data;
181  amb->axis_flag &= ~(XR_AXIS0_POS | XR_AXIS0_NEG);
182  amb->axis_flag |= value;
183 # else
184  UNUSED_VARS(ptr, value);
185 # endif
186 }
187 
188 static int rna_XrActionMapBinding_axis1_region_get(PointerRNA *ptr)
189 {
190 # ifdef WITH_XR_OPENXR
191  XrActionMapBinding *amb = ptr->data;
192  if ((amb->axis_flag & XR_AXIS1_POS) != 0) {
193  return XR_AXIS1_POS;
194  }
195  if ((amb->axis_flag & XR_AXIS1_NEG) != 0) {
196  return XR_AXIS1_NEG;
197  }
198 # else
199  UNUSED_VARS(ptr);
200 # endif
201  return 0;
202 }
203 
204 static void rna_XrActionMapBinding_axis1_region_set(PointerRNA *ptr, int value)
205 {
206 # ifdef WITH_XR_OPENXR
207  XrActionMapBinding *amb = ptr->data;
208  amb->axis_flag &= ~(XR_AXIS1_POS | XR_AXIS1_NEG);
209  amb->axis_flag |= value;
210 # else
211  UNUSED_VARS(ptr, value);
212 # endif
213 }
214 
215 static void rna_XrActionMapBinding_name_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
216 {
217 # ifdef WITH_XR_OPENXR
218  wmWindowManager *wm = bmain->wm.first;
219  if (wm && wm->xr.runtime) {
220  ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
222  XrActionMap *actionmap = BLI_findlink(actionmaps, idx);
223  if (actionmap) {
224  XrActionMapItem *ami = BLI_findlink(&actionmap->items, actionmap->selitem);
225  if (ami) {
226  XrActionMapBinding *amb = ptr->data;
228  }
229  }
230  }
231 # else
232  UNUSED_VARS(bmain, ptr);
233 # endif
234 }
235 
236 static XrUserPath *rna_XrUserPath_new(XrActionMapItem *ami, const char *path_str)
237 {
238 # ifdef WITH_XR_OPENXR
239  XrUserPath *user_path = MEM_callocN(sizeof(XrUserPath), __func__);
240  BLI_strncpy(user_path->path, path_str, sizeof(user_path->path));
241  BLI_addtail(&ami->user_paths, user_path);
242  return user_path;
243 # else
244  UNUSED_VARS(ami, path_str);
245  return NULL;
246 # endif
247 }
248 
249 static void rna_XrUserPath_remove(XrActionMapItem *ami, PointerRNA *user_path_ptr)
250 {
251 # ifdef WITH_XR_OPENXR
252  XrUserPath *user_path = user_path_ptr->data;
253  int idx = BLI_findindex(&ami->user_paths, user_path);
254  if (idx != -1) {
255  BLI_freelinkN(&ami->user_paths, user_path);
256  }
257  RNA_POINTER_INVALIDATE(user_path_ptr);
258 # else
259  UNUSED_VARS(ami, user_path_ptr);
260 # endif
261 }
262 
263 static XrUserPath *rna_XrUserPath_find(XrActionMapItem *ami, const char *path_str)
264 {
265 # ifdef WITH_XR_OPENXR
266  return BLI_findstring(&ami->user_paths, path_str, offsetof(XrUserPath, path));
267 # else
268  UNUSED_VARS(ami, path_str);
269  return NULL;
270 # endif
271 }
272 
273 static XrActionMapItem *rna_XrActionMapItem_new(XrActionMap *am,
274  const char *name,
275  bool replace_existing)
276 {
277 # ifdef WITH_XR_OPENXR
278  return WM_xr_actionmap_item_new(am, name, replace_existing);
279 # else
280  UNUSED_VARS(am, name, replace_existing);
281  return NULL;
282 # endif
283 }
284 
285 static XrActionMapItem *rna_XrActionMapItem_new_from_item(XrActionMap *am,
286  XrActionMapItem *ami_src)
287 {
288 # ifdef WITH_XR_OPENXR
289  return WM_xr_actionmap_item_add_copy(am, ami_src);
290 # else
291  UNUSED_VARS(am, ami_src);
292  return NULL;
293 # endif
294 }
295 
296 static void rna_XrActionMapItem_remove(XrActionMap *am, ReportList *reports, PointerRNA *ami_ptr)
297 {
298 # ifdef WITH_XR_OPENXR
299  XrActionMapItem *ami = ami_ptr->data;
300  if (WM_xr_actionmap_item_remove(am, ami) == false) {
301  BKE_reportf(
302  reports, RPT_ERROR, "ActionMapItem '%s' cannot be removed from '%s'", ami->name, am->name);
303  return;
304  }
305  RNA_POINTER_INVALIDATE(ami_ptr);
306 # else
307  UNUSED_VARS(am, reports, ami_ptr);
308 # endif
309 }
310 
311 static XrActionMapItem *rna_XrActionMapItem_find(XrActionMap *am, const char *name)
312 {
313 # ifdef WITH_XR_OPENXR
314  return WM_xr_actionmap_item_find(am, name);
315 # else
316  UNUSED_VARS(am, name);
317  return NULL;
318 # endif
319 }
320 
321 static void rna_XrActionMapItem_user_paths_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
322 {
323 # ifdef WITH_XR_OPENXR
326 # else
327  UNUSED_VARS(iter, ptr);
328 # endif
329 }
330 
331 static int rna_XrActionMapItem_user_paths_length(PointerRNA *ptr)
332 {
333 # ifdef WITH_XR_OPENXR
335  return BLI_listbase_count(&ami->user_paths);
336 # else
337  UNUSED_VARS(ptr);
338  return 0;
339 # endif
340 }
341 
342 static void rna_XrActionMapItem_op_name_get(PointerRNA *ptr, char *value)
343 {
344 # ifdef WITH_XR_OPENXR
345  XrActionMapItem *ami = ptr->data;
346  if (ami->op[0]) {
347  if (ami->op_properties_ptr) {
349  if (ot) {
350  strcpy(value, WM_operatortype_name(ot, ami->op_properties_ptr));
351  return;
352  }
353  }
354  strcpy(value, ami->op);
355  return;
356  }
357 # else
358  UNUSED_VARS(ptr);
359 # endif
360  value[0] = '\0';
361 }
362 
363 static int rna_XrActionMapItem_op_name_length(PointerRNA *ptr)
364 {
365 # ifdef WITH_XR_OPENXR
366  XrActionMapItem *ami = ptr->data;
367  if (ami->op[0]) {
368  if (ami->op_properties_ptr) {
370  if (ot) {
371  return strlen(WM_operatortype_name(ot, ami->op_properties_ptr));
372  }
373  }
374  return strlen(ami->op);
375  }
376 # else
377  UNUSED_VARS(ptr);
378 # endif
379  return 0;
380 }
381 
382 static PointerRNA rna_XrActionMapItem_op_properties_get(PointerRNA *ptr)
383 {
384 # ifdef WITH_XR_OPENXR
385  XrActionMapItem *ami = ptr->data;
386  if (ami->op_properties_ptr) {
387  return *(ami->op_properties_ptr);
388  }
389 # else
390  UNUSED_VARS(ptr);
391 # endif
392  return PointerRNA_NULL;
393 }
394 
395 static bool rna_XrActionMapItem_bimanual_get(PointerRNA *ptr)
396 {
397 # ifdef WITH_XR_OPENXR
398  XrActionMapItem *ami = ptr->data;
399  if ((ami->action_flag & XR_ACTION_BIMANUAL) != 0) {
400  return true;
401  }
402 # else
403  UNUSED_VARS(ptr);
404 # endif
405  return false;
406 }
407 
408 static void rna_XrActionMapItem_bimanual_set(PointerRNA *ptr, bool value)
409 {
410 # ifdef WITH_XR_OPENXR
411  XrActionMapItem *ami = ptr->data;
413 # else
414  UNUSED_VARS(ptr, value);
415 # endif
416 }
417 
418 static bool rna_XrActionMapItem_haptic_match_user_paths_get(PointerRNA *ptr)
419 {
420 # ifdef WITH_XR_OPENXR
421  XrActionMapItem *ami = ptr->data;
422  if ((ami->haptic_flag & XR_HAPTIC_MATCHUSERPATHS) != 0) {
423  return true;
424  }
425 # else
426  UNUSED_VARS(ptr);
427 # endif
428  return false;
429 }
430 
431 static void rna_XrActionMapItem_haptic_match_user_paths_set(PointerRNA *ptr, bool value)
432 {
433 # ifdef WITH_XR_OPENXR
434  XrActionMapItem *ami = ptr->data;
436 # else
437  UNUSED_VARS(ptr, value);
438 # endif
439 }
440 
441 static int rna_XrActionMapItem_haptic_mode_get(PointerRNA *ptr)
442 {
443 # ifdef WITH_XR_OPENXR
444  XrActionMapItem *ami = ptr->data;
445  if ((ami->haptic_flag & XR_HAPTIC_RELEASE) != 0) {
446  return ((ami->haptic_flag & XR_HAPTIC_PRESS) != 0) ? (XR_HAPTIC_PRESS | XR_HAPTIC_RELEASE) :
448  }
449  if ((ami->haptic_flag & XR_HAPTIC_REPEAT) != 0) {
450  return XR_HAPTIC_REPEAT;
451  }
452 # else
453  UNUSED_VARS(ptr);
454 # endif
455  return XR_HAPTIC_PRESS;
456 }
457 
458 static void rna_XrActionMapItem_haptic_mode_set(PointerRNA *ptr, int value)
459 {
460 # ifdef WITH_XR_OPENXR
461  XrActionMapItem *ami = ptr->data;
463  ami->haptic_flag |= value;
464 # else
465  UNUSED_VARS(ptr, value);
466 # endif
467 }
468 
469 static bool rna_XrActionMapItem_pose_is_controller_grip_get(PointerRNA *ptr)
470 {
471 # ifdef WITH_XR_OPENXR
472  XrActionMapItem *ami = ptr->data;
473  if ((ami->pose_flag & XR_POSE_GRIP) != 0) {
474  return true;
475  }
476 # else
477  UNUSED_VARS(ptr);
478 # endif
479  return false;
480 }
481 
482 static void rna_XrActionMapItem_pose_is_controller_grip_set(PointerRNA *ptr, bool value)
483 {
484 # ifdef WITH_XR_OPENXR
485  XrActionMapItem *ami = ptr->data;
487 # else
488  UNUSED_VARS(ptr, value);
489 # endif
490 }
491 
492 static bool rna_XrActionMapItem_pose_is_controller_aim_get(PointerRNA *ptr)
493 {
494 # ifdef WITH_XR_OPENXR
495  XrActionMapItem *ami = ptr->data;
496  if ((ami->pose_flag & XR_POSE_AIM) != 0) {
497  return true;
498  }
499 # else
500  UNUSED_VARS(ptr);
501 # endif
502  return false;
503 }
504 
505 static void rna_XrActionMapItem_pose_is_controller_aim_set(PointerRNA *ptr, bool value)
506 {
507 # ifdef WITH_XR_OPENXR
508  XrActionMapItem *ami = ptr->data;
510 # else
511  UNUSED_VARS(ptr, value);
512 # endif
513 }
514 
515 static void rna_XrActionMapItem_bindings_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
516 {
517 # ifdef WITH_XR_OPENXR
520 # else
521  UNUSED_VARS(iter, ptr);
522 # endif
523 }
524 
525 static int rna_XrActionMapItem_bindings_length(PointerRNA *ptr)
526 {
527 # ifdef WITH_XR_OPENXR
529  return BLI_listbase_count(&ami->bindings);
530 # else
531  UNUSED_VARS(ptr);
532  return 0;
533 # endif
534 }
535 
536 static void rna_XrActionMapItem_name_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
537 {
538 # ifdef WITH_XR_OPENXR
539  wmWindowManager *wm = bmain->wm.first;
540  if (wm && wm->xr.runtime) {
541  ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
543  XrActionMap *actionmap = BLI_findlink(actionmaps, idx);
544  if (actionmap) {
545  XrActionMapItem *ami = ptr->data;
546  WM_xr_actionmap_item_ensure_unique(actionmap, ami);
547  }
548  }
549 # else
550  UNUSED_VARS(bmain, ptr);
551 # endif
552 }
553 
554 static void rna_XrActionMapItem_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
555 {
556 # ifdef WITH_XR_OPENXR
557  XrActionMapItem *ami = ptr->data;
559 # else
560  UNUSED_VARS(ptr);
561 # endif
562 }
563 
564 static XrActionMap *rna_XrActionMap_new(PointerRNA *ptr, const char *name, bool replace_existing)
565 {
566 # ifdef WITH_XR_OPENXR
567  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
568  return WM_xr_actionmap_new(xr->runtime, name, replace_existing);
569 # else
570  UNUSED_VARS(ptr, name, replace_existing);
571  return NULL;
572 # endif
573 }
574 
575 static XrActionMap *rna_XrActionMap_new_from_actionmap(PointerRNA *ptr, XrActionMap *am_src)
576 {
577 # ifdef WITH_XR_OPENXR
578  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
579  return WM_xr_actionmap_add_copy(xr->runtime, am_src);
580 # else
581  UNUSED_VARS(ptr, am_src);
582  return NULL;
583 # endif
584 }
585 
586 static void rna_XrActionMap_remove(ReportList *reports, PointerRNA *ptr, PointerRNA *actionmap_ptr)
587 {
588 # ifdef WITH_XR_OPENXR
589  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
590  XrActionMap *actionmap = actionmap_ptr->data;
591  if (WM_xr_actionmap_remove(xr->runtime, actionmap) == false) {
592  BKE_reportf(reports, RPT_ERROR, "ActionMap '%s' cannot be removed", actionmap->name);
593  return;
594  }
595  RNA_POINTER_INVALIDATE(actionmap_ptr);
596 # else
597  UNUSED_VARS(ptr, reports, actionmap_ptr);
598 # endif
599 }
600 
601 static XrActionMap *rna_XrActionMap_find(PointerRNA *ptr, const char *name)
602 {
603 # ifdef WITH_XR_OPENXR
604  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
605  return WM_xr_actionmap_find(xr->runtime, name);
606 # else
607  UNUSED_VARS(ptr, name);
608  return NULL;
609 # endif
610 }
611 
612 static void rna_XrActionMap_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
613 {
614 # ifdef WITH_XR_OPENXR
615  XrActionMap *actionmap = (XrActionMap *)ptr->data;
616  rna_iterator_listbase_begin(iter, &actionmap->items, NULL);
617 # else
618  UNUSED_VARS(iter, ptr);
619 # endif
620 }
621 
622 static int rna_XrActionMap_items_length(PointerRNA *ptr)
623 {
624 # ifdef WITH_XR_OPENXR
625  XrActionMap *actionmap = (XrActionMap *)ptr->data;
626  return BLI_listbase_count(&actionmap->items);
627 # else
628  UNUSED_VARS(ptr);
629  return 0;
630 # endif
631 }
632 
633 static void rna_XrActionMap_name_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
634 {
635 # ifdef WITH_XR_OPENXR
636  wmWindowManager *wm = bmain->wm.first;
637  if (wm && wm->xr.runtime) {
638  XrActionMap *actionmap = ptr->data;
639  WM_xr_actionmap_ensure_unique(wm->xr.runtime, actionmap);
640  }
641 # else
642  UNUSED_VARS(bmain, ptr);
643 # endif
644 }
645 
648 /* -------------------------------------------------------------------- */
652 static bool rna_XrSessionSettings_use_positional_tracking_get(PointerRNA *ptr)
653 {
654 # ifdef WITH_XR_OPENXR
655  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
657 # else
658  UNUSED_VARS(ptr);
659  return false;
660 # endif
661 }
662 
663 static void rna_XrSessionSettings_use_positional_tracking_set(PointerRNA *ptr, bool value)
664 {
665 # ifdef WITH_XR_OPENXR
666  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
668 # else
669  UNUSED_VARS(ptr, value);
670 # endif
671 }
672 
673 static bool rna_XrSessionSettings_use_absolute_tracking_get(PointerRNA *ptr)
674 {
675 # ifdef WITH_XR_OPENXR
676  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
678 # else
679  UNUSED_VARS(ptr);
680  return false;
681 # endif
682 }
683 
684 static void rna_XrSessionSettings_use_absolute_tracking_set(PointerRNA *ptr, bool value)
685 {
686 # ifdef WITH_XR_OPENXR
687  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
689 # else
690  UNUSED_VARS(ptr, value);
691 # endif
692 }
693 
694 static int rna_XrSessionSettings_icon_from_show_object_viewport_get(PointerRNA *ptr)
695 {
696 # ifdef WITH_XR_OPENXR
697  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
700 # if 0
701  /* For the future when selection in VR is reliably supported. */
703 # else
704  NULL
705 # endif
706  );
707 # else
708  UNUSED_VARS(ptr);
709  return ICON_NONE;
710 # endif
711 }
712 
715 /* -------------------------------------------------------------------- */
719 static bool rna_XrSessionState_is_running(bContext *C)
720 {
721 # ifdef WITH_XR_OPENXR
722  const wmWindowManager *wm = CTX_wm_manager(C);
723  return WM_xr_session_exists(&wm->xr);
724 # else
725  UNUSED_VARS(C);
726  return false;
727 # endif
728 }
729 
730 static void rna_XrSessionState_reset_to_base_pose(bContext *C)
731 {
732 # ifdef WITH_XR_OPENXR
735 # else
736  UNUSED_VARS(C);
737 # endif
738 }
739 
740 static bool rna_XrSessionState_action_set_create(bContext *C, XrActionMap *actionmap)
741 {
742 # ifdef WITH_XR_OPENXR
744  return WM_xr_action_set_create(&wm->xr, actionmap->name);
745 # else
746  UNUSED_VARS(C, actionmap);
747  return false;
748 # endif
749 }
750 
751 static bool rna_XrSessionState_action_create(bContext *C,
752  XrActionMap *actionmap,
753  XrActionMapItem *ami)
754 {
755 # ifdef WITH_XR_OPENXR
757  if (BLI_listbase_is_empty(&ami->user_paths)) {
758  return false;
759  }
760 
761  const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
762  const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
764  IDProperty *op_properties = NULL;
765  int64_t haptic_duration_msec;
766 
767  if (is_button_action) {
768  if (ami->op[0]) {
769  char idname[OP_MAX_TYPENAME];
770  WM_operator_bl_idname(idname, ami->op);
771  ot = WM_operatortype_find(idname, true);
772  if (ot) {
773  op_properties = ami->op_properties;
774  }
775  }
776 
777  haptic_duration_msec = (int64_t)(ami->haptic_duration * 1000.0f);
778  }
779 
780  return WM_xr_action_create(&wm->xr,
781  actionmap->name,
782  ami->name,
783  ami->type,
784  &ami->user_paths,
785  ot,
786  op_properties,
787  is_button_action ? ami->haptic_name : NULL,
788  is_button_action ? &haptic_duration_msec : NULL,
789  is_button_action ? &ami->haptic_frequency : NULL,
790  is_button_action ? &ami->haptic_amplitude : NULL,
791  ami->op_flag,
792  ami->action_flag,
793  ami->haptic_flag);
794 # else
795  UNUSED_VARS(C, actionmap, ami);
796  return false;
797 # endif
798 }
799 
800 static bool rna_XrSessionState_action_binding_create(bContext *C,
801  XrActionMap *actionmap,
802  XrActionMapItem *ami,
803  XrActionMapBinding *amb)
804 {
805 # ifdef WITH_XR_OPENXR
807  const int count_user_paths = BLI_listbase_count(&ami->user_paths);
808  const int count_component_paths = BLI_listbase_count(&amb->component_paths);
809  if (count_user_paths < 1 || (count_user_paths != count_component_paths)) {
810  return false;
811  }
812 
813  const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
814  const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
815  const bool is_pose_action = (ami->type == XR_POSE_INPUT);
816  float float_thresholds[2];
817  eXrAxisFlag axis_flags[2];
818  wmXrPose poses[2];
819 
820  if (is_float_action) {
821  float_thresholds[0] = float_thresholds[1] = amb->float_threshold;
822  }
823  if (is_button_action) {
824  axis_flags[0] = axis_flags[1] = amb->axis_flag;
825  }
826  if (is_pose_action) {
827  copy_v3_v3(poses[0].position, amb->pose_location);
828  eul_to_quat(poses[0].orientation_quat, amb->pose_rotation);
829  normalize_qt(poses[0].orientation_quat);
830  memcpy(&poses[1], &poses[0], sizeof(poses[1]));
831  }
832 
833  return WM_xr_action_binding_create(&wm->xr,
834  actionmap->name,
835  ami->name,
836  amb->profile,
837  &ami->user_paths,
838  &amb->component_paths,
839  is_float_action ? float_thresholds : NULL,
840  is_button_action ? axis_flags : NULL,
841  is_pose_action ? poses : NULL);
842 # else
843  UNUSED_VARS(C, actionmap, ami, amb);
844  return false;
845 # endif
846 }
847 
848 bool rna_XrSessionState_active_action_set_set(bContext *C, const char *action_set_name)
849 {
850 # ifdef WITH_XR_OPENXR
852  return WM_xr_active_action_set_set(&wm->xr, action_set_name, true);
853 # else
854  UNUSED_VARS(C, action_set_name);
855  return false;
856 # endif
857 }
858 
859 bool rna_XrSessionState_controller_pose_actions_set(bContext *C,
860  const char *action_set_name,
861  const char *grip_action_name,
862  const char *aim_action_name)
863 {
864 # ifdef WITH_XR_OPENXR
867  &wm->xr, action_set_name, grip_action_name, aim_action_name);
868 # else
869  UNUSED_VARS(C, action_set_name, grip_action_name, aim_action_name);
870  return false;
871 # endif
872 }
873 
874 void rna_XrSessionState_action_state_get(bContext *C,
875  const char *action_set_name,
876  const char *action_name,
877  const char *user_path,
878  float r_state[2])
879 {
880 # ifdef WITH_XR_OPENXR
882  wmXrActionState state;
883  if (WM_xr_action_state_get(&wm->xr, action_set_name, action_name, user_path, &state)) {
884  switch (state.type) {
885  case XR_BOOLEAN_INPUT:
886  r_state[0] = (float)state.state_boolean;
887  r_state[1] = 0.0f;
888  return;
889  case XR_FLOAT_INPUT:
890  r_state[0] = state.state_float;
891  r_state[1] = 0.0f;
892  return;
893  case XR_VECTOR2F_INPUT:
894  copy_v2_v2(r_state, state.state_vector2f);
895  return;
896  case XR_POSE_INPUT:
897  case XR_VIBRATION_OUTPUT:
899  break;
900  }
901  }
902 # else
903  UNUSED_VARS(C, action_set_name, action_name, user_path);
904 # endif
905  zero_v2(r_state);
906 }
907 
908 bool rna_XrSessionState_haptic_action_apply(bContext *C,
909  const char *action_set_name,
910  const char *action_name,
911  const char *user_path,
912  float duration,
913  float frequency,
914  float amplitude)
915 {
916 # ifdef WITH_XR_OPENXR
918  int64_t duration_msec = (int64_t)(duration * 1000.0f);
919  return WM_xr_haptic_action_apply(&wm->xr,
920  action_set_name,
921  action_name,
922  user_path[0] ? user_path : NULL,
923  &duration_msec,
924  &frequency,
925  &amplitude);
926 # else
927  UNUSED_VARS(C, action_set_name, action_name, user_path, duration, frequency, amplitude);
928  return false;
929 # endif
930 }
931 
932 void rna_XrSessionState_haptic_action_stop(bContext *C,
933  const char *action_set_name,
934  const char *action_name,
935  const char *user_path)
936 {
937 # ifdef WITH_XR_OPENXR
939  WM_xr_haptic_action_stop(&wm->xr, action_set_name, action_name, user_path[0] ? user_path : NULL);
940 # else
941  UNUSED_VARS(C, action_set_name, action_name, user_path);
942 # endif
943 }
944 
945 static void rna_XrSessionState_controller_grip_location_get(bContext *C,
946  int index,
947  float r_values[3])
948 {
949 # ifdef WITH_XR_OPENXR
950  const wmWindowManager *wm = CTX_wm_manager(C);
952 # else
953  UNUSED_VARS(C, index);
954  zero_v3(r_values);
955 # endif
956 }
957 
958 static void rna_XrSessionState_controller_grip_rotation_get(bContext *C,
959  int index,
960  float r_values[4])
961 {
962 # ifdef WITH_XR_OPENXR
963  const wmWindowManager *wm = CTX_wm_manager(C);
965 # else
966  UNUSED_VARS(C, index);
967  unit_qt(r_values);
968 # endif
969 }
970 
971 static void rna_XrSessionState_controller_aim_location_get(bContext *C,
972  int index,
973  float r_values[3])
974 {
975 # ifdef WITH_XR_OPENXR
976  const wmWindowManager *wm = CTX_wm_manager(C);
978 # else
979  UNUSED_VARS(C, index);
980  zero_v3(r_values);
981 # endif
982 }
983 
984 static void rna_XrSessionState_controller_aim_rotation_get(bContext *C,
985  int index,
986  float r_values[4])
987 {
988 # ifdef WITH_XR_OPENXR
989  const wmWindowManager *wm = CTX_wm_manager(C);
991 # else
992  UNUSED_VARS(C, index);
993  unit_qt(r_values);
994 # endif
995 }
996 
997 static void rna_XrSessionState_viewer_pose_location_get(PointerRNA *ptr, float *r_values)
998 {
999 # ifdef WITH_XR_OPENXR
1000  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1002 # else
1003  UNUSED_VARS(ptr);
1004  zero_v3(r_values);
1005 # endif
1006 }
1007 
1008 static void rna_XrSessionState_viewer_pose_rotation_get(PointerRNA *ptr, float *r_values)
1009 {
1010 # ifdef WITH_XR_OPENXR
1011  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1013 # else
1014  UNUSED_VARS(ptr);
1015  unit_qt(r_values);
1016 # endif
1017 }
1018 
1019 static void rna_XrSessionState_nav_location_get(PointerRNA *ptr, float *r_values)
1020 {
1021 # ifdef WITH_XR_OPENXR
1022  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1024 # else
1025  UNUSED_VARS(ptr);
1026  zero_v3(r_values);
1027 # endif
1028 }
1029 
1030 static void rna_XrSessionState_nav_location_set(PointerRNA *ptr, const float *values)
1031 {
1032 # ifdef WITH_XR_OPENXR
1033  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1035 # else
1036  UNUSED_VARS(ptr, values);
1037 # endif
1038 }
1039 
1040 static void rna_XrSessionState_nav_rotation_get(PointerRNA *ptr, float *r_values)
1041 {
1042 # ifdef WITH_XR_OPENXR
1043  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1045 # else
1046  UNUSED_VARS(ptr);
1047  unit_qt(r_values);
1048 # endif
1049 }
1050 
1051 static void rna_XrSessionState_nav_rotation_set(PointerRNA *ptr, const float *values)
1052 {
1053 # ifdef WITH_XR_OPENXR
1054  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1056 # else
1057  UNUSED_VARS(ptr, values);
1058 # endif
1059 }
1060 
1061 static float rna_XrSessionState_nav_scale_get(PointerRNA *ptr)
1062 {
1063  float value;
1064 # ifdef WITH_XR_OPENXR
1065  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1067 # else
1068  UNUSED_VARS(ptr);
1069  value = 1.0f;
1070 # endif
1071  return value;
1072 }
1073 
1074 static void rna_XrSessionState_nav_scale_set(PointerRNA *ptr, float value)
1075 {
1076 # ifdef WITH_XR_OPENXR
1077  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1079 # else
1080  UNUSED_VARS(ptr, value);
1081 # endif
1082 }
1083 
1084 static void rna_XrSessionState_actionmaps_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
1085 {
1086 # ifdef WITH_XR_OPENXR
1087  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1089  rna_iterator_listbase_begin(iter, lb, NULL);
1090 # else
1091  UNUSED_VARS(iter, ptr);
1092 # endif
1093 }
1094 
1095 static int rna_XrSessionState_actionmaps_length(PointerRNA *ptr)
1096 {
1097 # ifdef WITH_XR_OPENXR
1098  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1100  return BLI_listbase_count(lb);
1101 # else
1102  UNUSED_VARS(ptr);
1103  return 0;
1104 # endif
1105 }
1106 
1107 static int rna_XrSessionState_active_actionmap_get(PointerRNA *ptr)
1108 {
1109 # ifdef WITH_XR_OPENXR
1110  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1112 # else
1113  UNUSED_VARS(ptr);
1114  return -1;
1115 # endif
1116 }
1117 
1118 static void rna_XrSessionState_active_actionmap_set(PointerRNA *ptr, int value)
1119 {
1120 # ifdef WITH_XR_OPENXR
1121  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1122  WM_xr_actionmap_active_index_set(xr->runtime, (short)value);
1123 # else
1124  UNUSED_VARS(ptr, value);
1125 # endif
1126 }
1127 
1128 static int rna_XrSessionState_selected_actionmap_get(PointerRNA *ptr)
1129 {
1130 # ifdef WITH_XR_OPENXR
1131  const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1133 # else
1134  UNUSED_VARS(ptr);
1135  return -1;
1136 # endif
1137 }
1138 
1139 static void rna_XrSessionState_selected_actionmap_set(PointerRNA *ptr, int value)
1140 {
1141 # ifdef WITH_XR_OPENXR
1142  wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1143  WM_xr_actionmap_selected_index_set(xr->runtime, (short)value);
1144 # else
1145  UNUSED_VARS(ptr, value);
1146 # endif
1147 }
1148 
1151 /* -------------------------------------------------------------------- */
1155 static void rna_XrEventData_action_set_get(PointerRNA *ptr, char *r_value)
1156 {
1157 # ifdef WITH_XR_OPENXR
1158  const wmXrActionData *data = ptr->data;
1159  strcpy(r_value, data->action_set);
1160 # else
1161  UNUSED_VARS(ptr);
1162  r_value[0] = '\0';
1163 # endif
1164 }
1165 
1166 static int rna_XrEventData_action_set_length(PointerRNA *ptr)
1167 {
1168 # ifdef WITH_XR_OPENXR
1169  const wmXrActionData *data = ptr->data;
1170  return strlen(data->action_set);
1171 # else
1172  UNUSED_VARS(ptr);
1173  return 0;
1174 # endif
1175 }
1176 
1177 static void rna_XrEventData_action_get(PointerRNA *ptr, char *r_value)
1178 {
1179 # ifdef WITH_XR_OPENXR
1180  const wmXrActionData *data = ptr->data;
1181  strcpy(r_value, data->action);
1182 # else
1183  UNUSED_VARS(ptr);
1184  r_value[0] = '\0';
1185 # endif
1186 }
1187 
1188 static int rna_XrEventData_action_length(PointerRNA *ptr)
1189 {
1190 # ifdef WITH_XR_OPENXR
1191  const wmXrActionData *data = ptr->data;
1192  return strlen(data->action);
1193 # else
1194  UNUSED_VARS(ptr);
1195  return 0;
1196 # endif
1197 }
1198 
1199 static void rna_XrEventData_user_path_get(PointerRNA *ptr, char *r_value)
1200 {
1201 # ifdef WITH_XR_OPENXR
1202  const wmXrActionData *data = ptr->data;
1203  strcpy(r_value, data->user_path);
1204 # else
1205  UNUSED_VARS(ptr);
1206  r_value[0] = '\0';
1207 # endif
1208 }
1209 
1210 static int rna_XrEventData_user_path_length(PointerRNA *ptr)
1211 {
1212 # ifdef WITH_XR_OPENXR
1213  const wmXrActionData *data = ptr->data;
1214  return strlen(data->user_path);
1215 # else
1216  UNUSED_VARS(ptr);
1217  return 0;
1218 # endif
1219 }
1220 
1221 static void rna_XrEventData_user_path_other_get(PointerRNA *ptr, char *r_value)
1222 {
1223 # ifdef WITH_XR_OPENXR
1224  const wmXrActionData *data = ptr->data;
1225  strcpy(r_value, data->user_path_other);
1226 # else
1227  UNUSED_VARS(ptr);
1228  r_value[0] = '\0';
1229 # endif
1230 }
1231 
1232 static int rna_XrEventData_user_path_other_length(PointerRNA *ptr)
1233 {
1234 # ifdef WITH_XR_OPENXR
1235  const wmXrActionData *data = ptr->data;
1236  return strlen(data->user_path_other);
1237 # else
1238  UNUSED_VARS(ptr);
1239  return 0;
1240 # endif
1241 }
1242 
1243 static int rna_XrEventData_type_get(PointerRNA *ptr)
1244 {
1245 # ifdef WITH_XR_OPENXR
1246  const wmXrActionData *data = ptr->data;
1247  return data->type;
1248 # else
1249  UNUSED_VARS(ptr);
1250  return 0;
1251 # endif
1252 }
1253 
1254 static void rna_XrEventData_state_get(PointerRNA *ptr, float r_values[2])
1255 {
1256 # ifdef WITH_XR_OPENXR
1257  const wmXrActionData *data = ptr->data;
1258  copy_v2_v2(r_values, data->state);
1259 # else
1260  UNUSED_VARS(ptr);
1261  zero_v2(r_values);
1262 # endif
1263 }
1264 
1265 static void rna_XrEventData_state_other_get(PointerRNA *ptr, float r_values[2])
1266 {
1267 # ifdef WITH_XR_OPENXR
1268  const wmXrActionData *data = ptr->data;
1269  copy_v2_v2(r_values, data->state_other);
1270 # else
1271  UNUSED_VARS(ptr);
1272  zero_v2(r_values);
1273 # endif
1274 }
1275 
1276 static float rna_XrEventData_float_threshold_get(PointerRNA *ptr)
1277 {
1278 # ifdef WITH_XR_OPENXR
1279  const wmXrActionData *data = ptr->data;
1280  return data->float_threshold;
1281 # else
1282  UNUSED_VARS(ptr);
1283  return 0.0f;
1284 # endif
1285 }
1286 
1287 static void rna_XrEventData_controller_location_get(PointerRNA *ptr, float r_values[3])
1288 {
1289 # ifdef WITH_XR_OPENXR
1290  const wmXrActionData *data = ptr->data;
1291  copy_v3_v3(r_values, data->controller_loc);
1292 # else
1293  UNUSED_VARS(ptr);
1294  zero_v3(r_values);
1295 # endif
1296 }
1297 
1298 static void rna_XrEventData_controller_rotation_get(PointerRNA *ptr, float r_values[4])
1299 {
1300 # ifdef WITH_XR_OPENXR
1301  const wmXrActionData *data = ptr->data;
1302  copy_qt_qt(r_values, data->controller_rot);
1303 # else
1304  UNUSED_VARS(ptr);
1305  unit_qt(r_values);
1306 # endif
1307 }
1308 
1309 static void rna_XrEventData_controller_location_other_get(PointerRNA *ptr, float r_values[3])
1310 {
1311 # ifdef WITH_XR_OPENXR
1312  const wmXrActionData *data = ptr->data;
1313  copy_v3_v3(r_values, data->controller_loc_other);
1314 # else
1315  UNUSED_VARS(ptr);
1316  zero_v3(r_values);
1317 # endif
1318 }
1319 
1320 static void rna_XrEventData_controller_rotation_other_get(PointerRNA *ptr, float r_values[4])
1321 {
1322 # ifdef WITH_XR_OPENXR
1323  const wmXrActionData *data = ptr->data;
1324  copy_qt_qt(r_values, data->controller_rot_other);
1325 # else
1326  UNUSED_VARS(ptr);
1327  unit_qt(r_values);
1328 # endif
1329 }
1330 
1331 static bool rna_XrEventData_bimanual_get(PointerRNA *ptr)
1332 {
1333 # ifdef WITH_XR_OPENXR
1334  const wmXrActionData *data = ptr->data;
1335  return data->bimanual;
1336 # else
1337  UNUSED_VARS(ptr);
1338  return false;
1339 # endif
1340 }
1341 
1344 #else /* RNA_RUNTIME */
1345 
1346 /* -------------------------------------------------------------------- */
1347 
1349  {XR_FLOAT_INPUT,
1350  "FLOAT",
1351  0,
1352  "Float",
1353  "Float action, representing either a digital or analog button"},
1355  "VECTOR2D",
1356  0,
1357  "Vector2D",
1358  "2D float vector action, representing a thumbstick or trackpad"},
1359  {XR_POSE_INPUT,
1360  "POSE",
1361  0,
1362  "Pose",
1363  "3D pose action, representing a controller's location and rotation"},
1365  "VIBRATION",
1366  0,
1367  "Vibration",
1368  "Haptic vibration output action, to be applied with a duration, frequency, and amplitude"},
1369  {0, NULL, 0, NULL, NULL},
1370 };
1371 
1373  {XR_OP_PRESS,
1374  "PRESS",
1375  0,
1376  "Press",
1377  "Execute operator on button press (non-modal operators only)"},
1378  {XR_OP_RELEASE,
1379  "RELEASE",
1380  0,
1381  "Release",
1382  "Execute operator on button release (non-modal operators only)"},
1383  {XR_OP_MODAL, "MODAL", 0, "Modal", "Use modal execution (modal operators only)"},
1384  {0, NULL, 0, NULL, NULL},
1385 };
1386 
1388  {XR_HAPTIC_PRESS, "PRESS", 0, "Press", "Apply haptics on button press"},
1389  {XR_HAPTIC_RELEASE, "RELEASE", 0, "Release", "Apply haptics on button release"},
1391  "PRESS_RELEASE",
1392  0,
1393  "Press Release",
1394  "Apply haptics on button press and release"},
1396  "REPEAT",
1397  0,
1398  "Repeat",
1399  "Apply haptics repeatedly for the duration of the button press"},
1400  {0, NULL, 0, NULL, NULL},
1401 };
1402 
1404  {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1405  {XR_AXIS0_POS,
1406  "POSITIVE",
1407  0,
1408  "Positive",
1409  "Use positive axis region only for operator execution"},
1410  {XR_AXIS0_NEG,
1411  "NEGATIVE",
1412  0,
1413  "Negative",
1414  "Use negative axis region only for operator execution"},
1415  {0, NULL, 0, NULL, NULL},
1416 };
1417 
1419  {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1420  {XR_AXIS1_POS,
1421  "POSITIVE",
1422  0,
1423  "Positive",
1424  "Use positive axis region only for operator execution"},
1425  {XR_AXIS1_NEG,
1426  "NEGATIVE",
1427  0,
1428  "Negative",
1429  "Use negative axis region only for operator execution"},
1430  {0, NULL, 0, NULL, NULL},
1431 };
1432 
1433 /* -------------------------------------------------------------------- */
1438 {
1439  StructRNA *srna;
1440  FunctionRNA *func;
1441  PropertyRNA *parm;
1442 
1443  RNA_def_property_srna(cprop, "XrComponentPaths");
1444  srna = RNA_def_struct(brna, "XrComponentPaths", NULL);
1445  RNA_def_struct_sdna(srna, "XrActionMapBinding");
1446  RNA_def_struct_ui_text(srna, "XR Component Paths", "Collection of OpenXR component paths");
1447 
1448  func = RNA_def_function(srna, "new", "rna_XrComponentPath_new");
1449  parm = RNA_def_string(
1450  func, "path", NULL, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1452  parm = RNA_def_pointer(
1453  func, "component_path", "XrComponentPath", "Component Path", "Added component path");
1454  RNA_def_function_return(func, parm);
1455 
1456  func = RNA_def_function(srna, "remove", "rna_XrComponentPath_remove");
1457  parm = RNA_def_pointer(func, "component_path", "XrComponentPath", "Component Path", "");
1460 
1461  func = RNA_def_function(srna, "find", "rna_XrComponentPath_find");
1462  parm = RNA_def_string(
1463  func, "path", NULL, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1465  parm = RNA_def_pointer(func,
1466  "component_path",
1467  "XrComponentPath",
1468  "Component Path",
1469  "The component path with the given path");
1470  RNA_def_function_return(func, parm);
1471 }
1472 
1474 {
1475  StructRNA *srna;
1476  FunctionRNA *func;
1477  PropertyRNA *parm;
1478 
1479  RNA_def_property_srna(cprop, "XrActionMapBindings");
1480  srna = RNA_def_struct(brna, "XrActionMapBindings", NULL);
1481  RNA_def_struct_sdna(srna, "XrActionMapItem");
1482  RNA_def_struct_ui_text(srna, "XR Action Map Bindings", "Collection of XR action map bindings");
1483 
1484  func = RNA_def_function(srna, "new", "rna_XrActionMapBinding_new");
1485  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name of the action map binding", "");
1487  parm = RNA_def_boolean(func,
1488  "replace_existing",
1489  true,
1490  "Replace Existing",
1491  "Replace any existing binding with the same name");
1493  parm = RNA_def_pointer(
1494  func, "binding", "XrActionMapBinding", "Binding", "Added action map binding");
1495  RNA_def_function_return(func, parm);
1496 
1497  func = RNA_def_function(srna, "new_from_binding", "rna_XrActionMapBinding_new_from_binding");
1498  parm = RNA_def_pointer(
1499  func, "binding", "XrActionMapBinding", "Binding", "Binding to use as a reference");
1501  parm = RNA_def_pointer(
1502  func, "result", "XrActionMapBinding", "Binding", "Added action map binding");
1503  RNA_def_function_return(func, parm);
1504 
1505  func = RNA_def_function(srna, "remove", "rna_XrActionMapBinding_remove");
1507  parm = RNA_def_pointer(func, "binding", "XrActionMapBinding", "Binding", "");
1510 
1511  func = RNA_def_function(srna, "find", "rna_XrActionMapBinding_find");
1512  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
1514  parm = RNA_def_pointer(func,
1515  "binding",
1516  "XrActionMapBinding",
1517  "Binding",
1518  "The action map binding with the given name");
1519  RNA_def_function_return(func, parm);
1520 }
1521 
1523 {
1524  StructRNA *srna;
1525  FunctionRNA *func;
1526  PropertyRNA *parm;
1527 
1528  RNA_def_property_srna(cprop, "XrUserPaths");
1529  srna = RNA_def_struct(brna, "XrUserPaths", NULL);
1530  RNA_def_struct_sdna(srna, "XrActionMapItem");
1531  RNA_def_struct_ui_text(srna, "XR User Paths", "Collection of OpenXR user paths");
1532 
1533  func = RNA_def_function(srna, "new", "rna_XrUserPath_new");
1534  parm = RNA_def_string(func, "path", NULL, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1536  parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "Added user path");
1537  RNA_def_function_return(func, parm);
1538 
1539  func = RNA_def_function(srna, "remove", "rna_XrUserPath_remove");
1540  parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "");
1543 
1544  func = RNA_def_function(srna, "find", "rna_XrUserPath_find");
1545  parm = RNA_def_string(func, "path", NULL, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1547  parm = RNA_def_pointer(
1548  func, "user_path", "XrUserPath", "User Path", "The user path with the given path");
1549  RNA_def_function_return(func, parm);
1550 }
1551 
1553 {
1554  StructRNA *srna;
1555  FunctionRNA *func;
1556  PropertyRNA *parm;
1557 
1558  RNA_def_property_srna(cprop, "XrActionMapItems");
1559  srna = RNA_def_struct(brna, "XrActionMapItems", NULL);
1560  RNA_def_struct_sdna(srna, "XrActionMap");
1561  RNA_def_struct_ui_text(srna, "XR Action Map Items", "Collection of XR action map items");
1562 
1563  func = RNA_def_function(srna, "new", "rna_XrActionMapItem_new");
1564  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name of the action map item", "");
1566  parm = RNA_def_boolean(func,
1567  "replace_existing",
1568  true,
1569  "Replace Existing",
1570  "Replace any existing item with the same name");
1572  parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Added action map item");
1573  RNA_def_function_return(func, parm);
1574 
1575  func = RNA_def_function(srna, "new_from_item", "rna_XrActionMapItem_new_from_item");
1576  parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Item to use as a reference");
1578  parm = RNA_def_pointer(func, "result", "XrActionMapItem", "Item", "Added action map item");
1579  RNA_def_function_return(func, parm);
1580 
1581  func = RNA_def_function(srna, "remove", "rna_XrActionMapItem_remove");
1583  parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "");
1586 
1587  func = RNA_def_function(srna, "find", "rna_XrActionMapItem_find");
1588  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
1590  parm = RNA_def_pointer(
1591  func, "item", "XrActionMapItem", "Item", "The action map item with the given name");
1592  RNA_def_function_return(func, parm);
1593 }
1594 
1596 {
1597  StructRNA *srna;
1598  FunctionRNA *func;
1599  PropertyRNA *parm;
1600 
1601  RNA_def_property_srna(cprop, "XrActionMaps");
1602  srna = RNA_def_struct(brna, "XrActionMaps", NULL);
1603  RNA_def_struct_ui_text(srna, "XR Action Maps", "Collection of XR action maps");
1604 
1605  func = RNA_def_function(srna, "new", "rna_XrActionMap_new");
1607  parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1609  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
1611  parm = RNA_def_boolean(func,
1612  "replace_existing",
1613  true,
1614  "Replace Existing",
1615  "Replace any existing actionmap with the same name");
1617  parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Added action map");
1618  RNA_def_function_return(func, parm);
1619 
1620  func = RNA_def_function(srna, "new_from_actionmap", "rna_XrActionMap_new_from_actionmap");
1622  parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1624  parm = RNA_def_pointer(
1625  func, "actionmap", "XrActionMap", "Action Map", "Action map to use as a reference");
1627  parm = RNA_def_pointer(func, "result", "XrActionMap", "Action Map", "Added action map");
1628  RNA_def_function_return(func, parm);
1629 
1630  func = RNA_def_function(srna, "remove", "rna_XrActionMap_remove");
1632  parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1634  parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Removed action map");
1637 
1638  func = RNA_def_function(srna, "find", "rna_XrActionMap_find");
1640  parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1642  parm = RNA_def_string(func, "name", NULL, MAX_NAME, "Name", "");
1644  parm = RNA_def_pointer(
1645  func, "actionmap", "XrActionMap", "Action Map", "The action map with the given name");
1646  RNA_def_function_return(func, parm);
1647 }
1648 
1650 {
1651  StructRNA *srna;
1652  PropertyRNA *prop;
1653 
1654  /* XrActionMap */
1655  srna = RNA_def_struct(brna, "XrActionMap", NULL);
1656  RNA_def_struct_sdna(srna, "XrActionMap");
1657  RNA_def_struct_ui_text(srna, "XR Action Map", "");
1658 
1659  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1660  RNA_def_property_ui_text(prop, "Name", "Name of the action map");
1661  RNA_def_property_update(prop, 0, "rna_XrActionMap_name_update");
1662  RNA_def_struct_name_property(srna, prop);
1663 
1664  prop = RNA_def_property(srna, "actionmap_items", PROP_COLLECTION, PROP_NONE);
1665  RNA_def_property_collection_sdna(prop, NULL, "items", NULL);
1666  RNA_def_property_struct_type(prop, "XrActionMapItem");
1668  "rna_XrActionMap_items_begin",
1669  "rna_iterator_listbase_next",
1670  "rna_iterator_listbase_end",
1671  "rna_iterator_listbase_get",
1672  "rna_XrActionMap_items_length",
1673  NULL,
1674  NULL,
1675  NULL);
1677  prop,
1678  "Items",
1679  "Items in the action map, mapping an XR event to an operator, pose, or haptic output");
1680  rna_def_xr_actionmap_items(brna, prop);
1681 
1682  prop = RNA_def_property(srna, "selected_item", PROP_INT, PROP_NONE);
1683  RNA_def_property_int_sdna(prop, NULL, "selitem");
1684  RNA_def_property_ui_text(prop, "Selected Item", "");
1685 
1686  /* XrUserPath */
1687  srna = RNA_def_struct(brna, "XrUserPath", NULL);
1688  RNA_def_struct_sdna(srna, "XrUserPath");
1689  RNA_def_struct_ui_text(srna, "XR User Path", "");
1690 
1691  prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1693  RNA_def_property_ui_text(prop, "Path", "OpenXR user path");
1694 
1695  /* XrActionMapItem */
1696  srna = RNA_def_struct(brna, "XrActionMapItem", NULL);
1697  RNA_def_struct_sdna(srna, "XrActionMapItem");
1698  RNA_def_struct_ui_text(srna, "XR Action Map Item", "");
1699 
1700  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1701  RNA_def_property_ui_text(prop, "Name", "Name of the action map item");
1702  RNA_def_property_update(prop, 0, "rna_XrActionMapItem_name_update");
1703  RNA_def_struct_name_property(srna, prop);
1704 
1705  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1707  RNA_def_property_ui_text(prop, "Type", "Action type");
1708  RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1709 
1710  prop = RNA_def_property(srna, "user_paths", PROP_COLLECTION, PROP_NONE);
1711  RNA_def_property_struct_type(prop, "XrUserPath");
1713  "rna_XrActionMapItem_user_paths_begin",
1714  "rna_iterator_listbase_next",
1715  "rna_iterator_listbase_end",
1716  "rna_iterator_listbase_get",
1717  "rna_XrActionMapItem_user_paths_length",
1718  NULL,
1719  NULL,
1720  NULL);
1721  RNA_def_property_ui_text(prop, "User Paths", "OpenXR user paths");
1722  rna_def_xr_user_paths(brna, prop);
1723 
1724  prop = RNA_def_property(srna, "op", PROP_STRING, PROP_NONE);
1726  RNA_def_property_ui_text(prop, "Operator", "Identifier of operator to call on action event");
1727  RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1728 
1729  prop = RNA_def_property(srna, "op_name", PROP_STRING, PROP_NONE);
1732  prop, "Operator Name", "Name of operator (translated) to call on action event");
1734  prop, "rna_XrActionMapItem_op_name_get", "rna_XrActionMapItem_op_name_length", NULL);
1735 
1736  prop = RNA_def_property(srna, "op_properties", PROP_POINTER, PROP_NONE);
1737  RNA_def_property_struct_type(prop, "OperatorProperties");
1738  RNA_def_property_pointer_funcs(prop, "rna_XrActionMapItem_op_properties_get", NULL, NULL, NULL);
1740  prop, "Operator Properties", "Properties to set when the operator is called");
1741  RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1742 
1743  prop = RNA_def_property(srna, "op_mode", PROP_ENUM, PROP_NONE);
1744  RNA_def_property_enum_sdna(prop, NULL, "op_flag");
1746  RNA_def_property_ui_text(prop, "Operator Mode", "Operator execution mode");
1747 
1748  prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
1750  prop, "rna_XrActionMapItem_bimanual_get", "rna_XrActionMapItem_bimanual_set");
1752  prop, "Bimanual", "The action depends on the states/poses of both user paths");
1753 
1754  prop = RNA_def_property(srna, "pose_is_controller_grip", PROP_BOOLEAN, PROP_NONE);
1756  "rna_XrActionMapItem_pose_is_controller_grip_get",
1757  "rna_XrActionMapItem_pose_is_controller_grip_set");
1759  prop, "Is Controller Grip", "The action poses will be used for the VR controller grips");
1760 
1761  prop = RNA_def_property(srna, "pose_is_controller_aim", PROP_BOOLEAN, PROP_NONE);
1763  "rna_XrActionMapItem_pose_is_controller_aim_get",
1764  "rna_XrActionMapItem_pose_is_controller_aim_set");
1766  prop, "Is Controller Aim", "The action poses will be used for the VR controller aims");
1767 
1768  prop = RNA_def_property(srna, "haptic_name", PROP_STRING, PROP_NONE);
1770  prop, "Haptic Name", "Name of the haptic action to apply when executing this action");
1771 
1772  prop = RNA_def_property(srna, "haptic_match_user_paths", PROP_BOOLEAN, PROP_NONE);
1774  "rna_XrActionMapItem_haptic_match_user_paths_get",
1775  "rna_XrActionMapItem_haptic_match_user_paths_set");
1777  prop,
1778  "Haptic Match User Paths",
1779  "Apply haptics to the same user paths for the haptic action and this action");
1780 
1781  prop = RNA_def_property(srna, "haptic_duration", PROP_FLOAT, PROP_NONE);
1782  RNA_def_property_range(prop, 0.0, FLT_MAX);
1784  "Haptic Duration",
1785  "Haptic duration in seconds. 0.0 is the minimum supported duration");
1786 
1787  prop = RNA_def_property(srna, "haptic_frequency", PROP_FLOAT, PROP_NONE);
1788  RNA_def_property_range(prop, 0.0, FLT_MAX);
1790  "Haptic Frequency",
1791  "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
1792  "runtime's default frequency");
1793 
1794  prop = RNA_def_property(srna, "haptic_amplitude", PROP_FLOAT, PROP_NONE);
1795  RNA_def_property_range(prop, 0.0, 1.0);
1797  prop, "Haptic Amplitude", "Intensity of the haptic vibration, ranging from 0.0 to 1.0");
1798 
1799  prop = RNA_def_property(srna, "haptic_mode", PROP_ENUM, PROP_NONE);
1802  prop, "rna_XrActionMapItem_haptic_mode_get", "rna_XrActionMapItem_haptic_mode_set", NULL);
1803  RNA_def_property_ui_text(prop, "Haptic mode", "Haptic application mode");
1804 
1805  prop = RNA_def_property(srna, "bindings", PROP_COLLECTION, PROP_NONE);
1806  RNA_def_property_struct_type(prop, "XrActionMapBinding");
1808  "rna_XrActionMapItem_bindings_begin",
1809  "rna_iterator_listbase_next",
1810  "rna_iterator_listbase_end",
1811  "rna_iterator_listbase_get",
1812  "rna_XrActionMapItem_bindings_length",
1813  NULL,
1814  NULL,
1815  NULL);
1817  prop, "Bindings", "Bindings for the action map item, mapping the action to an XR input");
1818  rna_def_xr_actionmap_bindings(brna, prop);
1819 
1820  prop = RNA_def_property(srna, "selected_binding", PROP_INT, PROP_NONE);
1821  RNA_def_property_int_sdna(prop, NULL, "selbinding");
1822  RNA_def_property_ui_text(prop, "Selected Binding", "Currently selected binding");
1823 
1824  /* XrComponentPath */
1825  srna = RNA_def_struct(brna, "XrComponentPath", NULL);
1826  RNA_def_struct_sdna(srna, "XrComponentPath");
1827  RNA_def_struct_ui_text(srna, "XR Component Path", "");
1828 
1829  prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1831  RNA_def_property_ui_text(prop, "Path", "OpenXR component path");
1832 
1833  /* XrActionMapBinding */
1834  srna = RNA_def_struct(brna, "XrActionMapBinding", NULL);
1835  RNA_def_struct_sdna(srna, "XrActionMapBinding");
1836  RNA_def_struct_ui_text(srna, "XR Action Map Binding", "Binding in an XR action map item");
1837 
1838  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1839  RNA_def_property_ui_text(prop, "Name", "Name of the action map binding");
1840  RNA_def_property_update(prop, 0, "rna_XrActionMapBinding_name_update");
1841  RNA_def_struct_name_property(srna, prop);
1842 
1843  prop = RNA_def_property(srna, "profile", PROP_STRING, PROP_NONE);
1845  RNA_def_property_ui_text(prop, "Profile", "OpenXR interaction profile path");
1846 
1847  prop = RNA_def_property(srna, "component_paths", PROP_COLLECTION, PROP_NONE);
1848  RNA_def_property_struct_type(prop, "XrComponentPath");
1850  "rna_XrActionMapBinding_component_paths_begin",
1851  "rna_iterator_listbase_next",
1852  "rna_iterator_listbase_end",
1853  "rna_iterator_listbase_get",
1854  "rna_XrActionMapBinding_component_paths_length",
1855  NULL,
1856  NULL,
1857  NULL);
1858  RNA_def_property_ui_text(prop, "Component Paths", "OpenXR component paths");
1859  rna_def_xr_component_paths(brna, prop);
1860 
1861  prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
1862  RNA_def_property_float_sdna(prop, NULL, "float_threshold");
1863  RNA_def_property_range(prop, 0.0, 1.0);
1864  RNA_def_property_ui_text(prop, "Threshold", "Input threshold for button/axis actions");
1865 
1866  prop = RNA_def_property(srna, "axis0_region", PROP_ENUM, PROP_NONE);
1869  "rna_XrActionMapBinding_axis0_region_get",
1870  "rna_XrActionMapBinding_axis0_region_set",
1871  NULL);
1873  prop, "Axis 0 Region", "Action execution region for the first input axis");
1874 
1875  prop = RNA_def_property(srna, "axis1_region", PROP_ENUM, PROP_NONE);
1878  "rna_XrActionMapBinding_axis1_region_get",
1879  "rna_XrActionMapBinding_axis1_region_set",
1880  NULL);
1882  prop, "Axis 1 Region", "Action execution region for the second input axis");
1883 
1884  prop = RNA_def_property(srna, "pose_location", PROP_FLOAT, PROP_TRANSLATION);
1885  RNA_def_property_ui_text(prop, "Pose Location Offset", "");
1886 
1887  prop = RNA_def_property(srna, "pose_rotation", PROP_FLOAT, PROP_EULER);
1888  RNA_def_property_ui_text(prop, "Pose Rotation Offset", "");
1889 }
1890 
1893 /* -------------------------------------------------------------------- */
1898 {
1899  StructRNA *srna;
1900  PropertyRNA *prop;
1901 
1902  static const EnumPropertyItem base_pose_types[] = {
1904  "SCENE_CAMERA",
1905  0,
1906  "Scene Camera",
1907  "Follow the active scene camera to define the VR view's base pose"},
1909  "OBJECT",
1910  0,
1911  "Object",
1912  "Follow the transformation of an object to define the VR view's base pose"},
1914  "CUSTOM",
1915  0,
1916  "Custom",
1917  "Follow a custom transformation to define the VR view's base pose"},
1918  {0, NULL, 0, NULL, NULL},
1919  };
1920 
1921  static const EnumPropertyItem controller_draw_styles[] = {
1922  {XR_CONTROLLER_DRAW_DARK, "DARK", 0, "Dark", "Draw dark controller"},
1923  {XR_CONTROLLER_DRAW_LIGHT, "LIGHT", 0, "Light", "Draw light controller"},
1925  "DARK_RAY",
1926  0,
1927  "Dark + Ray",
1928  "Draw dark controller with aiming axis ray"},
1930  "LIGHT_RAY",
1931  0,
1932  "Light + Ray",
1933  "Draw light controller with aiming axis ray"},
1934  {0, NULL, 0, NULL, NULL},
1935  };
1936 
1937  srna = RNA_def_struct(brna, "XrSessionSettings", NULL);
1938  RNA_def_struct_ui_text(srna, "XR Session Settings", "");
1939 
1940  prop = RNA_def_property(srna, "shading", PROP_POINTER, PROP_NONE);
1942  RNA_def_property_ui_text(prop, "Shading Settings", "");
1944 
1945  prop = RNA_def_property(srna, "base_pose_type", PROP_ENUM, PROP_NONE);
1947  RNA_def_property_enum_items(prop, base_pose_types);
1949  prop,
1950  "Base Pose Type",
1951  "Define where the location and rotation for the VR view come from, to which "
1952  "translation and rotation deltas from the VR headset will be applied to");
1954 
1955  prop = RNA_def_property(srna, "base_pose_object", PROP_POINTER, PROP_NONE);
1958  "Base Pose Object",
1959  "Object to take the location and rotation to which translation and "
1960  "rotation deltas from the VR headset will be applied to");
1962 
1963  prop = RNA_def_property(srna, "base_pose_location", PROP_FLOAT, PROP_TRANSLATION);
1965  "Base Pose Location",
1966  "Coordinates to apply translation deltas from the VR headset to");
1967  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1969 
1970  prop = RNA_def_property(srna, "base_pose_angle", PROP_FLOAT, PROP_AXISANGLE);
1972  prop,
1973  "Base Pose Angle",
1974  "Rotation angle around the Z-Axis to apply the rotation deltas from the VR headset to");
1976 
1977  prop = RNA_def_property(srna, "base_scale", PROP_FLOAT, PROP_NONE);
1978  RNA_def_property_ui_text(prop, "Base Scale", "Uniform scale to apply to VR view");
1979  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
1980  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
1981  RNA_def_property_float_default(prop, 1.0f);
1983 
1984  prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
1986  RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid");
1988 
1989  prop = RNA_def_property(srna, "show_annotation", PROP_BOOLEAN, PROP_NONE);
1991  RNA_def_property_ui_text(prop, "Show Annotation", "Show annotations for this view");
1993 
1994  prop = RNA_def_property(srna, "show_selection", PROP_BOOLEAN, PROP_NONE);
1996  RNA_def_property_ui_text(prop, "Show Selection", "Show selection outlines");
1998 
1999  prop = RNA_def_property(srna, "show_controllers", PROP_BOOLEAN, PROP_NONE);
2002  prop, "Show Controllers", "Show VR controllers (requires VR actions for controller poses)");
2004 
2005  prop = RNA_def_property(srna, "show_custom_overlays", PROP_BOOLEAN, PROP_NONE);
2007  RNA_def_property_ui_text(prop, "Show Custom Overlays", "Show custom VR overlays");
2009 
2010  prop = RNA_def_property(srna, "show_object_extras", PROP_BOOLEAN, PROP_NONE);
2013  prop, "Show Object Extras", "Show object extras, including empties, lights, and cameras");
2015 
2016  prop = RNA_def_property(srna, "controller_draw_style", PROP_ENUM, PROP_NONE);
2018  RNA_def_property_enum_items(prop, controller_draw_styles);
2020  prop, "Controller Draw Style", "Style to use when drawing VR controllers");
2022 
2023  prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
2024  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2025  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
2026  RNA_def_property_ui_text(prop, "Clip Start", "VR viewport near clipping distance");
2028 
2029  prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
2030  RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2031  RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
2032  RNA_def_property_ui_text(prop, "Clip End", "VR viewport far clipping distance");
2034 
2035  prop = RNA_def_property(srna, "use_positional_tracking", PROP_BOOLEAN, PROP_NONE);
2037  "rna_XrSessionSettings_use_positional_tracking_get",
2038  "rna_XrSessionSettings_use_positional_tracking_set");
2040  prop,
2041  "Positional Tracking",
2042  "Allow VR headsets to affect the location in virtual space, in addition to the rotation");
2044 
2045  prop = RNA_def_property(srna, "use_absolute_tracking", PROP_BOOLEAN, PROP_NONE);
2047  "rna_XrSessionSettings_use_absolute_tracking_get",
2048  "rna_XrSessionSettings_use_absolute_tracking_set");
2050  prop,
2051  "Absolute Tracking",
2052  "Allow the VR tracking origin to be defined independently of the headset location");
2054 
2056 
2057  /* Helper for drawing the icon. */
2058  prop = RNA_def_property(srna, "icon_from_show_object_viewport", PROP_INT, PROP_NONE);
2060  prop, "rna_XrSessionSettings_icon_from_show_object_viewport_get", NULL, NULL);
2062  RNA_def_property_ui_text(prop, "Visibility Icon", "");
2063 }
2064 
2067 /* -------------------------------------------------------------------- */
2072 {
2073  StructRNA *srna;
2074  FunctionRNA *func;
2075  PropertyRNA *parm, *prop;
2076 
2077  srna = RNA_def_struct(brna, "XrSessionState", NULL);
2079  RNA_def_struct_ui_text(srna, "Session State", "Runtime state information about the VR session");
2080 
2081  func = RNA_def_function(srna, "is_running", "rna_XrSessionState_is_running");
2082  RNA_def_function_ui_description(func, "Query if the VR session is currently running");
2084  parm = RNA_def_pointer(func, "context", "Context", "", "");
2086  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2087  RNA_def_function_return(func, parm);
2088 
2089  func = RNA_def_function(srna, "reset_to_base_pose", "rna_XrSessionState_reset_to_base_pose");
2090  RNA_def_function_ui_description(func, "Force resetting of position and rotation deltas");
2092  parm = RNA_def_pointer(func, "context", "Context", "", "");
2094 
2095  func = RNA_def_function(srna, "action_set_create", "rna_XrSessionState_action_set_create");
2096  RNA_def_function_ui_description(func, "Create a VR action set");
2098  parm = RNA_def_pointer(func, "context", "Context", "", "");
2100  parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2102  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2103  RNA_def_function_return(func, parm);
2104 
2105  func = RNA_def_function(srna, "action_create", "rna_XrSessionState_action_create");
2106  RNA_def_function_ui_description(func, "Create a VR action");
2108  parm = RNA_def_pointer(func, "context", "Context", "", "");
2110  parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2112  parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2114  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2115  RNA_def_function_return(func, parm);
2116 
2117  func = RNA_def_function(
2118  srna, "action_binding_create", "rna_XrSessionState_action_binding_create");
2119  RNA_def_function_ui_description(func, "Create a VR action binding");
2121  parm = RNA_def_pointer(func, "context", "Context", "", "");
2123  parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2125  parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2127  parm = RNA_def_pointer(func, "actionmap_binding", "XrActionMapBinding", "", "");
2129  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2130  RNA_def_function_return(func, parm);
2131 
2132  func = RNA_def_function(
2133  srna, "active_action_set_set", "rna_XrSessionState_active_action_set_set");
2134  RNA_def_function_ui_description(func, "Set the active VR action set");
2136  parm = RNA_def_pointer(func, "context", "Context", "", "");
2138  parm = RNA_def_string(func, "action_set", NULL, MAX_NAME, "Action Set", "Action set name");
2140  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2141  RNA_def_function_return(func, parm);
2142 
2143  func = RNA_def_function(
2144  srna, "controller_pose_actions_set", "rna_XrSessionState_controller_pose_actions_set");
2145  RNA_def_function_ui_description(func, "Set the actions that determine the VR controller poses");
2147  parm = RNA_def_pointer(func, "context", "Context", "", "");
2149  parm = RNA_def_string(func, "action_set", NULL, MAX_NAME, "Action Set", "Action set name");
2151  parm = RNA_def_string(func,
2152  "grip_action",
2153  NULL,
2154  MAX_NAME,
2155  "Grip Action",
2156  "Name of the action representing the controller grips");
2158  parm = RNA_def_string(func,
2159  "aim_action",
2160  NULL,
2161  MAX_NAME,
2162  "Aim Action",
2163  "Name of the action representing the controller aims");
2165  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2166  RNA_def_function_return(func, parm);
2167 
2168  func = RNA_def_function(srna, "action_state_get", "rna_XrSessionState_action_state_get");
2169  RNA_def_function_ui_description(func, "Get the current state of a VR action");
2171  parm = RNA_def_pointer(func, "context", "Context", "", "");
2173  parm = RNA_def_string(func, "action_set_name", NULL, MAX_NAME, "Action Set", "Action set name");
2175  parm = RNA_def_string(func, "action_name", NULL, MAX_NAME, "Action", "Action name");
2177  parm = RNA_def_string(
2178  func, "user_path", NULL, XR_MAX_USER_PATH_LENGTH, "User Path", "OpenXR user path");
2180  parm = RNA_def_float_array(
2181  func,
2182  "state",
2183  2,
2184  NULL,
2185  -FLT_MAX,
2186  FLT_MAX,
2187  "Action State",
2188  "Current state of the VR action. Second float value is only set for 2D vector type actions",
2189  -FLT_MAX,
2190  FLT_MAX);
2192 
2193  func = RNA_def_function(srna, "haptic_action_apply", "rna_XrSessionState_haptic_action_apply");
2194  RNA_def_function_ui_description(func, "Apply a VR haptic action");
2196  parm = RNA_def_pointer(func, "context", "Context", "", "");
2198  parm = RNA_def_string(func, "action_set_name", NULL, MAX_NAME, "Action Set", "Action set name");
2200  parm = RNA_def_string(func, "action_name", NULL, MAX_NAME, "Action", "Action name");
2202  parm = RNA_def_string(
2203  func,
2204  "user_path",
2205  NULL,
2207  "User Path",
2208  "Optional OpenXR user path. If not set, the action will be applied to all paths");
2210  parm = RNA_def_float(func,
2211  "duration",
2212  0.0f,
2213  0.0f,
2214  FLT_MAX,
2215  "Duration",
2216  "Haptic duration in seconds. 0.0 is the minimum supported duration",
2217  0.0f,
2218  FLT_MAX);
2220  parm = RNA_def_float(func,
2221  "frequency",
2222  0.0f,
2223  0.0f,
2224  FLT_MAX,
2225  "Frequency",
2226  "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
2227  "runtime's default frequency",
2228  0.0f,
2229  FLT_MAX);
2231  parm = RNA_def_float(func,
2232  "amplitude",
2233  1.0f,
2234  0.0f,
2235  1.0f,
2236  "Amplitude",
2237  "Haptic amplitude, ranging from 0.0 to 1.0",
2238  0.0f,
2239  1.0f);
2241  parm = RNA_def_boolean(func, "result", 0, "Result", "");
2242  RNA_def_function_return(func, parm);
2243 
2244  func = RNA_def_function(srna, "haptic_action_stop", "rna_XrSessionState_haptic_action_stop");
2245  RNA_def_function_ui_description(func, "Stop a VR haptic action");
2247  parm = RNA_def_pointer(func, "context", "Context", "", "");
2249  parm = RNA_def_string(func, "action_set_name", NULL, MAX_NAME, "Action Set", "Action set name");
2251  parm = RNA_def_string(func, "action_name", NULL, MAX_NAME, "Action", "Action name");
2253  parm = RNA_def_string(
2254  func,
2255  "user_path",
2256  NULL,
2258  "User Path",
2259  "Optional OpenXR user path. If not set, the action will be stopped for all paths");
2261 
2262  func = RNA_def_function(
2263  srna, "controller_grip_location_get", "rna_XrSessionState_controller_grip_location_get");
2265  "Get the last known controller grip location in world space");
2267  parm = RNA_def_pointer(func, "context", "Context", "", "");
2269  parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2271  parm = RNA_def_float_translation(func,
2272  "location",
2273  3,
2274  NULL,
2275  -FLT_MAX,
2276  FLT_MAX,
2277  "Location",
2278  "Controller grip location",
2279  -FLT_MAX,
2280  FLT_MAX);
2282 
2283  func = RNA_def_function(
2284  srna, "controller_grip_rotation_get", "rna_XrSessionState_controller_grip_rotation_get");
2286  func, "Get the last known controller grip rotation (quaternion) in world space");
2288  parm = RNA_def_pointer(func, "context", "Context", "", "");
2290  parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2292  parm = RNA_def_float_vector(func,
2293  "rotation",
2294  4,
2295  NULL,
2296  -FLT_MAX,
2297  FLT_MAX,
2298  "Rotation",
2299  "Controller grip quaternion rotation",
2300  -FLT_MAX,
2301  FLT_MAX);
2302  parm->subtype = PROP_QUATERNION;
2303  RNA_def_property_ui_range(parm, -FLT_MAX, FLT_MAX, 1, 5);
2305 
2306  func = RNA_def_function(
2307  srna, "controller_aim_location_get", "rna_XrSessionState_controller_aim_location_get");
2309  "Get the last known controller aim location in world space");
2311  parm = RNA_def_pointer(func, "context", "Context", "", "");
2313  parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2315  parm = RNA_def_float_translation(func,
2316  "location",
2317  3,
2318  NULL,
2319  -FLT_MAX,
2320  FLT_MAX,
2321  "Location",
2322  "Controller aim location",
2323  -FLT_MAX,
2324  FLT_MAX);
2326 
2327  func = RNA_def_function(
2328  srna, "controller_aim_rotation_get", "rna_XrSessionState_controller_aim_rotation_get");
2330  func, "Get the last known controller aim rotation (quaternion) in world space");
2332  parm = RNA_def_pointer(func, "context", "Context", "", "");
2334  parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2336  parm = RNA_def_float_vector(func,
2337  "rotation",
2338  4,
2339  NULL,
2340  -FLT_MAX,
2341  FLT_MAX,
2342  "Rotation",
2343  "Controller aim quaternion rotation",
2344  -FLT_MAX,
2345  FLT_MAX);
2346  parm->subtype = PROP_QUATERNION;
2347  RNA_def_property_ui_range(parm, -FLT_MAX, FLT_MAX, 1, 5);
2349 
2350  prop = RNA_def_property(srna, "viewer_pose_location", PROP_FLOAT, PROP_TRANSLATION);
2351  RNA_def_property_array(prop, 3);
2352  RNA_def_property_float_funcs(prop, "rna_XrSessionState_viewer_pose_location_get", NULL, NULL);
2355  prop,
2356  "Viewer Pose Location",
2357  "Last known location of the viewer pose (center between the eyes) in world space");
2358 
2359  prop = RNA_def_property(srna, "viewer_pose_rotation", PROP_FLOAT, PROP_QUATERNION);
2360  RNA_def_property_array(prop, 4);
2361  RNA_def_property_float_funcs(prop, "rna_XrSessionState_viewer_pose_rotation_get", NULL, NULL);
2364  prop,
2365  "Viewer Pose Rotation",
2366  "Last known rotation of the viewer pose (center between the eyes) in world space");
2367 
2368  prop = RNA_def_property(srna, "navigation_location", PROP_FLOAT, PROP_TRANSLATION);
2369  RNA_def_property_array(prop, 3);
2371  prop, "rna_XrSessionState_nav_location_get", "rna_XrSessionState_nav_location_set", NULL);
2373  prop,
2374  "Navigation Location",
2375  "Location offset to apply to base pose when determining viewer location");
2376 
2377  prop = RNA_def_property(srna, "navigation_rotation", PROP_FLOAT, PROP_QUATERNION);
2378  RNA_def_property_array(prop, 4);
2380  prop, "rna_XrSessionState_nav_rotation_get", "rna_XrSessionState_nav_rotation_set", NULL);
2382  prop,
2383  "Navigation Rotation",
2384  "Rotation offset to apply to base pose when determining viewer rotation");
2385 
2386  prop = RNA_def_property(srna, "navigation_scale", PROP_FLOAT, PROP_NONE);
2388  prop, "rna_XrSessionState_nav_scale_get", "rna_XrSessionState_nav_scale_set", NULL);
2390  prop,
2391  "Navigation Scale",
2392  "Additional scale multiplier to apply to base scale when determining viewer scale");
2393 
2394  prop = RNA_def_property(srna, "actionmaps", PROP_COLLECTION, PROP_NONE);
2395  RNA_def_property_struct_type(prop, "XrActionMap");
2397  "rna_XrSessionState_actionmaps_begin",
2398  "rna_iterator_listbase_next",
2399  "rna_iterator_listbase_end",
2400  "rna_iterator_listbase_get",
2401  "rna_XrSessionState_actionmaps_length",
2402  NULL,
2403  NULL,
2404  NULL);
2405  RNA_def_property_ui_text(prop, "XR Action Maps", "");
2406  rna_def_xr_actionmaps(brna, prop);
2407 
2408  prop = RNA_def_property(srna, "active_actionmap", PROP_INT, PROP_NONE);
2410  "rna_XrSessionState_active_actionmap_get",
2411  "rna_XrSessionState_active_actionmap_set",
2412  NULL);
2413  RNA_def_property_ui_text(prop, "Active Action Map", "");
2414 
2415  prop = RNA_def_property(srna, "selected_actionmap", PROP_INT, PROP_NONE);
2417  "rna_XrSessionState_selected_actionmap_get",
2418  "rna_XrSessionState_selected_actionmap_set",
2419  NULL);
2420  RNA_def_property_ui_text(prop, "Selected Action Map", "");
2421 }
2422 
2425 /* -------------------------------------------------------------------- */
2430 {
2431  StructRNA *srna;
2432  PropertyRNA *prop;
2433 
2434  srna = RNA_def_struct(brna, "XrEventData", NULL);
2435  RNA_def_struct_ui_text(srna, "XrEventData", "XR Data for Window Manager Event");
2436 
2437  prop = RNA_def_property(srna, "action_set", PROP_STRING, PROP_NONE);
2440  prop, "rna_XrEventData_action_set_get", "rna_XrEventData_action_set_length", NULL);
2441  RNA_def_property_ui_text(prop, "Action Set", "XR action set name");
2442 
2443  prop = RNA_def_property(srna, "action", PROP_STRING, PROP_NONE);
2446  prop, "rna_XrEventData_action_get", "rna_XrEventData_action_length", NULL);
2447  RNA_def_property_ui_text(prop, "Action", "XR action name");
2448 
2449  prop = RNA_def_property(srna, "user_path", PROP_STRING, PROP_NONE);
2452  prop, "rna_XrEventData_user_path_get", "rna_XrEventData_user_path_length", NULL);
2453  RNA_def_property_ui_text(prop, "User Path", "User path of the action. E.g. \"/user/hand/left\"");
2454 
2455  prop = RNA_def_property(srna, "user_path_other", PROP_STRING, PROP_NONE);
2458  prop, "rna_XrEventData_user_path_other_get", "rna_XrEventData_user_path_other_length", NULL);
2460  prop, "User Path Other", "Other user path, for bimanual actions. E.g. \"/user/hand/right\"");
2461 
2462  prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2465  RNA_def_property_enum_funcs(prop, "rna_XrEventData_type_get", NULL, NULL);
2466  RNA_def_property_ui_text(prop, "Type", "XR action type");
2467 
2468  prop = RNA_def_property(srna, "state", PROP_FLOAT, PROP_NONE);
2469  RNA_def_property_array(prop, 2);
2471  RNA_def_property_float_funcs(prop, "rna_XrEventData_state_get", NULL, NULL);
2472  RNA_def_property_ui_text(prop, "State", "XR action values corresponding to type");
2473 
2474  prop = RNA_def_property(srna, "state_other", PROP_FLOAT, PROP_NONE);
2475  RNA_def_property_array(prop, 2);
2477  RNA_def_property_float_funcs(prop, "rna_XrEventData_state_other_get", NULL, NULL);
2479  prop, "State Other", "State of the other user path for bimanual actions");
2480 
2481  prop = RNA_def_property(srna, "float_threshold", PROP_FLOAT, PROP_NONE);
2483  RNA_def_property_float_funcs(prop, "rna_XrEventData_float_threshold_get", NULL, NULL);
2484  RNA_def_property_ui_text(prop, "Float Threshold", "Input threshold for float/2D vector actions");
2485 
2486  prop = RNA_def_property(srna, "controller_location", PROP_FLOAT, PROP_TRANSLATION);
2487  RNA_def_property_array(prop, 3);
2489  RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_location_get", NULL, NULL);
2491  "Controller Location",
2492  "Location of the action's corresponding controller aim in world space");
2493 
2494  prop = RNA_def_property(srna, "controller_rotation", PROP_FLOAT, PROP_QUATERNION);
2495  RNA_def_property_array(prop, 4);
2497  RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_rotation_get", NULL, NULL);
2499  "Controller Rotation",
2500  "Rotation of the action's corresponding controller aim in world space");
2501 
2502  prop = RNA_def_property(srna, "controller_location_other", PROP_FLOAT, PROP_TRANSLATION);
2503  RNA_def_property_array(prop, 3);
2505  RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_location_other_get", NULL, NULL);
2507  "Controller Location Other",
2508  "Controller aim location of the other user path for bimanual actions");
2509 
2510  prop = RNA_def_property(srna, "controller_rotation_other", PROP_FLOAT, PROP_QUATERNION);
2511  RNA_def_property_array(prop, 4);
2513  RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_rotation_other_get", NULL, NULL);
2515  "Controller Rotation Other",
2516  "Controller aim rotation of the other user path for bimanual actions");
2517 
2518  prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
2520  RNA_def_property_boolean_funcs(prop, "rna_XrEventData_bimanual_get", NULL);
2521  RNA_def_property_ui_text(prop, "Bimanual", "Whether bimanual interaction is occurring");
2522 }
2523 
2527 {
2528  RNA_define_animate_sdna(false);
2529 
2530  rna_def_xr_actionmap(brna);
2533  rna_def_xr_eventdata(brna);
2534 
2536 }
2537 
2538 #endif /* RNA_RUNTIME */
typedef float(TangentPoint)[2]
struct wmWindowManager * CTX_wm_manager(const bContext *C)
Definition: context.c:713
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert_unreachable()
Definition: BLI_assert.h:93
#define BLI_assert(a)
Definition: BLI_assert.h:46
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
Definition: BLI_listbase.h:269
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:239
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition: listbase.c:80
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
float normalize_qt(float q[4])
void unit_qt(float q[4])
Definition: math_rotation.c:27
void eul_to_quat(float quat[4], const float eul[3])
void copy_qt_qt(float q[4], const float a[4])
Definition: math_rotation.c:33
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v2(float r[2])
MINLINE void zero_v3(float r[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
Definition: string.c:64
#define UNUSED_VARS(...)
#define UNUSED(x)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define ELEM(...)
@ ID_WM
Definition: DNA_ID_enums.h:72
#define MAX_NAME
Definition: DNA_defs.h:48
@ V3D_OFSDRAW_SHOW_OBJECT_EXTRAS
@ V3D_OFSDRAW_XR_SHOW_CUSTOM_OVERLAYS
@ V3D_OFSDRAW_SHOW_GRIDFLOOR
@ V3D_OFSDRAW_SHOW_ANNOTATION
@ V3D_OFSDRAW_SHOW_SELECTION
@ V3D_OFSDRAW_XR_SHOW_CONTROLLERS
#define OP_MAX_TYPENAME
@ XR_OP_MODAL
Definition: DNA_xr_types.h:76
@ XR_OP_RELEASE
Definition: DNA_xr_types.h:75
@ XR_OP_PRESS
Definition: DNA_xr_types.h:74
@ XR_POSE_GRIP
Definition: DNA_xr_types.h:109
@ XR_POSE_AIM
Definition: DNA_xr_types.h:110
eXrAxisFlag
Definition: DNA_xr_types.h:100
@ XR_AXIS0_POS
Definition: DNA_xr_types.h:101
@ XR_AXIS1_NEG
Definition: DNA_xr_types.h:104
@ XR_AXIS1_POS
Definition: DNA_xr_types.h:103
@ XR_AXIS0_NEG
Definition: DNA_xr_types.h:102
@ XR_SESSION_USE_ABSOLUTE_TRACKING
Definition: DNA_xr_types.h:47
@ XR_SESSION_USE_POSITION_TRACKING
Definition: DNA_xr_types.h:46
@ XR_CONTROLLER_DRAW_LIGHT_RAY
Definition: DNA_xr_types.h:60
@ XR_CONTROLLER_DRAW_LIGHT
Definition: DNA_xr_types.h:58
@ XR_CONTROLLER_DRAW_DARK_RAY
Definition: DNA_xr_types.h:59
@ XR_CONTROLLER_DRAW_DARK
Definition: DNA_xr_types.h:57
#define XR_MAX_USER_PATH_LENGTH
Definition: DNA_xr_types.h:120
#define XR_MAX_COMPONENT_PATH_LENGTH
Definition: DNA_xr_types.h:121
@ XR_FLOAT_INPUT
Definition: DNA_xr_types.h:66
@ XR_BOOLEAN_INPUT
Definition: DNA_xr_types.h:65
@ XR_VECTOR2F_INPUT
Definition: DNA_xr_types.h:67
@ XR_POSE_INPUT
Definition: DNA_xr_types.h:68
@ XR_VIBRATION_OUTPUT
Definition: DNA_xr_types.h:69
@ XR_BASE_POSE_CUSTOM
Definition: DNA_xr_types.h:53
@ XR_BASE_POSE_SCENE_CAMERA
Definition: DNA_xr_types.h:51
@ XR_BASE_POSE_OBJECT
Definition: DNA_xr_types.h:52
@ XR_ACTION_BIMANUAL
Definition: DNA_xr_types.h:81
@ XR_HAPTIC_PRESS
Definition: DNA_xr_types.h:91
@ XR_HAPTIC_RELEASE
Definition: DNA_xr_types.h:92
@ XR_HAPTIC_MATCHUSERPATHS
Definition: DNA_xr_types.h:86
@ XR_HAPTIC_REPEAT
Definition: DNA_xr_types.h:93
#define RNA_POINTER_INVALIDATE(ptr)
Definition: RNA_access.h:744
@ PARM_RNAPTR
Definition: RNA_types.h:354
@ PARM_REQUIRED
Definition: RNA_types.h:352
@ PARM_OUTPUT
Definition: RNA_types.h:353
@ FUNC_USE_REPORTS
Definition: RNA_types.h:663
@ FUNC_NO_SELF
Definition: RNA_types.h:656
@ STRUCT_UNDO
Definition: RNA_types.h:708
@ PROP_FLOAT
Definition: RNA_types.h:61
@ PROP_BOOLEAN
Definition: RNA_types.h:59
@ PROP_ENUM
Definition: RNA_types.h:63
@ PROP_INT
Definition: RNA_types.h:60
@ PROP_STRING
Definition: RNA_types.h:62
@ PROP_POINTER
Definition: RNA_types.h:64
@ PROP_COLLECTION
Definition: RNA_types.h:65
#define RNA_TRANSLATION_PREC_DEFAULT
Definition: RNA_types.h:117
@ PROP_THICK_WRAP
Definition: RNA_types.h:285
@ PROP_ANIMATABLE
Definition: RNA_types.h:202
@ PROP_EDITABLE
Definition: RNA_types.h:189
@ PROP_NEVER_NULL
Definition: RNA_types.h:239
@ PROP_DISTANCE
Definition: RNA_types.h:149
@ PROP_AXISANGLE
Definition: RNA_types.h:161
@ PROP_EULER
Definition: RNA_types.h:159
@ PROP_NONE
Definition: RNA_types.h:126
@ PROP_TRANSLATION
Definition: RNA_types.h:154
@ PROP_QUATERNION
Definition: RNA_types.h:160
#define C
Definition: RandGen.cpp:25
#define NC_WM
Definition: WM_types.h:324
#define ND_XR_DATA_CHANGED
Definition: WM_types.h:366
Scene scene
#define GS(x)
Definition: iris.c:225
const int state
void *(* MEM_callocN)(size_t len, const char *str)
Definition: mallocn.c:31
const PointerRNA PointerRNA_NULL
Definition: rna_access.c:61
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
Definition: rna_access.c:4729
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3836
void RNA_define_animate_sdna(bool animate)
Definition: rna_define.c:748
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3493
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
Definition: rna_define.c:4170
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2236
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1526
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3285
void RNA_def_property_float_default(PropertyRNA *prop, float value)
Definition: rna_define.c:2022
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
Definition: rna_define.c:4312
PropertyRNA * RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:4076
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3126
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1645
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
Definition: rna_define.c:4273
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
Definition: rna_define.c:3474
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
Definition: rna_define.c:3420
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1237
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
Definition: rna_define.c:2944
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3862
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1872
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1048
void RNA_def_struct_clear_flag(StructRNA *srna, int flag)
Definition: rna_define.c:1138
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1539
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1737
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
Definition: rna_define.c:1920
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
Definition: rna_define.c:1772
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
Definition: rna_define.c:2769
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
Definition: rna_define.c:4347
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2900
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
Definition: rna_define.c:3224
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1257
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
Definition: rna_define.c:1103
void RNA_def_function_flag(FunctionRNA *func, int flag)
Definition: rna_define.c:4342
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1495
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
Definition: rna_define.c:3385
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1028
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2601
PropertyRNA * RNA_def_float_translation(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3986
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3028
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3687
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1490
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
Definition: rna_define.c:3597
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2493
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1664
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2343
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1518
void rna_def_object_type_visibility_flags_common(StructRNA *srna, int noteflag)
int rna_object_type_visibility_icon_get_common(int object_type_exclude_viewport, const int *object_type_exclude_select)
static void rna_def_xr_session_settings(BlenderRNA *brna)
Definition: rna_xr.c:1897
static const EnumPropertyItem rna_enum_xr_haptic_flags[]
Definition: rna_xr.c:1387
static void rna_def_xr_actionmap_bindings(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_xr.c:1473
static void rna_def_xr_session_state(BlenderRNA *brna)
Definition: rna_xr.c:2071
static void rna_def_xr_user_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_xr.c:1522
static const EnumPropertyItem rna_enum_xr_axis0_flags[]
Definition: rna_xr.c:1403
static const EnumPropertyItem rna_enum_xr_axis1_flags[]
Definition: rna_xr.c:1418
static void rna_def_xr_component_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_xr.c:1437
static void rna_def_xr_actionmap(BlenderRNA *brna)
Definition: rna_xr.c:1649
static const EnumPropertyItem rna_enum_xr_action_types[]
Definition: rna_xr.c:1348
static void rna_def_xr_actionmap_items(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_xr.c:1552
static const EnumPropertyItem rna_enum_xr_op_flags[]
Definition: rna_xr.c:1372
static void rna_def_xr_actionmaps(BlenderRNA *brna, PropertyRNA *cprop)
Definition: rna_xr.c:1595
static void rna_def_xr_eventdata(BlenderRNA *brna)
Definition: rna_xr.c:2429
void RNA_def_xr(BlenderRNA *brna)
Definition: rna_xr.c:2526
__int64 int64_t
Definition: stdint.h:89
char name[66]
Definition: DNA_ID.h:378
void * first
Definition: DNA_listBase.h:31
Definition: BKE_main.h:121
ListBase wm
Definition: BKE_main.h:197
struct StructRNA * type
Definition: RNA_types.h:37
void * data
Definition: RNA_types.h:38
struct ID * owner_id
Definition: RNA_types.h:36
PropertySubType subtype
float pose_location[3]
Definition: DNA_xr_types.h:147
ListBase component_paths
Definition: DNA_xr_types.h:139
float pose_rotation[3]
Definition: DNA_xr_types.h:148
ListBase bindings
Definition: DNA_xr_types.h:192
float haptic_amplitude
Definition: DNA_xr_types.h:188
float haptic_frequency
Definition: DNA_xr_types.h:187
IDProperty * op_properties
Definition: DNA_xr_types.h:173
char haptic_name[64]
Definition: DNA_xr_types.h:185
ListBase user_paths
Definition: DNA_xr_types.h:168
struct PointerRNA * op_properties_ptr
Definition: DNA_xr_types.h:175
ListBase items
Definition: DNA_xr_types.h:203
char name[64]
Definition: DNA_xr_types.h:201
char path[192]
Definition: DNA_xr_types.h:127
int object_type_exclude_select
Definition: DNA_xr_types.h:42
int object_type_exclude_viewport
Definition: DNA_xr_types.h:41
char path[64]
Definition: DNA_xr_types.h:155
XrSessionSettings session_settings
struct wmXrRuntimeData * runtime
PointerRNA * ptr
Definition: wm_files.c:3480
wmOperatorType * ot
Definition: wm_files.c:3479
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
const char * WM_operatortype_name(struct wmOperatorType *ot, struct PointerRNA *properties)
size_t WM_operator_bl_idname(char *dst, const char *src)
Definition: wm_operators.c:128
bool WM_xr_action_state_get(const wmXrData *xr, const char *action_set_name, const char *action_name, const char *subaction_path, wmXrActionState *r_state)
Definition: wm_xr_action.c:472
bool WM_xr_action_binding_create(wmXrData *xr, const char *action_set_name, const char *action_name, const char *profile_path, const ListBase *user_paths, const ListBase *component_paths, const float *float_thresholds, const eXrAxisFlag *axis_flags, const struct wmXrPose *poses)
Definition: wm_xr_action.c:329
void WM_xr_haptic_action_stop(wmXrData *xr, const char *action_set_name, const char *action_name, const char *subaction_path)
Definition: wm_xr_action.c:534
bool WM_xr_action_set_create(wmXrData *xr, const char *action_set_name)
Definition: wm_xr_action.c:167
bool WM_xr_action_create(wmXrData *xr, const char *action_set_name, const char *action_name, eXrActionType type, const ListBase *user_paths, wmOperatorType *ot, IDProperty *op_properties, const char *haptic_name, const int64_t *haptic_duration, const float *haptic_frequency, const float *haptic_amplitude, eXrOpFlag op_flag, eXrActionFlag action_flag, eXrHapticFlag haptic_flag)
Definition: wm_xr_action.c:212
bool WM_xr_controller_pose_actions_set(wmXrData *xr, const char *action_set_name, const char *grip_action_name, const char *aim_action_name)
Definition: wm_xr_action.c:430
bool WM_xr_haptic_action_apply(wmXrData *xr, const char *action_set_name, const char *action_name, const char *subaction_path, const int64_t *duration, const float *frequency, const float *amplitude)
Definition: wm_xr_action.c:515
bool WM_xr_active_action_set_set(wmXrData *xr, const char *action_set_name, bool delayed)
Definition: wm_xr_action.c:394
short WM_xr_actionmap_active_index_get(const wmXrRuntimeData *runtime)
void WM_xr_actionmap_ensure_unique(wmXrRuntimeData *runtime, XrActionMap *actionmap)
void WM_xr_actionmap_selected_index_set(wmXrRuntimeData *runtime, short idx)
XrActionMap * WM_xr_actionmap_new(wmXrRuntimeData *runtime, const char *name, bool replace_existing)
XrActionMapBinding * WM_xr_actionmap_binding_add_copy(XrActionMapItem *ami, XrActionMapBinding *amb_src)
XrActionMapBinding * WM_xr_actionmap_binding_new(XrActionMapItem *ami, const char *name, bool replace_existing)
void WM_xr_actionmap_active_index_set(wmXrRuntimeData *runtime, short idx)
short WM_xr_actionmap_selected_index_get(const wmXrRuntimeData *runtime)
XrActionMap * WM_xr_actionmap_find(wmXrRuntimeData *runtime, const char *name)
XrActionMapItem * WM_xr_actionmap_item_find(XrActionMap *actionmap, const char *name)
XrActionMapBinding * WM_xr_actionmap_binding_find(XrActionMapItem *ami, const char *name)
XrActionMapItem * WM_xr_actionmap_item_new(XrActionMap *actionmap, const char *name, bool replace_existing)
XrActionMapItem * WM_xr_actionmap_item_add_copy(XrActionMap *actionmap, XrActionMapItem *ami_src)
XrActionMap * WM_xr_actionmap_add_copy(wmXrRuntimeData *runtime, XrActionMap *am_src)
void WM_xr_actionmap_item_ensure_unique(XrActionMap *actionmap, XrActionMapItem *ami)
bool WM_xr_actionmap_binding_remove(XrActionMapItem *ami, XrActionMapBinding *amb)
void WM_xr_actionmap_binding_ensure_unique(XrActionMapItem *ami, XrActionMapBinding *amb)
void WM_xr_actionmap_item_properties_update_ot(XrActionMapItem *ami)
bool WM_xr_actionmap_remove(wmXrRuntimeData *runtime, XrActionMap *actionmap)
bool WM_xr_actionmap_item_remove(XrActionMap *actionmap, XrActionMapItem *ami)
ListBase * WM_xr_actionmaps_get(wmXrRuntimeData *runtime)
void WM_xr_session_state_nav_scale_set(wmXrData *xr, float scale)
bool WM_xr_session_state_controller_aim_location_get(const wmXrData *xr, unsigned int subaction_idx, float r_location[3])
void WM_xr_session_base_pose_reset(wmXrData *xr)
bool WM_xr_session_state_nav_scale_get(const wmXrData *xr, float *r_scale)
bool WM_xr_session_state_controller_grip_rotation_get(const wmXrData *xr, unsigned int subaction_idx, float r_rotation[4])
bool WM_xr_session_state_controller_grip_location_get(const wmXrData *xr, unsigned int subaction_idx, float r_location[3])
bool WM_xr_session_state_controller_aim_rotation_get(const wmXrData *xr, unsigned int subaction_idx, float r_rotation[4])
bool WM_xr_session_state_nav_location_get(const wmXrData *xr, float r_location[3])
void WM_xr_session_state_nav_location_set(wmXrData *xr, const float location[3])
bool WM_xr_session_state_viewer_pose_location_get(const wmXrData *xr, float r_location[3])
bool WM_xr_session_exists(const wmXrData *xr)
void WM_xr_session_state_nav_rotation_set(wmXrData *xr, const float rotation[4])
bool WM_xr_session_state_viewer_pose_rotation_get(const wmXrData *xr, float r_rotation[4])
bool WM_xr_session_state_nav_rotation_get(const wmXrData *xr, float r_rotation[4])