Blender V4.3
rna_xr.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "BLT_translation.hh"
10
11#include "DNA_space_types.h"
12#include "DNA_view3d_types.h"
14#include "DNA_xr_types.h"
15
16#include "RNA_access.hh"
17#include "RNA_define.hh"
18#include "RNA_enum_types.hh"
19
20#include "WM_types.hh"
21
22#include "rna_internal.hh"
23
24#ifdef RNA_RUNTIME
25
26# include "BLI_listbase.h"
27# include "BLI_math_rotation.h"
28# include "BLI_math_vector.h"
29
30# include "WM_api.hh"
31
32/* -------------------------------------------------------------------- */
33
34# ifdef WITH_XR_OPENXR
35static wmXrData *rna_XrSession_wm_xr_data_get(PointerRNA *ptr)
36{
37 /* Callers could also get XrSessionState pointer through ptr->data, but prefer if we just
38 * consistently pass wmXrData pointers to the WM_xr_xxx() API. */
39
40 BLI_assert(ELEM(ptr->type, &RNA_XrSessionSettings, &RNA_XrSessionState));
41
43 BLI_assert(wm && (GS(wm->id.name) == ID_WM));
44
45 return &wm->xr;
46}
47# endif
48
49/* -------------------------------------------------------------------- */
53static XrComponentPath *rna_XrComponentPath_new(XrActionMapBinding *amb, const char *path_str)
54{
55# ifdef WITH_XR_OPENXR
56 XrComponentPath *component_path = static_cast<XrComponentPath *>(
57 MEM_callocN(sizeof(XrComponentPath), __func__));
58 STRNCPY(component_path->path, path_str);
59 BLI_addtail(&amb->component_paths, component_path);
60 return component_path;
61# else
62 UNUSED_VARS(amb, path_str);
63 return nullptr;
64# endif
65}
66
67static void rna_XrComponentPath_remove(XrActionMapBinding *amb, PointerRNA *component_path_ptr)
68{
69# ifdef WITH_XR_OPENXR
70 XrComponentPath *component_path = static_cast<XrComponentPath *>(component_path_ptr->data);
71 int idx = BLI_findindex(&amb->component_paths, component_path);
72 if (idx != -1) {
73 BLI_freelinkN(&amb->component_paths, component_path);
74 }
75 RNA_POINTER_INVALIDATE(component_path_ptr);
76# else
77 UNUSED_VARS(amb, component_path_ptr);
78# endif
79}
80
81static XrComponentPath *rna_XrComponentPath_find(XrActionMapBinding *amb, const char *path_str)
82{
83# ifdef WITH_XR_OPENXR
84 return static_cast<XrComponentPath *>(
86# else
87 UNUSED_VARS(amb, path_str);
88 return nullptr;
89# endif
90}
91
92static XrActionMapBinding *rna_XrActionMapBinding_new(XrActionMapItem *ami,
93 const char *name,
94 bool replace_existing)
95{
96# ifdef WITH_XR_OPENXR
97 return WM_xr_actionmap_binding_new(ami, name, replace_existing);
98# else
99 UNUSED_VARS(ami, name, replace_existing);
100 return nullptr;
101# endif
102}
103
104static XrActionMapBinding *rna_XrActionMapBinding_new_from_binding(XrActionMapItem *ami,
105 XrActionMapBinding *amb_src)
106{
107# ifdef WITH_XR_OPENXR
108 return WM_xr_actionmap_binding_add_copy(ami, amb_src);
109# else
110 UNUSED_VARS(ami, amb_src);
111 return nullptr;
112# endif
113}
114
115static void rna_XrActionMapBinding_remove(XrActionMapItem *ami,
116 ReportList *reports,
117 PointerRNA *amb_ptr)
118{
119# ifdef WITH_XR_OPENXR
120 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(amb_ptr->data);
121 if (WM_xr_actionmap_binding_remove(ami, amb) == false) {
122 BKE_reportf(reports,
123 RPT_ERROR,
124 "ActionMapBinding '%s' cannot be removed from '%s'",
125 amb->name,
126 ami->name);
127 return;
128 }
129 RNA_POINTER_INVALIDATE(amb_ptr);
130# else
131 UNUSED_VARS(ami, reports, amb_ptr);
132# endif
133}
134
135static XrActionMapBinding *rna_XrActionMapBinding_find(XrActionMapItem *ami, const char *name)
136{
137# ifdef WITH_XR_OPENXR
138 return WM_xr_actionmap_binding_find(ami, name);
139# else
140 UNUSED_VARS(ami, name);
141 return nullptr;
142# endif
143}
144
145static void rna_XrActionMapBinding_component_paths_begin(CollectionPropertyIterator *iter,
147{
148# ifdef WITH_XR_OPENXR
150 rna_iterator_listbase_begin(iter, &amb->component_paths, nullptr);
151# else
152 UNUSED_VARS(iter, ptr);
153# endif
154}
155
156static int rna_XrActionMapBinding_component_paths_length(PointerRNA *ptr)
157{
158# ifdef WITH_XR_OPENXR
161# else
163 return 0;
164# endif
165}
166
167static int rna_XrActionMapBinding_axis0_region_get(PointerRNA *ptr)
168{
169# ifdef WITH_XR_OPENXR
170 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
171 if ((amb->axis_flag & XR_AXIS0_POS) != 0) {
172 return XR_AXIS0_POS;
173 }
174 if ((amb->axis_flag & XR_AXIS0_NEG) != 0) {
175 return XR_AXIS0_NEG;
176 }
177# else
179# endif
180 return 0;
181}
182
183static void rna_XrActionMapBinding_axis0_region_set(PointerRNA *ptr, int value)
184{
185# ifdef WITH_XR_OPENXR
186 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
188 amb->axis_flag |= value;
189# else
190 UNUSED_VARS(ptr, value);
191# endif
192}
193
194static int rna_XrActionMapBinding_axis1_region_get(PointerRNA *ptr)
195{
196# ifdef WITH_XR_OPENXR
197 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
198 if ((amb->axis_flag & XR_AXIS1_POS) != 0) {
199 return XR_AXIS1_POS;
200 }
201 if ((amb->axis_flag & XR_AXIS1_NEG) != 0) {
202 return XR_AXIS1_NEG;
203 }
204# else
206# endif
207 return 0;
208}
209
210static void rna_XrActionMapBinding_axis1_region_set(PointerRNA *ptr, int value)
211{
212# ifdef WITH_XR_OPENXR
213 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
215 amb->axis_flag |= value;
216# else
217 UNUSED_VARS(ptr, value);
218# endif
219}
220
221static void rna_XrActionMapBinding_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
222{
223# ifdef WITH_XR_OPENXR
224 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
225 if (wm && wm->xr.runtime) {
226 ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
228 XrActionMap *actionmap = static_cast<XrActionMap *>(BLI_findlink(actionmaps, idx));
229 if (actionmap) {
230 XrActionMapItem *ami = static_cast<XrActionMapItem *>(
231 BLI_findlink(&actionmap->items, actionmap->selitem));
232 if (ami) {
233 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
235 }
236 }
237 }
238# else
239 UNUSED_VARS(bmain, ptr);
240# endif
241}
242
243static XrUserPath *rna_XrUserPath_new(XrActionMapItem *ami, const char *path_str)
244{
245# ifdef WITH_XR_OPENXR
246 XrUserPath *user_path = static_cast<XrUserPath *>(MEM_callocN(sizeof(XrUserPath), __func__));
247 STRNCPY(user_path->path, path_str);
248 BLI_addtail(&ami->user_paths, user_path);
249 return user_path;
250# else
251 UNUSED_VARS(ami, path_str);
252 return nullptr;
253# endif
254}
255
256static void rna_XrUserPath_remove(XrActionMapItem *ami, PointerRNA *user_path_ptr)
257{
258# ifdef WITH_XR_OPENXR
259 XrUserPath *user_path = static_cast<XrUserPath *>(user_path_ptr->data);
260 int idx = BLI_findindex(&ami->user_paths, user_path);
261 if (idx != -1) {
262 BLI_freelinkN(&ami->user_paths, user_path);
263 }
264 RNA_POINTER_INVALIDATE(user_path_ptr);
265# else
266 UNUSED_VARS(ami, user_path_ptr);
267# endif
268}
269
270static XrUserPath *rna_XrUserPath_find(XrActionMapItem *ami, const char *path_str)
271{
272# ifdef WITH_XR_OPENXR
273 return static_cast<XrUserPath *>(
274 BLI_findstring(&ami->user_paths, path_str, offsetof(XrUserPath, path)));
275# else
276 UNUSED_VARS(ami, path_str);
277 return nullptr;
278# endif
279}
280
281static XrActionMapItem *rna_XrActionMapItem_new(XrActionMap *am,
282 const char *name,
283 bool replace_existing)
284{
285# ifdef WITH_XR_OPENXR
286 return WM_xr_actionmap_item_new(am, name, replace_existing);
287# else
288 UNUSED_VARS(am, name, replace_existing);
289 return nullptr;
290# endif
291}
292
293static XrActionMapItem *rna_XrActionMapItem_new_from_item(XrActionMap *am,
294 XrActionMapItem *ami_src)
295{
296# ifdef WITH_XR_OPENXR
297 return WM_xr_actionmap_item_add_copy(am, ami_src);
298# else
299 UNUSED_VARS(am, ami_src);
300 return nullptr;
301# endif
302}
303
304static void rna_XrActionMapItem_remove(XrActionMap *am, ReportList *reports, PointerRNA *ami_ptr)
305{
306# ifdef WITH_XR_OPENXR
307 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ami_ptr->data);
308 if (WM_xr_actionmap_item_remove(am, ami) == false) {
310 reports, RPT_ERROR, "ActionMapItem '%s' cannot be removed from '%s'", ami->name, am->name);
311 return;
312 }
313 RNA_POINTER_INVALIDATE(ami_ptr);
314# else
315 UNUSED_VARS(am, reports, ami_ptr);
316# endif
317}
318
319static XrActionMapItem *rna_XrActionMapItem_find(XrActionMap *am, const char *name)
320{
321# ifdef WITH_XR_OPENXR
322 return WM_xr_actionmap_item_find(am, name);
323# else
324 UNUSED_VARS(am, name);
325 return nullptr;
326# endif
327}
328
329static void rna_XrActionMapItem_user_paths_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
330{
331# ifdef WITH_XR_OPENXR
333 rna_iterator_listbase_begin(iter, &ami->user_paths, nullptr);
334# else
335 UNUSED_VARS(iter, ptr);
336# endif
337}
338
339static int rna_XrActionMapItem_user_paths_length(PointerRNA *ptr)
340{
341# ifdef WITH_XR_OPENXR
343 return BLI_listbase_count(&ami->user_paths);
344# else
346 return 0;
347# endif
348}
349
350static void rna_XrActionMapItem_op_name_get(PointerRNA *ptr, char *value)
351{
352# ifdef WITH_XR_OPENXR
353 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
354 if (ami->op[0]) {
355 if (ami->op_properties_ptr) {
357 if (ot) {
358 strcpy(value, WM_operatortype_name(ot, ami->op_properties_ptr).c_str());
359 return;
360 }
361 }
362 strcpy(value, ami->op);
363 return;
364 }
365# else
367# endif
368 value[0] = '\0';
369}
370
371static int rna_XrActionMapItem_op_name_length(PointerRNA *ptr)
372{
373# ifdef WITH_XR_OPENXR
374 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
375 if (ami->op[0]) {
376 if (ami->op_properties_ptr) {
378 if (ot) {
379 return strlen(WM_operatortype_name(ot, ami->op_properties_ptr).c_str());
380 }
381 }
382 return strlen(ami->op);
383 }
384# else
386# endif
387 return 0;
388}
389
390static PointerRNA rna_XrActionMapItem_op_properties_get(PointerRNA *ptr)
391{
392# ifdef WITH_XR_OPENXR
393 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
394 if (ami->op_properties_ptr) {
395 return *(ami->op_properties_ptr);
396 }
397# else
399# endif
400 return PointerRNA_NULL;
401}
402
403static bool rna_XrActionMapItem_bimanual_get(PointerRNA *ptr)
404{
405# ifdef WITH_XR_OPENXR
406 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
407 if ((ami->action_flag & XR_ACTION_BIMANUAL) != 0) {
408 return true;
409 }
410# else
412# endif
413 return false;
414}
415
416static void rna_XrActionMapItem_bimanual_set(PointerRNA *ptr, bool value)
417{
418# ifdef WITH_XR_OPENXR
419 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
421# else
422 UNUSED_VARS(ptr, value);
423# endif
424}
425
426static bool rna_XrActionMapItem_haptic_match_user_paths_get(PointerRNA *ptr)
427{
428# ifdef WITH_XR_OPENXR
429 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
430 if ((ami->haptic_flag & XR_HAPTIC_MATCHUSERPATHS) != 0) {
431 return true;
432 }
433# else
435# endif
436 return false;
437}
438
439static void rna_XrActionMapItem_haptic_match_user_paths_set(PointerRNA *ptr, bool value)
440{
441# ifdef WITH_XR_OPENXR
442 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
444# else
445 UNUSED_VARS(ptr, value);
446# endif
447}
448
449static int rna_XrActionMapItem_haptic_mode_get(PointerRNA *ptr)
450{
451# ifdef WITH_XR_OPENXR
452 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
453 if ((ami->haptic_flag & XR_HAPTIC_RELEASE) != 0) {
454 return ((ami->haptic_flag & XR_HAPTIC_PRESS) != 0) ? (XR_HAPTIC_PRESS | XR_HAPTIC_RELEASE) :
456 }
457 if ((ami->haptic_flag & XR_HAPTIC_REPEAT) != 0) {
458 return XR_HAPTIC_REPEAT;
459 }
460# else
462# endif
463 return XR_HAPTIC_PRESS;
464}
465
466static void rna_XrActionMapItem_haptic_mode_set(PointerRNA *ptr, int value)
467{
468# ifdef WITH_XR_OPENXR
469 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
471 ami->haptic_flag |= value;
472# else
473 UNUSED_VARS(ptr, value);
474# endif
475}
476
477static bool rna_XrActionMapItem_pose_is_controller_grip_get(PointerRNA *ptr)
478{
479# ifdef WITH_XR_OPENXR
480 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
481 if ((ami->pose_flag & XR_POSE_GRIP) != 0) {
482 return true;
483 }
484# else
486# endif
487 return false;
488}
489
490static void rna_XrActionMapItem_pose_is_controller_grip_set(PointerRNA *ptr, bool value)
491{
492# ifdef WITH_XR_OPENXR
493 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
495# else
496 UNUSED_VARS(ptr, value);
497# endif
498}
499
500static bool rna_XrActionMapItem_pose_is_controller_aim_get(PointerRNA *ptr)
501{
502# ifdef WITH_XR_OPENXR
503 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
504 if ((ami->pose_flag & XR_POSE_AIM) != 0) {
505 return true;
506 }
507# else
509# endif
510 return false;
511}
512
513static void rna_XrActionMapItem_pose_is_controller_aim_set(PointerRNA *ptr, bool value)
514{
515# ifdef WITH_XR_OPENXR
516 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
518# else
519 UNUSED_VARS(ptr, value);
520# endif
521}
522
523static void rna_XrActionMapItem_bindings_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
524{
525# ifdef WITH_XR_OPENXR
527 rna_iterator_listbase_begin(iter, &ami->bindings, nullptr);
528# else
529 UNUSED_VARS(iter, ptr);
530# endif
531}
532
533static int rna_XrActionMapItem_bindings_length(PointerRNA *ptr)
534{
535# ifdef WITH_XR_OPENXR
537 return BLI_listbase_count(&ami->bindings);
538# else
540 return 0;
541# endif
542}
543
544static void rna_XrActionMapItem_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
545{
546# ifdef WITH_XR_OPENXR
547 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
548 if (wm && wm->xr.runtime) {
549 ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
551 XrActionMap *actionmap = static_cast<XrActionMap *>(BLI_findlink(actionmaps, idx));
552 if (actionmap) {
553 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
555 }
556 }
557# else
558 UNUSED_VARS(bmain, ptr);
559# endif
560}
561
562static void rna_XrActionMapItem_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
563{
564# ifdef WITH_XR_OPENXR
565 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
567# else
569# endif
570}
571
572static XrActionMap *rna_XrActionMap_new(PointerRNA *ptr, const char *name, bool replace_existing)
573{
574# ifdef WITH_XR_OPENXR
575 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
576 return WM_xr_actionmap_new(xr->runtime, name, replace_existing);
577# else
578 UNUSED_VARS(ptr, name, replace_existing);
579 return nullptr;
580# endif
581}
582
583static XrActionMap *rna_XrActionMap_new_from_actionmap(PointerRNA *ptr, XrActionMap *am_src)
584{
585# ifdef WITH_XR_OPENXR
586 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
587 return WM_xr_actionmap_add_copy(xr->runtime, am_src);
588# else
589 UNUSED_VARS(ptr, am_src);
590 return nullptr;
591# endif
592}
593
594static void rna_XrActionMap_remove(ReportList *reports, PointerRNA *ptr, PointerRNA *actionmap_ptr)
595{
596# ifdef WITH_XR_OPENXR
597 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
598 XrActionMap *actionmap = static_cast<XrActionMap *>(actionmap_ptr->data);
599 if (WM_xr_actionmap_remove(xr->runtime, actionmap) == false) {
600 BKE_reportf(reports, RPT_ERROR, "ActionMap '%s' cannot be removed", actionmap->name);
601 return;
602 }
603 RNA_POINTER_INVALIDATE(actionmap_ptr);
604# else
605 UNUSED_VARS(ptr, reports, actionmap_ptr);
606# endif
607}
608
609static XrActionMap *rna_XrActionMap_find(PointerRNA *ptr, const char *name)
610{
611# ifdef WITH_XR_OPENXR
612 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
613 return WM_xr_actionmap_find(xr->runtime, name);
614# else
615 UNUSED_VARS(ptr, name);
616 return nullptr;
617# endif
618}
619
620static void rna_XrActionMap_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
621{
622# ifdef WITH_XR_OPENXR
623 XrActionMap *actionmap = (XrActionMap *)ptr->data;
624 rna_iterator_listbase_begin(iter, &actionmap->items, nullptr);
625# else
626 UNUSED_VARS(iter, ptr);
627# endif
628}
629
630static int rna_XrActionMap_items_length(PointerRNA *ptr)
631{
632# ifdef WITH_XR_OPENXR
633 XrActionMap *actionmap = (XrActionMap *)ptr->data;
634 return BLI_listbase_count(&actionmap->items);
635# else
637 return 0;
638# endif
639}
640
641static void rna_XrActionMap_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
642{
643# ifdef WITH_XR_OPENXR
644 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
645 if (wm && wm->xr.runtime) {
646 XrActionMap *actionmap = static_cast<XrActionMap *>(ptr->data);
648 }
649# else
650 UNUSED_VARS(bmain, ptr);
651# endif
652}
653
656/* -------------------------------------------------------------------- */
660static bool rna_XrSessionSettings_use_positional_tracking_get(PointerRNA *ptr)
661{
662# ifdef WITH_XR_OPENXR
663 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
665# else
667 return false;
668# endif
669}
670
671static void rna_XrSessionSettings_use_positional_tracking_set(PointerRNA *ptr, bool value)
672{
673# ifdef WITH_XR_OPENXR
674 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
676# else
677 UNUSED_VARS(ptr, value);
678# endif
679}
680
681static bool rna_XrSessionSettings_use_absolute_tracking_get(PointerRNA *ptr)
682{
683# ifdef WITH_XR_OPENXR
684 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
686# else
688 return false;
689# endif
690}
691
692static void rna_XrSessionSettings_use_absolute_tracking_set(PointerRNA *ptr, bool value)
693{
694# ifdef WITH_XR_OPENXR
695 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
697# else
698 UNUSED_VARS(ptr, value);
699# endif
700}
701
702static int rna_XrSessionSettings_icon_from_show_object_viewport_get(PointerRNA *ptr)
703{
704# ifdef WITH_XR_OPENXR
705 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
708# if 0
709 /* For the future when selection in VR is reliably supported. */
711# else
712 nullptr
713# endif
714 );
715# else
717 return ICON_NONE;
718# endif
719}
720
723/* -------------------------------------------------------------------- */
727static bool rna_XrSessionState_is_running(bContext *C)
728{
729# ifdef WITH_XR_OPENXR
730 const wmWindowManager *wm = CTX_wm_manager(C);
731 return WM_xr_session_exists(&wm->xr);
732# else
733 UNUSED_VARS(C);
734 return false;
735# endif
736}
737
738static void rna_XrSessionState_reset_to_base_pose(bContext *C)
739{
740# ifdef WITH_XR_OPENXR
743# else
744 UNUSED_VARS(C);
745# endif
746}
747
748static bool rna_XrSessionState_action_set_create(bContext *C, XrActionMap *actionmap)
749{
750# ifdef WITH_XR_OPENXR
752 return WM_xr_action_set_create(&wm->xr, actionmap->name);
753# else
754 UNUSED_VARS(C, actionmap);
755 return false;
756# endif
757}
758
759static bool rna_XrSessionState_action_create(bContext *C,
760 XrActionMap *actionmap,
761 XrActionMapItem *ami)
762{
763# ifdef WITH_XR_OPENXR
766 return false;
767 }
768
769 const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
770 const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
771 wmOperatorType *ot = nullptr;
772 IDProperty *op_properties = nullptr;
773 int64_t haptic_duration_msec;
774
775 if (is_button_action) {
776 if (ami->op[0]) {
777 char idname[OP_MAX_TYPENAME];
778 WM_operator_bl_idname(idname, ami->op);
779 ot = WM_operatortype_find(idname, true);
780 if (ot) {
781 op_properties = ami->op_properties;
782 }
783 }
784
785 haptic_duration_msec = int64_t(ami->haptic_duration * 1000.0f);
786 }
787
788 return WM_xr_action_create(&wm->xr,
789 actionmap->name,
790 ami->name,
791 eXrActionType(ami->type),
792 &ami->user_paths,
793 ot,
794 op_properties,
795 is_button_action ? ami->haptic_name : nullptr,
796 is_button_action ? &haptic_duration_msec : nullptr,
797 is_button_action ? &ami->haptic_frequency : nullptr,
798 is_button_action ? &ami->haptic_amplitude : nullptr,
799 eXrOpFlag(ami->op_flag),
800 eXrActionFlag(ami->action_flag),
801 eXrHapticFlag(ami->haptic_flag));
802# else
803 UNUSED_VARS(C, actionmap, ami);
804 return false;
805# endif
806}
807
808static bool rna_XrSessionState_action_binding_create(bContext *C,
809 XrActionMap *actionmap,
810 XrActionMapItem *ami,
812{
813# ifdef WITH_XR_OPENXR
815 const int count_user_paths = BLI_listbase_count(&ami->user_paths);
816 const int count_component_paths = BLI_listbase_count(&amb->component_paths);
817 if (count_user_paths < 1 || (count_user_paths != count_component_paths)) {
818 return false;
819 }
820
821 const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
822 const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
823 const bool is_pose_action = (ami->type == XR_POSE_INPUT);
824 float float_thresholds[2];
825 eXrAxisFlag axis_flags[2];
826 wmXrPose poses[2];
827
828 if (is_float_action) {
829 float_thresholds[0] = float_thresholds[1] = amb->float_threshold;
830 }
831 if (is_button_action) {
832 axis_flags[0] = axis_flags[1] = eXrAxisFlag(amb->axis_flag);
833 }
834 if (is_pose_action) {
835 copy_v3_v3(poses[0].position, amb->pose_location);
836 eul_to_quat(poses[0].orientation_quat, amb->pose_rotation);
837 normalize_qt(poses[0].orientation_quat);
838 memcpy(&poses[1], &poses[0], sizeof(poses[1]));
839 }
840
842 actionmap->name,
843 ami->name,
844 amb->profile,
845 &ami->user_paths,
846 &amb->component_paths,
847 is_float_action ? float_thresholds : nullptr,
848 is_button_action ? axis_flags : nullptr,
849 is_pose_action ? poses : nullptr);
850# else
851 UNUSED_VARS(C, actionmap, ami, amb);
852 return false;
853# endif
854}
855
856bool rna_XrSessionState_active_action_set_set(bContext *C, const char *action_set_name)
857{
858# ifdef WITH_XR_OPENXR
860 return WM_xr_active_action_set_set(&wm->xr, action_set_name, true);
861# else
862 UNUSED_VARS(C, action_set_name);
863 return false;
864# endif
865}
866
867bool rna_XrSessionState_controller_pose_actions_set(bContext *C,
868 const char *action_set_name,
869 const char *grip_action_name,
870 const char *aim_action_name)
871{
872# ifdef WITH_XR_OPENXR
875 &wm->xr, action_set_name, grip_action_name, aim_action_name);
876# else
877 UNUSED_VARS(C, action_set_name, grip_action_name, aim_action_name);
878 return false;
879# endif
880}
881
882void rna_XrSessionState_action_state_get(bContext *C,
883 const char *action_set_name,
884 const char *action_name,
885 const char *user_path,
886 float r_state[2])
887{
888# ifdef WITH_XR_OPENXR
890 wmXrActionState state;
891 if (WM_xr_action_state_get(&wm->xr, action_set_name, action_name, user_path, &state)) {
892 switch (state.type) {
893 case XR_BOOLEAN_INPUT:
894 r_state[0] = float(state.state_boolean);
895 r_state[1] = 0.0f;
896 return;
897 case XR_FLOAT_INPUT:
898 r_state[0] = state.state_float;
899 r_state[1] = 0.0f;
900 return;
902 copy_v2_v2(r_state, state.state_vector2f);
903 return;
904 case XR_POSE_INPUT:
907 break;
908 }
909 }
910# else
911 UNUSED_VARS(C, action_set_name, action_name, user_path);
912# endif
913 zero_v2(r_state);
914}
915
916bool rna_XrSessionState_haptic_action_apply(bContext *C,
917 const char *action_set_name,
918 const char *action_name,
919 const char *user_path,
920 float duration,
921 float frequency,
922 float amplitude)
923{
924# ifdef WITH_XR_OPENXR
926 int64_t duration_msec = int64_t(duration * 1000.0f);
927 return WM_xr_haptic_action_apply(&wm->xr,
928 action_set_name,
929 action_name,
930 user_path[0] ? user_path : nullptr,
931 &duration_msec,
932 &frequency,
933 &amplitude);
934# else
935 UNUSED_VARS(C, action_set_name, action_name, user_path, duration, frequency, amplitude);
936 return false;
937# endif
938}
939
940void rna_XrSessionState_haptic_action_stop(bContext *C,
941 const char *action_set_name,
942 const char *action_name,
943 const char *user_path)
944{
945# ifdef WITH_XR_OPENXR
948 &wm->xr, action_set_name, action_name, user_path[0] ? user_path : nullptr);
949# else
950 UNUSED_VARS(C, action_set_name, action_name, user_path);
951# endif
952}
953
954static void rna_XrSessionState_controller_grip_location_get(bContext *C,
955 int index,
956 float r_values[3])
957{
958# ifdef WITH_XR_OPENXR
959 const wmWindowManager *wm = CTX_wm_manager(C);
961# else
962 UNUSED_VARS(C, index);
963 zero_v3(r_values);
964# endif
965}
966
967static void rna_XrSessionState_controller_grip_rotation_get(bContext *C,
968 int index,
969 float r_values[4])
970{
971# ifdef WITH_XR_OPENXR
972 const wmWindowManager *wm = CTX_wm_manager(C);
974# else
975 UNUSED_VARS(C, index);
976 unit_qt(r_values);
977# endif
978}
979
980static void rna_XrSessionState_controller_aim_location_get(bContext *C,
981 int index,
982 float r_values[3])
983{
984# ifdef WITH_XR_OPENXR
985 const wmWindowManager *wm = CTX_wm_manager(C);
987# else
988 UNUSED_VARS(C, index);
989 zero_v3(r_values);
990# endif
991}
992
993static void rna_XrSessionState_controller_aim_rotation_get(bContext *C,
994 int index,
995 float r_values[4])
996{
997# ifdef WITH_XR_OPENXR
998 const wmWindowManager *wm = CTX_wm_manager(C);
1000# else
1001 UNUSED_VARS(C, index);
1002 unit_qt(r_values);
1003# endif
1004}
1005
1006static void rna_XrSessionState_viewer_pose_location_get(PointerRNA *ptr, float *r_values)
1007{
1008# ifdef WITH_XR_OPENXR
1009 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1011# else
1013 zero_v3(r_values);
1014# endif
1015}
1016
1017static void rna_XrSessionState_viewer_pose_rotation_get(PointerRNA *ptr, float *r_values)
1018{
1019# ifdef WITH_XR_OPENXR
1020 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1022# else
1024 unit_qt(r_values);
1025# endif
1026}
1027
1028static void rna_XrSessionState_nav_location_get(PointerRNA *ptr, float *r_values)
1029{
1030# ifdef WITH_XR_OPENXR
1031 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1033# else
1035 zero_v3(r_values);
1036# endif
1037}
1038
1039static void rna_XrSessionState_nav_location_set(PointerRNA *ptr, const float *values)
1040{
1041# ifdef WITH_XR_OPENXR
1042 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1044# else
1045 UNUSED_VARS(ptr, values);
1046# endif
1047}
1048
1049static void rna_XrSessionState_nav_rotation_get(PointerRNA *ptr, float *r_values)
1050{
1051# ifdef WITH_XR_OPENXR
1052 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1054# else
1056 unit_qt(r_values);
1057# endif
1058}
1059
1060static void rna_XrSessionState_nav_rotation_set(PointerRNA *ptr, const float *values)
1061{
1062# ifdef WITH_XR_OPENXR
1063 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1065# else
1066 UNUSED_VARS(ptr, values);
1067# endif
1068}
1069
1070static float rna_XrSessionState_nav_scale_get(PointerRNA *ptr)
1071{
1072 float value;
1073# ifdef WITH_XR_OPENXR
1074 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1076# else
1078 value = 1.0f;
1079# endif
1080 return value;
1081}
1082
1083static void rna_XrSessionState_nav_scale_set(PointerRNA *ptr, float value)
1084{
1085# ifdef WITH_XR_OPENXR
1086 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1088# else
1089 UNUSED_VARS(ptr, value);
1090# endif
1091}
1092
1093static void rna_XrSessionState_actionmaps_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
1094{
1095# ifdef WITH_XR_OPENXR
1096 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1098 rna_iterator_listbase_begin(iter, lb, nullptr);
1099# else
1100 UNUSED_VARS(iter, ptr);
1101# endif
1102}
1103
1104static int rna_XrSessionState_actionmaps_length(PointerRNA *ptr)
1105{
1106# ifdef WITH_XR_OPENXR
1107 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1109 return BLI_listbase_count(lb);
1110# else
1112 return 0;
1113# endif
1114}
1115
1116static int rna_XrSessionState_active_actionmap_get(PointerRNA *ptr)
1117{
1118# ifdef WITH_XR_OPENXR
1119 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1121# else
1123 return -1;
1124# endif
1125}
1126
1127static void rna_XrSessionState_active_actionmap_set(PointerRNA *ptr, int value)
1128{
1129# ifdef WITH_XR_OPENXR
1130 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1131 WM_xr_actionmap_active_index_set(xr->runtime, short(value));
1132# else
1133 UNUSED_VARS(ptr, value);
1134# endif
1135}
1136
1137static int rna_XrSessionState_selected_actionmap_get(PointerRNA *ptr)
1138{
1139# ifdef WITH_XR_OPENXR
1140 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1142# else
1144 return -1;
1145# endif
1146}
1147
1148static void rna_XrSessionState_selected_actionmap_set(PointerRNA *ptr, int value)
1149{
1150# ifdef WITH_XR_OPENXR
1151 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1153# else
1154 UNUSED_VARS(ptr, value);
1155# endif
1156}
1157
1160/* -------------------------------------------------------------------- */
1164static void rna_XrEventData_action_set_get(PointerRNA *ptr, char *r_value)
1165{
1166# ifdef WITH_XR_OPENXR
1167 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1168 strcpy(r_value, data->action_set);
1169# else
1171 r_value[0] = '\0';
1172# endif
1173}
1174
1175static int rna_XrEventData_action_set_length(PointerRNA *ptr)
1176{
1177# ifdef WITH_XR_OPENXR
1178 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1179 return strlen(data->action_set);
1180# else
1182 return 0;
1183# endif
1184}
1185
1186static void rna_XrEventData_action_get(PointerRNA *ptr, char *r_value)
1187{
1188# ifdef WITH_XR_OPENXR
1189 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1190 strcpy(r_value, data->action);
1191# else
1193 r_value[0] = '\0';
1194# endif
1195}
1196
1197static int rna_XrEventData_action_length(PointerRNA *ptr)
1198{
1199# ifdef WITH_XR_OPENXR
1200 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1201 return strlen(data->action);
1202# else
1204 return 0;
1205# endif
1206}
1207
1208static void rna_XrEventData_user_path_get(PointerRNA *ptr, char *r_value)
1209{
1210# ifdef WITH_XR_OPENXR
1211 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1212 strcpy(r_value, data->user_path);
1213# else
1215 r_value[0] = '\0';
1216# endif
1217}
1218
1219static int rna_XrEventData_user_path_length(PointerRNA *ptr)
1220{
1221# ifdef WITH_XR_OPENXR
1222 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1223 return strlen(data->user_path);
1224# else
1226 return 0;
1227# endif
1228}
1229
1230static void rna_XrEventData_user_path_other_get(PointerRNA *ptr, char *r_value)
1231{
1232# ifdef WITH_XR_OPENXR
1233 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1234 strcpy(r_value, data->user_path_other);
1235# else
1237 r_value[0] = '\0';
1238# endif
1239}
1240
1241static int rna_XrEventData_user_path_other_length(PointerRNA *ptr)
1242{
1243# ifdef WITH_XR_OPENXR
1244 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1245 return strlen(data->user_path_other);
1246# else
1248 return 0;
1249# endif
1250}
1251
1252static int rna_XrEventData_type_get(PointerRNA *ptr)
1253{
1254# ifdef WITH_XR_OPENXR
1255 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1256 return data->type;
1257# else
1259 return 0;
1260# endif
1261}
1262
1263static void rna_XrEventData_state_get(PointerRNA *ptr, float r_values[2])
1264{
1265# ifdef WITH_XR_OPENXR
1266 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1267 copy_v2_v2(r_values, data->state);
1268# else
1270 zero_v2(r_values);
1271# endif
1272}
1273
1274static void rna_XrEventData_state_other_get(PointerRNA *ptr, float r_values[2])
1275{
1276# ifdef WITH_XR_OPENXR
1277 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1278 copy_v2_v2(r_values, data->state_other);
1279# else
1281 zero_v2(r_values);
1282# endif
1283}
1284
1285static float rna_XrEventData_float_threshold_get(PointerRNA *ptr)
1286{
1287# ifdef WITH_XR_OPENXR
1288 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1289 return data->float_threshold;
1290# else
1292 return 0.0f;
1293# endif
1294}
1295
1296static void rna_XrEventData_controller_location_get(PointerRNA *ptr, float r_values[3])
1297{
1298# ifdef WITH_XR_OPENXR
1299 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1300 copy_v3_v3(r_values, data->controller_loc);
1301# else
1303 zero_v3(r_values);
1304# endif
1305}
1306
1307static void rna_XrEventData_controller_rotation_get(PointerRNA *ptr, float r_values[4])
1308{
1309# ifdef WITH_XR_OPENXR
1310 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1311 copy_qt_qt(r_values, data->controller_rot);
1312# else
1314 unit_qt(r_values);
1315# endif
1316}
1317
1318static void rna_XrEventData_controller_location_other_get(PointerRNA *ptr, float r_values[3])
1319{
1320# ifdef WITH_XR_OPENXR
1321 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1322 copy_v3_v3(r_values, data->controller_loc_other);
1323# else
1325 zero_v3(r_values);
1326# endif
1327}
1328
1329static void rna_XrEventData_controller_rotation_other_get(PointerRNA *ptr, float r_values[4])
1330{
1331# ifdef WITH_XR_OPENXR
1332 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1333 copy_qt_qt(r_values, data->controller_rot_other);
1334# else
1336 unit_qt(r_values);
1337# endif
1338}
1339
1340static bool rna_XrEventData_bimanual_get(PointerRNA *ptr)
1341{
1342# ifdef WITH_XR_OPENXR
1343 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1344 return data->bimanual;
1345# else
1347 return false;
1348# endif
1349}
1350
1353#else /* RNA_RUNTIME */
1354
1355/* -------------------------------------------------------------------- */
1356
1359 "FLOAT",
1360 0,
1361 "Float",
1362 "Float action, representing either a digital or analog button"},
1364 "VECTOR2D",
1365 0,
1366 "Vector2D",
1367 "2D float vector action, representing a thumbstick or trackpad"},
1369 "POSE",
1370 0,
1371 "Pose",
1372 "3D pose action, representing a controller's location and rotation"},
1374 "VIBRATION",
1375 0,
1376 "Vibration",
1377 "Haptic vibration output action, to be applied with a duration, frequency, and amplitude"},
1378 {0, nullptr, 0, nullptr, nullptr},
1379};
1380
1382 {XR_OP_PRESS,
1383 "PRESS",
1384 0,
1385 "Press",
1386 "Execute operator on button press (non-modal operators only)"},
1388 "RELEASE",
1389 0,
1390 "Release",
1391 "Execute operator on button release (non-modal operators only)"},
1392 {XR_OP_MODAL, "MODAL", 0, "Modal", "Use modal execution (modal operators only)"},
1393 {0, nullptr, 0, nullptr, nullptr},
1394};
1395
1397 {XR_HAPTIC_PRESS, "PRESS", 0, "Press", "Apply haptics on button press"},
1398 {XR_HAPTIC_RELEASE, "RELEASE", 0, "Release", "Apply haptics on button release"},
1400 "PRESS_RELEASE",
1401 0,
1402 "Press Release",
1403 "Apply haptics on button press and release"},
1405 "REPEAT",
1406 0,
1407 "Repeat",
1408 "Apply haptics repeatedly for the duration of the button press"},
1409 {0, nullptr, 0, nullptr, nullptr},
1410};
1411
1413 {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1414 {XR_AXIS0_POS,
1415 "POSITIVE",
1416 0,
1417 "Positive",
1418 "Use positive axis region only for operator execution"},
1419 {XR_AXIS0_NEG,
1420 "NEGATIVE",
1421 0,
1422 "Negative",
1423 "Use negative axis region only for operator execution"},
1424 {0, nullptr, 0, nullptr, nullptr},
1425};
1426
1428 {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1429 {XR_AXIS1_POS,
1430 "POSITIVE",
1431 0,
1432 "Positive",
1433 "Use positive axis region only for operator execution"},
1434 {XR_AXIS1_NEG,
1435 "NEGATIVE",
1436 0,
1437 "Negative",
1438 "Use negative axis region only for operator execution"},
1439 {0, nullptr, 0, nullptr, nullptr},
1440};
1441
1442/* -------------------------------------------------------------------- */
1447{
1448 StructRNA *srna;
1449 FunctionRNA *func;
1450 PropertyRNA *parm;
1451
1452 RNA_def_property_srna(cprop, "XrComponentPaths");
1453 srna = RNA_def_struct(brna, "XrComponentPaths", nullptr);
1454 RNA_def_struct_sdna(srna, "XrActionMapBinding");
1455 RNA_def_struct_ui_text(srna, "XR Component Paths", "Collection of OpenXR component paths");
1456
1457 func = RNA_def_function(srna, "new", "rna_XrComponentPath_new");
1458 parm = RNA_def_string(
1459 func, "path", nullptr, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1461 parm = RNA_def_pointer(
1462 func, "component_path", "XrComponentPath", "Component Path", "Added component path");
1463 RNA_def_function_return(func, parm);
1464
1465 func = RNA_def_function(srna, "remove", "rna_XrComponentPath_remove");
1466 parm = RNA_def_pointer(func, "component_path", "XrComponentPath", "Component Path", "");
1469
1470 func = RNA_def_function(srna, "find", "rna_XrComponentPath_find");
1471 parm = RNA_def_string(
1472 func, "path", nullptr, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1474 parm = RNA_def_pointer(func,
1475 "component_path",
1476 "XrComponentPath",
1477 "Component Path",
1478 "The component path with the given path");
1479 RNA_def_function_return(func, parm);
1480}
1481
1483{
1484 StructRNA *srna;
1485 FunctionRNA *func;
1486 PropertyRNA *parm;
1487
1488 RNA_def_property_srna(cprop, "XrActionMapBindings");
1489 srna = RNA_def_struct(brna, "XrActionMapBindings", nullptr);
1490 RNA_def_struct_sdna(srna, "XrActionMapItem");
1491 RNA_def_struct_ui_text(srna, "XR Action Map Bindings", "Collection of XR action map bindings");
1492
1493 func = RNA_def_function(srna, "new", "rna_XrActionMapBinding_new");
1494 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name of the action map binding", "");
1496 parm = RNA_def_boolean(func,
1497 "replace_existing",
1498 true,
1499 "Replace Existing",
1500 "Replace any existing binding with the same name");
1502 parm = RNA_def_pointer(
1503 func, "binding", "XrActionMapBinding", "Binding", "Added action map binding");
1504 RNA_def_function_return(func, parm);
1505
1506 func = RNA_def_function(srna, "new_from_binding", "rna_XrActionMapBinding_new_from_binding");
1507 parm = RNA_def_pointer(
1508 func, "binding", "XrActionMapBinding", "Binding", "Binding to use as a reference");
1510 parm = RNA_def_pointer(
1511 func, "result", "XrActionMapBinding", "Binding", "Added action map binding");
1512 RNA_def_function_return(func, parm);
1513
1514 func = RNA_def_function(srna, "remove", "rna_XrActionMapBinding_remove");
1516 parm = RNA_def_pointer(func, "binding", "XrActionMapBinding", "Binding", "");
1519
1520 func = RNA_def_function(srna, "find", "rna_XrActionMapBinding_find");
1521 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1523 parm = RNA_def_pointer(func,
1524 "binding",
1525 "XrActionMapBinding",
1526 "Binding",
1527 "The action map binding with the given name");
1528 RNA_def_function_return(func, parm);
1529}
1530
1532{
1533 StructRNA *srna;
1534 FunctionRNA *func;
1535 PropertyRNA *parm;
1536
1537 RNA_def_property_srna(cprop, "XrUserPaths");
1538 srna = RNA_def_struct(brna, "XrUserPaths", nullptr);
1539 RNA_def_struct_sdna(srna, "XrActionMapItem");
1540 RNA_def_struct_ui_text(srna, "XR User Paths", "Collection of OpenXR user paths");
1541
1542 func = RNA_def_function(srna, "new", "rna_XrUserPath_new");
1543 parm = RNA_def_string(
1544 func, "path", nullptr, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1546 parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "Added user path");
1547 RNA_def_function_return(func, parm);
1548
1549 func = RNA_def_function(srna, "remove", "rna_XrUserPath_remove");
1550 parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "");
1553
1554 func = RNA_def_function(srna, "find", "rna_XrUserPath_find");
1555 parm = RNA_def_string(
1556 func, "path", nullptr, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1558 parm = RNA_def_pointer(
1559 func, "user_path", "XrUserPath", "User Path", "The user path with the given path");
1560 RNA_def_function_return(func, parm);
1561}
1562
1564{
1565 StructRNA *srna;
1566 FunctionRNA *func;
1567 PropertyRNA *parm;
1568
1569 RNA_def_property_srna(cprop, "XrActionMapItems");
1570 srna = RNA_def_struct(brna, "XrActionMapItems", nullptr);
1571 RNA_def_struct_sdna(srna, "XrActionMap");
1572 RNA_def_struct_ui_text(srna, "XR Action Map Items", "Collection of XR action map items");
1573
1574 func = RNA_def_function(srna, "new", "rna_XrActionMapItem_new");
1575 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name of the action map item", "");
1577 parm = RNA_def_boolean(func,
1578 "replace_existing",
1579 true,
1580 "Replace Existing",
1581 "Replace any existing item with the same name");
1583 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Added action map item");
1584 RNA_def_function_return(func, parm);
1585
1586 func = RNA_def_function(srna, "new_from_item", "rna_XrActionMapItem_new_from_item");
1587 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Item to use as a reference");
1589 parm = RNA_def_pointer(func, "result", "XrActionMapItem", "Item", "Added action map item");
1590 RNA_def_function_return(func, parm);
1591
1592 func = RNA_def_function(srna, "remove", "rna_XrActionMapItem_remove");
1594 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "");
1597
1598 func = RNA_def_function(srna, "find", "rna_XrActionMapItem_find");
1599 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1601 parm = RNA_def_pointer(
1602 func, "item", "XrActionMapItem", "Item", "The action map item with the given name");
1603 RNA_def_function_return(func, parm);
1604}
1605
1607{
1608 StructRNA *srna;
1609 FunctionRNA *func;
1610 PropertyRNA *parm;
1611
1612 RNA_def_property_srna(cprop, "XrActionMaps");
1613 srna = RNA_def_struct(brna, "XrActionMaps", nullptr);
1614 RNA_def_struct_ui_text(srna, "XR Action Maps", "Collection of XR action maps");
1615
1616 func = RNA_def_function(srna, "new", "rna_XrActionMap_new");
1618 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1620 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1622 parm = RNA_def_boolean(func,
1623 "replace_existing",
1624 true,
1625 "Replace Existing",
1626 "Replace any existing actionmap with the same name");
1628 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Added action map");
1629 RNA_def_function_return(func, parm);
1630
1631 func = RNA_def_function(srna, "new_from_actionmap", "rna_XrActionMap_new_from_actionmap");
1633 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1635 parm = RNA_def_pointer(
1636 func, "actionmap", "XrActionMap", "Action Map", "Action map to use as a reference");
1638 parm = RNA_def_pointer(func, "result", "XrActionMap", "Action Map", "Added action map");
1639 RNA_def_function_return(func, parm);
1640
1641 func = RNA_def_function(srna, "remove", "rna_XrActionMap_remove");
1643 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1645 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Removed action map");
1648
1649 func = RNA_def_function(srna, "find", "rna_XrActionMap_find");
1651 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1653 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1655 parm = RNA_def_pointer(
1656 func, "actionmap", "XrActionMap", "Action Map", "The action map with the given name");
1657 RNA_def_function_return(func, parm);
1658}
1659
1661{
1662 StructRNA *srna;
1663 PropertyRNA *prop;
1664
1665 /* XrActionMap */
1666 srna = RNA_def_struct(brna, "XrActionMap", nullptr);
1667 RNA_def_struct_sdna(srna, "XrActionMap");
1668 RNA_def_struct_ui_text(srna, "XR Action Map", "");
1669
1670 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1671 RNA_def_property_ui_text(prop, "Name", "Name of the action map");
1672 RNA_def_property_update(prop, 0, "rna_XrActionMap_name_update");
1673 RNA_def_struct_name_property(srna, prop);
1674
1675 prop = RNA_def_property(srna, "actionmap_items", PROP_COLLECTION, PROP_NONE);
1676 RNA_def_property_collection_sdna(prop, nullptr, "items", nullptr);
1677 RNA_def_property_struct_type(prop, "XrActionMapItem");
1679 "rna_XrActionMap_items_begin",
1680 "rna_iterator_listbase_next",
1681 "rna_iterator_listbase_end",
1682 "rna_iterator_listbase_get",
1683 "rna_XrActionMap_items_length",
1684 nullptr,
1685 nullptr,
1686 nullptr);
1688 prop,
1689 "Items",
1690 "Items in the action map, mapping an XR event to an operator, pose, or haptic output");
1691 rna_def_xr_actionmap_items(brna, prop);
1692
1693 prop = RNA_def_property(srna, "selected_item", PROP_INT, PROP_NONE);
1694 RNA_def_property_int_sdna(prop, nullptr, "selitem");
1695 RNA_def_property_ui_text(prop, "Selected Item", "");
1696
1697 /* XrUserPath */
1698 srna = RNA_def_struct(brna, "XrUserPath", nullptr);
1699 RNA_def_struct_sdna(srna, "XrUserPath");
1700 RNA_def_struct_ui_text(srna, "XR User Path", "");
1701
1702 prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1704 RNA_def_property_ui_text(prop, "Path", "OpenXR user path");
1705
1706 /* XrActionMapItem */
1707 srna = RNA_def_struct(brna, "XrActionMapItem", nullptr);
1708 RNA_def_struct_sdna(srna, "XrActionMapItem");
1709 RNA_def_struct_ui_text(srna, "XR Action Map Item", "");
1710
1711 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1712 RNA_def_property_ui_text(prop, "Name", "Name of the action map item");
1713 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_name_update");
1714 RNA_def_struct_name_property(srna, prop);
1715
1716 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1718 RNA_def_property_ui_text(prop, "Type", "Action type");
1719 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1720
1721 prop = RNA_def_property(srna, "user_paths", PROP_COLLECTION, PROP_NONE);
1722 RNA_def_property_struct_type(prop, "XrUserPath");
1724 "rna_XrActionMapItem_user_paths_begin",
1725 "rna_iterator_listbase_next",
1726 "rna_iterator_listbase_end",
1727 "rna_iterator_listbase_get",
1728 "rna_XrActionMapItem_user_paths_length",
1729 nullptr,
1730 nullptr,
1731 nullptr);
1732 RNA_def_property_ui_text(prop, "User Paths", "OpenXR user paths");
1733 rna_def_xr_user_paths(brna, prop);
1734
1735 prop = RNA_def_property(srna, "op", PROP_STRING, PROP_NONE);
1737 RNA_def_property_ui_text(prop, "Operator", "Identifier of operator to call on action event");
1738 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1739
1740 prop = RNA_def_property(srna, "op_name", PROP_STRING, PROP_NONE);
1743 prop, "Operator Name", "Name of operator (translated) to call on action event");
1745 prop, "rna_XrActionMapItem_op_name_get", "rna_XrActionMapItem_op_name_length", nullptr);
1746
1747 prop = RNA_def_property(srna, "op_properties", PROP_POINTER, PROP_NONE);
1748 RNA_def_property_struct_type(prop, "OperatorProperties");
1750 prop, "rna_XrActionMapItem_op_properties_get", nullptr, nullptr, nullptr);
1752 prop, "Operator Properties", "Properties to set when the operator is called");
1753 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1754
1755 prop = RNA_def_property(srna, "op_mode", PROP_ENUM, PROP_NONE);
1756 RNA_def_property_enum_sdna(prop, nullptr, "op_flag");
1758 RNA_def_property_ui_text(prop, "Operator Mode", "Operator execution mode");
1759
1760 prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
1762 prop, "rna_XrActionMapItem_bimanual_get", "rna_XrActionMapItem_bimanual_set");
1764 prop, "Bimanual", "The action depends on the states/poses of both user paths");
1765
1766 prop = RNA_def_property(srna, "pose_is_controller_grip", PROP_BOOLEAN, PROP_NONE);
1768 "rna_XrActionMapItem_pose_is_controller_grip_get",
1769 "rna_XrActionMapItem_pose_is_controller_grip_set");
1771 prop, "Is Controller Grip", "The action poses will be used for the VR controller grips");
1772
1773 prop = RNA_def_property(srna, "pose_is_controller_aim", PROP_BOOLEAN, PROP_NONE);
1775 "rna_XrActionMapItem_pose_is_controller_aim_get",
1776 "rna_XrActionMapItem_pose_is_controller_aim_set");
1778 prop, "Is Controller Aim", "The action poses will be used for the VR controller aims");
1779
1780 prop = RNA_def_property(srna, "haptic_name", PROP_STRING, PROP_NONE);
1782 prop, "Haptic Name", "Name of the haptic action to apply when executing this action");
1783
1784 prop = RNA_def_property(srna, "haptic_match_user_paths", PROP_BOOLEAN, PROP_NONE);
1786 "rna_XrActionMapItem_haptic_match_user_paths_get",
1787 "rna_XrActionMapItem_haptic_match_user_paths_set");
1789 prop,
1790 "Haptic Match User Paths",
1791 "Apply haptics to the same user paths for the haptic action and this action");
1792
1793 prop = RNA_def_property(srna, "haptic_duration", PROP_FLOAT, PROP_NONE);
1794 RNA_def_property_range(prop, 0.0, FLT_MAX);
1796 "Haptic Duration",
1797 "Haptic duration in seconds. 0.0 is the minimum supported duration.");
1798
1799 prop = RNA_def_property(srna, "haptic_frequency", PROP_FLOAT, PROP_NONE);
1800 RNA_def_property_range(prop, 0.0, FLT_MAX);
1802 "Haptic Frequency",
1803 "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
1804 "runtime's default frequency.");
1805
1806 prop = RNA_def_property(srna, "haptic_amplitude", PROP_FLOAT, PROP_NONE);
1807 RNA_def_property_range(prop, 0.0, 1.0);
1809 prop, "Haptic Amplitude", "Intensity of the haptic vibration, ranging from 0.0 to 1.0");
1810
1811 prop = RNA_def_property(srna, "haptic_mode", PROP_ENUM, PROP_NONE);
1814 prop, "rna_XrActionMapItem_haptic_mode_get", "rna_XrActionMapItem_haptic_mode_set", nullptr);
1815 RNA_def_property_ui_text(prop, "Haptic mode", "Haptic application mode");
1816
1817 prop = RNA_def_property(srna, "bindings", PROP_COLLECTION, PROP_NONE);
1818 RNA_def_property_struct_type(prop, "XrActionMapBinding");
1820 "rna_XrActionMapItem_bindings_begin",
1821 "rna_iterator_listbase_next",
1822 "rna_iterator_listbase_end",
1823 "rna_iterator_listbase_get",
1824 "rna_XrActionMapItem_bindings_length",
1825 nullptr,
1826 nullptr,
1827 nullptr);
1829 prop, "Bindings", "Bindings for the action map item, mapping the action to an XR input");
1831
1832 prop = RNA_def_property(srna, "selected_binding", PROP_INT, PROP_NONE);
1833 RNA_def_property_int_sdna(prop, nullptr, "selbinding");
1834 RNA_def_property_ui_text(prop, "Selected Binding", "Currently selected binding");
1835
1836 /* XrComponentPath */
1837 srna = RNA_def_struct(brna, "XrComponentPath", nullptr);
1838 RNA_def_struct_sdna(srna, "XrComponentPath");
1839 RNA_def_struct_ui_text(srna, "XR Component Path", "");
1840
1841 prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1843 RNA_def_property_ui_text(prop, "Path", "OpenXR component path");
1844
1845 /* XrActionMapBinding */
1846 srna = RNA_def_struct(brna, "XrActionMapBinding", nullptr);
1847 RNA_def_struct_sdna(srna, "XrActionMapBinding");
1848 RNA_def_struct_ui_text(srna, "XR Action Map Binding", "Binding in an XR action map item");
1849
1850 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1851 RNA_def_property_ui_text(prop, "Name", "Name of the action map binding");
1852 RNA_def_property_update(prop, 0, "rna_XrActionMapBinding_name_update");
1853 RNA_def_struct_name_property(srna, prop);
1854
1855 prop = RNA_def_property(srna, "profile", PROP_STRING, PROP_NONE);
1857 RNA_def_property_ui_text(prop, "Profile", "OpenXR interaction profile path");
1858
1859 prop = RNA_def_property(srna, "component_paths", PROP_COLLECTION, PROP_NONE);
1860 RNA_def_property_struct_type(prop, "XrComponentPath");
1862 "rna_XrActionMapBinding_component_paths_begin",
1863 "rna_iterator_listbase_next",
1864 "rna_iterator_listbase_end",
1865 "rna_iterator_listbase_get",
1866 "rna_XrActionMapBinding_component_paths_length",
1867 nullptr,
1868 nullptr,
1869 nullptr);
1870 RNA_def_property_ui_text(prop, "Component Paths", "OpenXR component paths");
1871 rna_def_xr_component_paths(brna, prop);
1872
1873 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
1874 RNA_def_property_float_sdna(prop, nullptr, "float_threshold");
1875 RNA_def_property_range(prop, 0.0, 1.0);
1876 RNA_def_property_ui_text(prop, "Threshold", "Input threshold for button/axis actions");
1877
1878 prop = RNA_def_property(srna, "axis0_region", PROP_ENUM, PROP_NONE);
1881 "rna_XrActionMapBinding_axis0_region_get",
1882 "rna_XrActionMapBinding_axis0_region_set",
1883 nullptr);
1885 prop, "Axis 0 Region", "Action execution region for the first input axis");
1886
1887 prop = RNA_def_property(srna, "axis1_region", PROP_ENUM, PROP_NONE);
1890 "rna_XrActionMapBinding_axis1_region_get",
1891 "rna_XrActionMapBinding_axis1_region_set",
1892 nullptr);
1894 prop, "Axis 1 Region", "Action execution region for the second input axis");
1895
1896 prop = RNA_def_property(srna, "pose_location", PROP_FLOAT, PROP_TRANSLATION);
1897 RNA_def_property_ui_text(prop, "Pose Location Offset", "");
1898
1899 prop = RNA_def_property(srna, "pose_rotation", PROP_FLOAT, PROP_EULER);
1900 RNA_def_property_ui_text(prop, "Pose Rotation Offset", "");
1901}
1902
1905/* -------------------------------------------------------------------- */
1910{
1911 StructRNA *srna;
1912 PropertyRNA *prop;
1913
1914 static const EnumPropertyItem base_pose_types[] = {
1916 "SCENE_CAMERA",
1917 0,
1918 "Scene Camera",
1919 "Follow the active scene camera to define the VR view's base pose"},
1921 "OBJECT",
1922 0,
1923 "Object",
1924 "Follow the transformation of an object to define the VR view's base pose"},
1926 "CUSTOM",
1927 0,
1928 "Custom",
1929 "Follow a custom transformation to define the VR view's base pose"},
1930 {0, nullptr, 0, nullptr, nullptr},
1931 };
1932
1933 static const EnumPropertyItem controller_draw_styles[] = {
1934 {XR_CONTROLLER_DRAW_DARK, "DARK", 0, "Dark", "Draw dark controller"},
1935 {XR_CONTROLLER_DRAW_LIGHT, "LIGHT", 0, "Light", "Draw light controller"},
1937 "DARK_RAY",
1938 0,
1939 "Dark + Ray",
1940 "Draw dark controller with aiming axis ray"},
1942 "LIGHT_RAY",
1943 0,
1944 "Light + Ray",
1945 "Draw light controller with aiming axis ray"},
1946 {0, nullptr, 0, nullptr, nullptr},
1947 };
1948
1949 srna = RNA_def_struct(brna, "XrSessionSettings", nullptr);
1950 RNA_def_struct_ui_text(srna, "XR Session Settings", "");
1951
1952 prop = RNA_def_property(srna, "shading", PROP_POINTER, PROP_NONE);
1954 RNA_def_property_ui_text(prop, "Shading Settings", "");
1956
1957 prop = RNA_def_property(srna, "base_pose_type", PROP_ENUM, PROP_NONE);
1959 RNA_def_property_enum_items(prop, base_pose_types);
1961 prop,
1962 "Base Pose Type",
1963 "Define where the location and rotation for the VR view come from, to which "
1964 "translation and rotation deltas from the VR headset will be applied to");
1966
1967 prop = RNA_def_property(srna, "base_pose_object", PROP_POINTER, PROP_NONE);
1970 "Base Pose Object",
1971 "Object to take the location and rotation to which translation and "
1972 "rotation deltas from the VR headset will be applied to");
1974
1975 prop = RNA_def_property(srna, "base_pose_location", PROP_FLOAT, PROP_TRANSLATION);
1977 "Base Pose Location",
1978 "Coordinates to apply translation deltas from the VR headset to");
1981
1982 prop = RNA_def_property(srna, "base_pose_angle", PROP_FLOAT, PROP_AXISANGLE);
1984 prop,
1985 "Base Pose Angle",
1986 "Rotation angle around the Z-Axis to apply the rotation deltas from the VR headset to");
1988
1989 prop = RNA_def_property(srna, "base_scale", PROP_FLOAT, PROP_NONE);
1990 RNA_def_property_ui_text(prop, "Base Scale", "Uniform scale to apply to VR view");
1991 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
1992 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
1995
1996 prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
1997 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_GRIDFLOOR);
1998 RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid");
2000
2001 prop = RNA_def_property(srna, "show_passthrough", PROP_BOOLEAN, PROP_NONE);
2003 RNA_def_property_ui_text(prop, "Show Passthrough", "Show the passthrough view");
2005
2006 prop = RNA_def_property(srna, "show_annotation", PROP_BOOLEAN, PROP_NONE);
2007 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_ANNOTATION);
2008 RNA_def_property_ui_text(prop, "Show Annotation", "Show annotations for this view");
2010
2011 prop = RNA_def_property(srna, "show_selection", PROP_BOOLEAN, PROP_NONE);
2012 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_SELECTION);
2013 RNA_def_property_ui_text(prop, "Show Selection", "Show selection outlines");
2015
2016 prop = RNA_def_property(srna, "show_controllers", PROP_BOOLEAN, PROP_NONE);
2019 prop, "Show Controllers", "Show VR controllers (requires VR actions for controller poses)");
2021
2022 prop = RNA_def_property(srna, "show_custom_overlays", PROP_BOOLEAN, PROP_NONE);
2024 RNA_def_property_ui_text(prop, "Show Custom Overlays", "Show custom VR overlays");
2026
2027 prop = RNA_def_property(srna, "show_object_extras", PROP_BOOLEAN, PROP_NONE);
2030 prop, "Show Object Extras", "Show object extras, including empties, lights, and cameras");
2032
2033 prop = RNA_def_property(srna, "controller_draw_style", PROP_ENUM, PROP_NONE);
2035 RNA_def_property_enum_items(prop, controller_draw_styles);
2037 prop, "Controller Draw Style", "Style to use when drawing VR controllers");
2040
2041 prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
2042 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2043 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
2044 RNA_def_property_ui_text(prop, "Clip Start", "VR viewport near clipping distance");
2046
2047 prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
2048 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2049 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
2050 RNA_def_property_ui_text(prop, "Clip End", "VR viewport far clipping distance");
2052
2053 prop = RNA_def_property(srna, "use_positional_tracking", PROP_BOOLEAN, PROP_NONE);
2055 "rna_XrSessionSettings_use_positional_tracking_get",
2056 "rna_XrSessionSettings_use_positional_tracking_set");
2058 prop,
2059 "Positional Tracking",
2060 "Allow VR headsets to affect the location in virtual space, in addition to the rotation");
2062
2063 prop = RNA_def_property(srna, "use_absolute_tracking", PROP_BOOLEAN, PROP_NONE);
2065 "rna_XrSessionSettings_use_absolute_tracking_get",
2066 "rna_XrSessionSettings_use_absolute_tracking_set");
2068 prop,
2069 "Absolute Tracking",
2070 "Allow the VR tracking origin to be defined independently of the headset location");
2072
2074
2075 /* Helper for drawing the icon. */
2076 prop = RNA_def_property(srna, "icon_from_show_object_viewport", PROP_INT, PROP_NONE);
2078 prop, "rna_XrSessionSettings_icon_from_show_object_viewport_get", nullptr, nullptr);
2080 RNA_def_property_ui_text(prop, "Visibility Icon", "");
2081}
2082
2085/* -------------------------------------------------------------------- */
2090{
2091 StructRNA *srna;
2092 FunctionRNA *func;
2093 PropertyRNA *parm, *prop;
2094
2095 srna = RNA_def_struct(brna, "XrSessionState", nullptr);
2096 RNA_def_struct_ui_text(srna, "Session State", "Runtime state information about the VR session");
2097
2098 func = RNA_def_function(srna, "is_running", "rna_XrSessionState_is_running");
2099 RNA_def_function_ui_description(func, "Query if the VR session is currently running");
2101 parm = RNA_def_pointer(func, "context", "Context", "", "");
2103 parm = RNA_def_boolean(func, "result", false, "Result", "");
2104 RNA_def_function_return(func, parm);
2105
2106 func = RNA_def_function(srna, "reset_to_base_pose", "rna_XrSessionState_reset_to_base_pose");
2107 RNA_def_function_ui_description(func, "Force resetting of position and rotation deltas");
2109 parm = RNA_def_pointer(func, "context", "Context", "", "");
2111
2112 func = RNA_def_function(srna, "action_set_create", "rna_XrSessionState_action_set_create");
2113 RNA_def_function_ui_description(func, "Create a VR action set");
2115 parm = RNA_def_pointer(func, "context", "Context", "", "");
2117 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2119 parm = RNA_def_boolean(func, "result", false, "Result", "");
2120 RNA_def_function_return(func, parm);
2121
2122 func = RNA_def_function(srna, "action_create", "rna_XrSessionState_action_create");
2123 RNA_def_function_ui_description(func, "Create a VR action");
2125 parm = RNA_def_pointer(func, "context", "Context", "", "");
2127 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2129 parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2131 parm = RNA_def_boolean(func, "result", false, "Result", "");
2132 RNA_def_function_return(func, parm);
2133
2134 func = RNA_def_function(
2135 srna, "action_binding_create", "rna_XrSessionState_action_binding_create");
2136 RNA_def_function_ui_description(func, "Create a VR action binding");
2138 parm = RNA_def_pointer(func, "context", "Context", "", "");
2140 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2142 parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2144 parm = RNA_def_pointer(func, "actionmap_binding", "XrActionMapBinding", "", "");
2146 parm = RNA_def_boolean(func, "result", false, "Result", "");
2147 RNA_def_function_return(func, parm);
2148
2149 func = RNA_def_function(
2150 srna, "active_action_set_set", "rna_XrSessionState_active_action_set_set");
2151 RNA_def_function_ui_description(func, "Set the active VR action set");
2153 parm = RNA_def_pointer(func, "context", "Context", "", "");
2155 parm = RNA_def_string(func, "action_set", nullptr, MAX_NAME, "Action Set", "Action set name");
2157 parm = RNA_def_boolean(func, "result", false, "Result", "");
2158 RNA_def_function_return(func, parm);
2159
2160 func = RNA_def_function(
2161 srna, "controller_pose_actions_set", "rna_XrSessionState_controller_pose_actions_set");
2162 RNA_def_function_ui_description(func, "Set the actions that determine the VR controller poses");
2164 parm = RNA_def_pointer(func, "context", "Context", "", "");
2166 parm = RNA_def_string(func, "action_set", nullptr, MAX_NAME, "Action Set", "Action set name");
2168 parm = RNA_def_string(func,
2169 "grip_action",
2170 nullptr,
2171 MAX_NAME,
2172 "Grip Action",
2173 "Name of the action representing the controller grips");
2175 parm = RNA_def_string(func,
2176 "aim_action",
2177 nullptr,
2178 MAX_NAME,
2179 "Aim Action",
2180 "Name of the action representing the controller aims");
2182 parm = RNA_def_boolean(func, "result", false, "Result", "");
2183 RNA_def_function_return(func, parm);
2184
2185 func = RNA_def_function(srna, "action_state_get", "rna_XrSessionState_action_state_get");
2186 RNA_def_function_ui_description(func, "Get the current state of a VR action");
2188 parm = RNA_def_pointer(func, "context", "Context", "", "");
2190 parm = RNA_def_string(
2191 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2193 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2195 parm = RNA_def_string(
2196 func, "user_path", nullptr, XR_MAX_USER_PATH_LENGTH, "User Path", "OpenXR user path");
2198 parm = RNA_def_float_array(
2199 func,
2200 "state",
2201 2,
2202 nullptr,
2203 -FLT_MAX,
2204 FLT_MAX,
2205 "Action State",
2206 "Current state of the VR action. Second float value is only set for 2D vector type actions.",
2207 -FLT_MAX,
2208 FLT_MAX);
2210
2211 func = RNA_def_function(srna, "haptic_action_apply", "rna_XrSessionState_haptic_action_apply");
2212 RNA_def_function_ui_description(func, "Apply a VR haptic action");
2214 parm = RNA_def_pointer(func, "context", "Context", "", "");
2216 parm = RNA_def_string(
2217 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2219 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2221 parm = RNA_def_string(
2222 func,
2223 "user_path",
2224 nullptr,
2226 "User Path",
2227 "Optional OpenXR user path. If not set, the action will be applied to all paths.");
2229 parm = RNA_def_float(func,
2230 "duration",
2231 0.0f,
2232 0.0f,
2233 FLT_MAX,
2234 "Duration",
2235 "Haptic duration in seconds. 0.0 is the minimum supported duration.",
2236 0.0f,
2237 FLT_MAX);
2239 parm = RNA_def_float(func,
2240 "frequency",
2241 0.0f,
2242 0.0f,
2243 FLT_MAX,
2244 "Frequency",
2245 "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
2246 "runtime's default frequency.",
2247 0.0f,
2248 FLT_MAX);
2250 parm = RNA_def_float(func,
2251 "amplitude",
2252 1.0f,
2253 0.0f,
2254 1.0f,
2255 "Amplitude",
2256 "Haptic amplitude, ranging from 0.0 to 1.0",
2257 0.0f,
2258 1.0f);
2260 parm = RNA_def_boolean(func, "result", false, "Result", "");
2261 RNA_def_function_return(func, parm);
2262
2263 func = RNA_def_function(srna, "haptic_action_stop", "rna_XrSessionState_haptic_action_stop");
2264 RNA_def_function_ui_description(func, "Stop a VR haptic action");
2266 parm = RNA_def_pointer(func, "context", "Context", "", "");
2268 parm = RNA_def_string(
2269 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2271 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2273 parm = RNA_def_string(
2274 func,
2275 "user_path",
2276 nullptr,
2278 "User Path",
2279 "Optional OpenXR user path. If not set, the action will be stopped for all paths.");
2281
2282 func = RNA_def_function(
2283 srna, "controller_grip_location_get", "rna_XrSessionState_controller_grip_location_get");
2285 "Get the last known controller grip location in world space");
2287 parm = RNA_def_pointer(func, "context", "Context", "", "");
2289 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2291 parm = RNA_def_float_translation(func,
2292 "location",
2293 3,
2294 nullptr,
2295 -FLT_MAX,
2296 FLT_MAX,
2297 "Location",
2298 "Controller grip location",
2299 -FLT_MAX,
2300 FLT_MAX);
2302
2303 func = RNA_def_function(
2304 srna, "controller_grip_rotation_get", "rna_XrSessionState_controller_grip_rotation_get");
2306 func, "Get the last known controller grip rotation (quaternion) in world space");
2308 parm = RNA_def_pointer(func, "context", "Context", "", "");
2310 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2312 parm = RNA_def_float_vector(func,
2313 "rotation",
2314 4,
2315 nullptr,
2316 -FLT_MAX,
2317 FLT_MAX,
2318 "Rotation",
2319 "Controller grip quaternion rotation",
2320 -FLT_MAX,
2321 FLT_MAX);
2322 parm->subtype = PROP_QUATERNION;
2325
2326 func = RNA_def_function(
2327 srna, "controller_aim_location_get", "rna_XrSessionState_controller_aim_location_get");
2329 "Get the last known controller aim location in world space");
2331 parm = RNA_def_pointer(func, "context", "Context", "", "");
2333 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2335 parm = RNA_def_float_translation(func,
2336 "location",
2337 3,
2338 nullptr,
2339 -FLT_MAX,
2340 FLT_MAX,
2341 "Location",
2342 "Controller aim location",
2343 -FLT_MAX,
2344 FLT_MAX);
2346
2347 func = RNA_def_function(
2348 srna, "controller_aim_rotation_get", "rna_XrSessionState_controller_aim_rotation_get");
2350 func, "Get the last known controller aim rotation (quaternion) in world space");
2352 parm = RNA_def_pointer(func, "context", "Context", "", "");
2354 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2356 parm = RNA_def_float_vector(func,
2357 "rotation",
2358 4,
2359 nullptr,
2360 -FLT_MAX,
2361 FLT_MAX,
2362 "Rotation",
2363 "Controller aim quaternion rotation",
2364 -FLT_MAX,
2365 FLT_MAX);
2366 parm->subtype = PROP_QUATERNION;
2369
2370 prop = RNA_def_property(srna, "viewer_pose_location", PROP_FLOAT, PROP_TRANSLATION);
2371 RNA_def_property_array(prop, 3);
2373 prop, "rna_XrSessionState_viewer_pose_location_get", nullptr, nullptr);
2376 prop,
2377 "Viewer Pose Location",
2378 "Last known location of the viewer pose (center between the eyes) in world space");
2379
2380 prop = RNA_def_property(srna, "viewer_pose_rotation", PROP_FLOAT, PROP_QUATERNION);
2381 RNA_def_property_array(prop, 4);
2383 prop, "rna_XrSessionState_viewer_pose_rotation_get", nullptr, nullptr);
2386 prop,
2387 "Viewer Pose Rotation",
2388 "Last known rotation of the viewer pose (center between the eyes) in world space");
2389
2390 prop = RNA_def_property(srna, "navigation_location", PROP_FLOAT, PROP_TRANSLATION);
2391 RNA_def_property_array(prop, 3);
2393 prop, "rna_XrSessionState_nav_location_get", "rna_XrSessionState_nav_location_set", nullptr);
2395 prop,
2396 "Navigation Location",
2397 "Location offset to apply to base pose when determining viewer location");
2398
2399 prop = RNA_def_property(srna, "navigation_rotation", PROP_FLOAT, PROP_QUATERNION);
2400 RNA_def_property_array(prop, 4);
2402 prop, "rna_XrSessionState_nav_rotation_get", "rna_XrSessionState_nav_rotation_set", nullptr);
2404 prop,
2405 "Navigation Rotation",
2406 "Rotation offset to apply to base pose when determining viewer rotation");
2407
2408 prop = RNA_def_property(srna, "navigation_scale", PROP_FLOAT, PROP_NONE);
2410 prop, "rna_XrSessionState_nav_scale_get", "rna_XrSessionState_nav_scale_set", nullptr);
2412 prop,
2413 "Navigation Scale",
2414 "Additional scale multiplier to apply to base scale when determining viewer scale");
2415
2416 prop = RNA_def_property(srna, "actionmaps", PROP_COLLECTION, PROP_NONE);
2417 RNA_def_property_struct_type(prop, "XrActionMap");
2419 "rna_XrSessionState_actionmaps_begin",
2420 "rna_iterator_listbase_next",
2421 "rna_iterator_listbase_end",
2422 "rna_iterator_listbase_get",
2423 "rna_XrSessionState_actionmaps_length",
2424 nullptr,
2425 nullptr,
2426 nullptr);
2427 RNA_def_property_ui_text(prop, "XR Action Maps", "");
2428 rna_def_xr_actionmaps(brna, prop);
2429
2430 prop = RNA_def_property(srna, "active_actionmap", PROP_INT, PROP_NONE);
2432 "rna_XrSessionState_active_actionmap_get",
2433 "rna_XrSessionState_active_actionmap_set",
2434 nullptr);
2435 RNA_def_property_ui_text(prop, "Active Action Map", "");
2436
2437 prop = RNA_def_property(srna, "selected_actionmap", PROP_INT, PROP_NONE);
2439 "rna_XrSessionState_selected_actionmap_get",
2440 "rna_XrSessionState_selected_actionmap_set",
2441 nullptr);
2442 RNA_def_property_ui_text(prop, "Selected Action Map", "");
2443}
2444
2447/* -------------------------------------------------------------------- */
2452{
2453 StructRNA *srna;
2454 PropertyRNA *prop;
2455
2456 srna = RNA_def_struct(brna, "XrEventData", nullptr);
2457 RNA_def_struct_ui_text(srna, "XrEventData", "XR Data for Window Manager Event");
2458
2459 prop = RNA_def_property(srna, "action_set", PROP_STRING, PROP_NONE);
2462 prop, "rna_XrEventData_action_set_get", "rna_XrEventData_action_set_length", nullptr);
2463 RNA_def_property_ui_text(prop, "Action Set", "XR action set name");
2464
2465 prop = RNA_def_property(srna, "action", PROP_STRING, PROP_NONE);
2468 prop, "rna_XrEventData_action_get", "rna_XrEventData_action_length", nullptr);
2469 RNA_def_property_ui_text(prop, "Action", "XR action name");
2470
2471 prop = RNA_def_property(srna, "user_path", PROP_STRING, PROP_NONE);
2474 prop, "rna_XrEventData_user_path_get", "rna_XrEventData_user_path_length", nullptr);
2475 RNA_def_property_ui_text(prop, "User Path", "User path of the action. E.g. \"/user/hand/left\"");
2476
2477 prop = RNA_def_property(srna, "user_path_other", PROP_STRING, PROP_NONE);
2480 "rna_XrEventData_user_path_other_get",
2481 "rna_XrEventData_user_path_other_length",
2482 nullptr);
2484 prop, "User Path Other", "Other user path, for bimanual actions. E.g. \"/user/hand/right\"");
2485
2486 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2489 RNA_def_property_enum_funcs(prop, "rna_XrEventData_type_get", nullptr, nullptr);
2490 RNA_def_property_ui_text(prop, "Type", "XR action type");
2491
2492 prop = RNA_def_property(srna, "state", PROP_FLOAT, PROP_NONE);
2493 RNA_def_property_array(prop, 2);
2495 RNA_def_property_float_funcs(prop, "rna_XrEventData_state_get", nullptr, nullptr);
2496 RNA_def_property_ui_text(prop, "State", "XR action values corresponding to type");
2497
2498 prop = RNA_def_property(srna, "state_other", PROP_FLOAT, PROP_NONE);
2499 RNA_def_property_array(prop, 2);
2501 RNA_def_property_float_funcs(prop, "rna_XrEventData_state_other_get", nullptr, nullptr);
2503 prop, "State Other", "State of the other user path for bimanual actions");
2504
2505 prop = RNA_def_property(srna, "float_threshold", PROP_FLOAT, PROP_NONE);
2507 RNA_def_property_float_funcs(prop, "rna_XrEventData_float_threshold_get", nullptr, nullptr);
2508 RNA_def_property_ui_text(prop, "Float Threshold", "Input threshold for float/2D vector actions");
2509
2510 prop = RNA_def_property(srna, "controller_location", PROP_FLOAT, PROP_TRANSLATION);
2511 RNA_def_property_array(prop, 3);
2513 RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_location_get", nullptr, nullptr);
2515 "Controller Location",
2516 "Location of the action's corresponding controller aim in world space");
2517
2518 prop = RNA_def_property(srna, "controller_rotation", PROP_FLOAT, PROP_QUATERNION);
2519 RNA_def_property_array(prop, 4);
2521 RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_rotation_get", nullptr, nullptr);
2523 "Controller Rotation",
2524 "Rotation of the action's corresponding controller aim in world space");
2525
2526 prop = RNA_def_property(srna, "controller_location_other", PROP_FLOAT, PROP_TRANSLATION);
2527 RNA_def_property_array(prop, 3);
2530 prop, "rna_XrEventData_controller_location_other_get", nullptr, nullptr);
2532 "Controller Location Other",
2533 "Controller aim location of the other user path for bimanual actions");
2534
2535 prop = RNA_def_property(srna, "controller_rotation_other", PROP_FLOAT, PROP_QUATERNION);
2536 RNA_def_property_array(prop, 4);
2539 prop, "rna_XrEventData_controller_rotation_other_get", nullptr, nullptr);
2541 "Controller Rotation Other",
2542 "Controller aim rotation of the other user path for bimanual actions");
2543
2544 prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
2546 RNA_def_property_boolean_funcs(prop, "rna_XrEventData_bimanual_get", nullptr);
2547 RNA_def_property_ui_text(prop, "Bimanual", "Whether bimanual interaction is occurring");
2548}
2549
2553{
2555
2560
2562}
2563
2564#endif /* RNA_RUNTIME */
wmWindowManager * CTX_wm_manager(const bContext *C)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert_unreachable()
Definition BLI_assert.h:97
#define BLI_assert(a)
Definition BLI_assert.h:50
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:269
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
int BLI_findindex(const struct ListBase *listbase, const void *vlink) 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])
void eul_to_quat(float quat[4], const float eul[3])
void copy_qt_qt(float q[4], const float a[4])
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])
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define UNUSED_VARS(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define ELEM(...)
#define BLT_I18NCONTEXT_COLOR
@ ID_WM
#define MAX_NAME
Definition DNA_defs.h:50
@ V3D_OFSDRAW_SHOW_OBJECT_EXTRAS
@ V3D_OFSDRAW_XR_SHOW_CUSTOM_OVERLAYS
@ V3D_OFSDRAW_SHOW_GRIDFLOOR
@ V3D_OFSDRAW_XR_SHOW_PASSTHROUGH
@ V3D_OFSDRAW_SHOW_ANNOTATION
@ V3D_OFSDRAW_SHOW_SELECTION
@ V3D_OFSDRAW_XR_SHOW_CONTROLLERS
#define OP_MAX_TYPENAME
eXrOpFlag
@ XR_OP_MODAL
@ XR_OP_RELEASE
@ XR_OP_PRESS
@ XR_POSE_GRIP
@ XR_POSE_AIM
eXrAxisFlag
@ XR_AXIS0_POS
@ XR_AXIS1_NEG
@ XR_AXIS1_POS
@ XR_AXIS0_NEG
@ XR_SESSION_USE_ABSOLUTE_TRACKING
@ XR_SESSION_USE_POSITION_TRACKING
@ XR_CONTROLLER_DRAW_LIGHT_RAY
@ XR_CONTROLLER_DRAW_LIGHT
@ XR_CONTROLLER_DRAW_DARK_RAY
@ XR_CONTROLLER_DRAW_DARK
#define XR_MAX_USER_PATH_LENGTH
#define XR_MAX_COMPONENT_PATH_LENGTH
eXrActionType
@ XR_FLOAT_INPUT
@ XR_BOOLEAN_INPUT
@ XR_VECTOR2F_INPUT
@ XR_POSE_INPUT
@ XR_VIBRATION_OUTPUT
@ XR_BASE_POSE_CUSTOM
@ XR_BASE_POSE_SCENE_CAMERA
@ XR_BASE_POSE_OBJECT
eXrActionFlag
@ XR_ACTION_BIMANUAL
eXrHapticFlag
@ XR_HAPTIC_PRESS
@ XR_HAPTIC_RELEASE
@ XR_HAPTIC_MATCHUSERPATHS
@ XR_HAPTIC_REPEAT
#define RNA_POINTER_INVALIDATE(ptr)
ParameterFlag
Definition RNA_types.hh:396
@ PARM_RNAPTR
Definition RNA_types.hh:399
@ PARM_REQUIRED
Definition RNA_types.hh:397
@ PARM_OUTPUT
Definition RNA_types.hh:398
@ FUNC_USE_REPORTS
Definition RNA_types.hh:680
@ FUNC_NO_SELF
Definition RNA_types.hh:673
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROP_COLLECTION
Definition RNA_types.hh:71
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:127
PropertyFlag
Definition RNA_types.hh:201
@ PROP_THICK_WRAP
Definition RNA_types.hh:312
@ PROP_ANIMATABLE
Definition RNA_types.hh:220
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_NEVER_NULL
Definition RNA_types.hh:266
@ PROP_DISTANCE
Definition RNA_types.hh:159
@ PROP_AXISANGLE
Definition RNA_types.hh:171
@ PROP_EULER
Definition RNA_types.hh:169
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_TRANSLATION
Definition RNA_types.hh:164
@ PROP_QUATERNION
Definition RNA_types.hh:170
constexpr PointerRNA PointerRNA_NULL
Definition RNA_types.hh:45
#define NC_WM
Definition WM_types.hh:341
#define ND_XR_DATA_CHANGED
Definition WM_types.hh:385
#define offsetof(t, d)
draw_view in_light_buf[] float
#define GS(x)
Definition iris.cc:202
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
static ulong state[N]
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_define_animate_sdna(bool animate)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
PropertyRNA * RNA_def_float_translation(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
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)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void rna_def_object_type_visibility_flags_common(StructRNA *srna, int noteflag, const char *update_func)
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.cc:1909
static const EnumPropertyItem rna_enum_xr_haptic_flags[]
Definition rna_xr.cc:1396
static void rna_def_xr_actionmap_bindings(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1482
static void rna_def_xr_session_state(BlenderRNA *brna)
Definition rna_xr.cc:2089
static void rna_def_xr_user_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1531
static const EnumPropertyItem rna_enum_xr_axis0_flags[]
Definition rna_xr.cc:1412
static const EnumPropertyItem rna_enum_xr_axis1_flags[]
Definition rna_xr.cc:1427
static void rna_def_xr_component_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1446
static void rna_def_xr_actionmap(BlenderRNA *brna)
Definition rna_xr.cc:1660
static const EnumPropertyItem rna_enum_xr_action_types[]
Definition rna_xr.cc:1357
static void rna_def_xr_actionmap_items(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1563
static const EnumPropertyItem rna_enum_xr_op_flags[]
Definition rna_xr.cc:1381
static void rna_def_xr_actionmaps(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1606
static void rna_def_xr_eventdata(BlenderRNA *brna)
Definition rna_xr.cc:2451
void RNA_def_xr(BlenderRNA *brna)
Definition rna_xr.cc:2552
#define FLT_MAX
Definition stdcycles.h:14
__int64 int64_t
Definition stdint.h:89
void * first
ListBase wm
Definition BKE_main.hh:239
ID * owner_id
Definition RNA_types.hh:40
StructRNA * type
Definition RNA_types.hh:41
void * data
Definition RNA_types.hh:42
PropertySubType subtype
IDProperty * op_properties
char haptic_name[64]
ListBase user_paths
struct PointerRNA * op_properties_ptr
ListBase items
char name[64]
int object_type_exclude_viewport
char path[64]
XrSessionSettings session_settings
struct wmXrRuntimeData * runtime
PointerRNA * ptr
Definition wm_files.cc:4126
wmOperatorType * ot
Definition wm_files.cc:4125
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
size_t WM_operator_bl_idname(char *dst, const char *src)
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)
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 wmXrPose *poses)
void WM_xr_haptic_action_stop(wmXrData *xr, const char *action_set_name, const char *action_name, const char *subaction_path)
bool WM_xr_action_set_create(wmXrData *xr, const char *action_set_name)
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)
bool WM_xr_controller_pose_actions_set(wmXrData *xr, const char *action_set_name, const char *grip_action_name, const char *aim_action_name)
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)
bool WM_xr_active_action_set_set(wmXrData *xr, const char *action_set_name, bool delayed)
short WM_xr_actionmap_active_index_get(const wmXrRuntimeData *runtime)
XrActionMapItem * WM_xr_actionmap_item_find(XrActionMap *actionmap, const char *name)
void WM_xr_actionmap_ensure_unique(wmXrRuntimeData *runtime, XrActionMap *actionmap)
XrActionMap * WM_xr_actionmap_find(wmXrRuntimeData *runtime, const char *name)
XrActionMapItem * WM_xr_actionmap_item_add_copy(XrActionMap *actionmap, XrActionMapItem *ami_src)
XrActionMapItem * WM_xr_actionmap_item_new(XrActionMap *actionmap, const char *name, bool replace_existing)
void WM_xr_actionmap_selected_index_set(wmXrRuntimeData *runtime, short idx)
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)
XrActionMapBinding * WM_xr_actionmap_binding_find(XrActionMapItem *ami, const char *name)
void WM_xr_actionmap_active_index_set(wmXrRuntimeData *runtime, short idx)
short WM_xr_actionmap_selected_index_get(const wmXrRuntimeData *runtime)
void WM_xr_actionmap_item_ensure_unique(XrActionMap *actionmap, XrActionMapItem *ami)
XrActionMap * WM_xr_actionmap_new(wmXrRuntimeData *runtime, const char *name, bool replace_existing)
bool WM_xr_actionmap_binding_remove(XrActionMapItem *ami, XrActionMapBinding *amb)
ListBase * WM_xr_actionmaps_get(wmXrRuntimeData *runtime)
void WM_xr_actionmap_binding_ensure_unique(XrActionMapItem *ami, XrActionMapBinding *amb)
XrActionMap * WM_xr_actionmap_add_copy(wmXrRuntimeData *runtime, XrActionMap *am_src)
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)
void WM_xr_session_state_nav_scale_set(wmXrData *xr, float scale)
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_aim_location_get(const wmXrData *xr, uint subaction_idx, float r_location[3])
bool WM_xr_session_state_controller_aim_rotation_get(const wmXrData *xr, uint 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)
bool WM_xr_session_state_controller_grip_location_get(const wmXrData *xr, uint subaction_idx, float r_location[3])
bool WM_xr_session_state_controller_grip_rotation_get(const wmXrData *xr, uint subaction_idx, float r_rotation[4])
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])