Blender V5.0
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
8
9#include "BLT_translation.hh"
10
12#include "DNA_xr_types.h"
13
14#include "RNA_define.hh"
15#include "RNA_enum_types.hh"
16
17#include "WM_types.hh"
18
19#include "rna_internal.hh"
20
21#ifdef RNA_RUNTIME
22
23# include "BLI_math_rotation.h"
24# include "BLI_math_vector.h"
25
26# include "WM_api.hh"
27
28/* -------------------------------------------------------------------- */
29
30# ifdef WITH_XR_OPENXR
31static 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
38 wmWindowManager *wm = (wmWindowManager *)ptr->owner_id;
39 BLI_assert(wm && (GS(wm->id.name) == ID_WM));
40
41 return &wm->xr;
42}
43# endif
44
45/* -------------------------------------------------------------------- */
48
49static XrComponentPath *rna_XrComponentPath_new(XrActionMapBinding *amb, const char *path_str)
50{
51# ifdef WITH_XR_OPENXR
52 XrComponentPath *component_path = MEM_callocN<XrComponentPath>(__func__);
53 STRNCPY(component_path->path, path_str);
54 BLI_addtail(&amb->component_paths, component_path);
55 return component_path;
56# else
57 UNUSED_VARS(amb, path_str);
58 return nullptr;
59# endif
60}
61
62static void rna_XrComponentPath_remove(XrActionMapBinding *amb, PointerRNA *component_path_ptr)
63{
64# ifdef WITH_XR_OPENXR
65 XrComponentPath *component_path = static_cast<XrComponentPath *>(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 component_path_ptr->invalidate();
71# else
72 UNUSED_VARS(amb, component_path_ptr);
73# endif
74}
75
76static XrComponentPath *rna_XrComponentPath_find(XrActionMapBinding *amb, const char *path_str)
77{
78# ifdef WITH_XR_OPENXR
79 return static_cast<XrComponentPath *>(
81# else
82 UNUSED_VARS(amb, path_str);
83 return nullptr;
84# endif
85}
86
87static XrActionMapBinding *rna_XrActionMapBinding_new(XrActionMapItem *ami,
88 const char *name,
89 bool replace_existing)
90{
91# ifdef WITH_XR_OPENXR
92 return WM_xr_actionmap_binding_new(ami, name, replace_existing);
93# else
94 UNUSED_VARS(ami, name, replace_existing);
95 return nullptr;
96# endif
97}
98
99static XrActionMapBinding *rna_XrActionMapBinding_new_from_binding(XrActionMapItem *ami,
100 XrActionMapBinding *amb_src)
101{
102# ifdef WITH_XR_OPENXR
103 return WM_xr_actionmap_binding_add_copy(ami, amb_src);
104# else
105 UNUSED_VARS(ami, amb_src);
106 return nullptr;
107# endif
108}
109
110static void rna_XrActionMapBinding_remove(XrActionMapItem *ami,
111 ReportList *reports,
112 PointerRNA *amb_ptr)
113{
114# ifdef WITH_XR_OPENXR
115 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(amb_ptr->data);
116 if (WM_xr_actionmap_binding_remove(ami, amb) == false) {
117 BKE_reportf(reports,
118 RPT_ERROR,
119 "ActionMapBinding '%s' cannot be removed from '%s'",
120 amb->name,
121 ami->name);
122 return;
123 }
124 amb_ptr->invalidate();
125# else
126 UNUSED_VARS(ami, reports, amb_ptr);
127# endif
128}
129
130static XrActionMapBinding *rna_XrActionMapBinding_find(XrActionMapItem *ami, const char *name)
131{
132# ifdef WITH_XR_OPENXR
134# else
135 UNUSED_VARS(ami, name);
136 return nullptr;
137# endif
138}
139
140static void rna_XrActionMapBinding_component_paths_begin(CollectionPropertyIterator *iter,
142{
143# ifdef WITH_XR_OPENXR
145 rna_iterator_listbase_begin(iter, ptr, &amb->component_paths, nullptr);
146# else
147 UNUSED_VARS(iter, ptr);
148# endif
149}
150
151static int rna_XrActionMapBinding_component_paths_length(PointerRNA *ptr)
152{
153# ifdef WITH_XR_OPENXR
156# else
158 return 0;
159# endif
160}
161
162static int rna_XrActionMapBinding_axis0_region_get(PointerRNA *ptr)
163{
164# ifdef WITH_XR_OPENXR
165 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
166 if ((amb->axis_flag & XR_AXIS0_POS) != 0) {
167 return XR_AXIS0_POS;
168 }
169 if ((amb->axis_flag & XR_AXIS0_NEG) != 0) {
170 return XR_AXIS0_NEG;
171 }
172# else
174# endif
175 return 0;
176}
177
178static void rna_XrActionMapBinding_axis0_region_set(PointerRNA *ptr, int value)
179{
180# ifdef WITH_XR_OPENXR
181 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
183 amb->axis_flag |= value;
184# else
185 UNUSED_VARS(ptr, value);
186# endif
187}
188
189static int rna_XrActionMapBinding_axis1_region_get(PointerRNA *ptr)
190{
191# ifdef WITH_XR_OPENXR
192 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
193 if ((amb->axis_flag & XR_AXIS1_POS) != 0) {
194 return XR_AXIS1_POS;
195 }
196 if ((amb->axis_flag & XR_AXIS1_NEG) != 0) {
197 return XR_AXIS1_NEG;
198 }
199# else
201# endif
202 return 0;
203}
204
205static void rna_XrActionMapBinding_axis1_region_set(PointerRNA *ptr, int value)
206{
207# ifdef WITH_XR_OPENXR
208 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
210 amb->axis_flag |= value;
211# else
212 UNUSED_VARS(ptr, value);
213# endif
214}
215
216static void rna_XrActionMapBinding_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
217{
218# ifdef WITH_XR_OPENXR
219 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
220 if (wm && wm->xr.runtime) {
221 ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
223 XrActionMap *actionmap = static_cast<XrActionMap *>(BLI_findlink(actionmaps, idx));
224 if (actionmap) {
225 XrActionMapItem *ami = static_cast<XrActionMapItem *>(
226 BLI_findlink(&actionmap->items, actionmap->selitem));
227 if (ami) {
228 XrActionMapBinding *amb = static_cast<XrActionMapBinding *>(ptr->data);
230 }
231 }
232 }
233# else
234 UNUSED_VARS(bmain, ptr);
235# endif
236}
237
238static XrUserPath *rna_XrUserPath_new(XrActionMapItem *ami, const char *path_str)
239{
240# ifdef WITH_XR_OPENXR
241 XrUserPath *user_path = MEM_callocN<XrUserPath>(__func__);
242 STRNCPY(user_path->path, path_str);
243 BLI_addtail(&ami->user_paths, user_path);
244 return user_path;
245# else
246 UNUSED_VARS(ami, path_str);
247 return nullptr;
248# endif
249}
250
251static void rna_XrUserPath_remove(XrActionMapItem *ami, PointerRNA *user_path_ptr)
252{
253# ifdef WITH_XR_OPENXR
254 XrUserPath *user_path = static_cast<XrUserPath *>(user_path_ptr->data);
255 int idx = BLI_findindex(&ami->user_paths, user_path);
256 if (idx != -1) {
257 BLI_freelinkN(&ami->user_paths, user_path);
258 }
259 user_path_ptr->invalidate();
260# else
261 UNUSED_VARS(ami, user_path_ptr);
262# endif
263}
264
265static XrUserPath *rna_XrUserPath_find(XrActionMapItem *ami, const char *path_str)
266{
267# ifdef WITH_XR_OPENXR
268 return static_cast<XrUserPath *>(
269 BLI_findstring(&ami->user_paths, path_str, offsetof(XrUserPath, path)));
270# else
271 UNUSED_VARS(ami, path_str);
272 return nullptr;
273# endif
274}
275
276static XrActionMapItem *rna_XrActionMapItem_new(XrActionMap *am,
277 const char *name,
278 bool replace_existing)
279{
280# ifdef WITH_XR_OPENXR
281 return WM_xr_actionmap_item_new(am, name, replace_existing);
282# else
283 UNUSED_VARS(am, name, replace_existing);
284 return nullptr;
285# endif
286}
287
288static XrActionMapItem *rna_XrActionMapItem_new_from_item(XrActionMap *am,
289 XrActionMapItem *ami_src)
290{
291# ifdef WITH_XR_OPENXR
292 return WM_xr_actionmap_item_add_copy(am, ami_src);
293# else
294 UNUSED_VARS(am, ami_src);
295 return nullptr;
296# endif
297}
298
299static void rna_XrActionMapItem_remove(XrActionMap *am, ReportList *reports, PointerRNA *ami_ptr)
300{
301# ifdef WITH_XR_OPENXR
302 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ami_ptr->data);
303 if (WM_xr_actionmap_item_remove(am, ami) == false) {
305 reports, RPT_ERROR, "ActionMapItem '%s' cannot be removed from '%s'", ami->name, am->name);
306 return;
307 }
308 ami_ptr->invalidate();
309# else
310 UNUSED_VARS(am, reports, ami_ptr);
311# endif
312}
313
314static XrActionMapItem *rna_XrActionMapItem_find(XrActionMap *am, const char *name)
315{
316# ifdef WITH_XR_OPENXR
318# else
319 UNUSED_VARS(am, name);
320 return nullptr;
321# endif
322}
323
324static void rna_XrActionMapItem_user_paths_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
325{
326# ifdef WITH_XR_OPENXR
327 XrActionMapItem *ami = (XrActionMapItem *)ptr->data;
328 rna_iterator_listbase_begin(iter, ptr, &ami->user_paths, nullptr);
329# else
330 UNUSED_VARS(iter, ptr);
331# endif
332}
333
334static int rna_XrActionMapItem_user_paths_length(PointerRNA *ptr)
335{
336# ifdef WITH_XR_OPENXR
337 XrActionMapItem *ami = (XrActionMapItem *)ptr->data;
338 return BLI_listbase_count(&ami->user_paths);
339# else
341 return 0;
342# endif
343}
344
345static void rna_XrActionMapItem_op_name_get(PointerRNA *ptr, char *value)
346{
347# ifdef WITH_XR_OPENXR
348 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
349 if (ami->op[0]) {
350 if (ami->op_properties_ptr) {
352 if (ot) {
353 strcpy(value, WM_operatortype_name(ot, ami->op_properties_ptr).c_str());
354 return;
355 }
356 }
357 strcpy(value, ami->op);
358 return;
359 }
360# else
362# endif
363 value[0] = '\0';
364}
365
366static int rna_XrActionMapItem_op_name_length(PointerRNA *ptr)
367{
368# ifdef WITH_XR_OPENXR
369 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
370 if (ami->op[0]) {
371 if (ami->op_properties_ptr) {
373 if (ot) {
374 return strlen(WM_operatortype_name(ot, ami->op_properties_ptr).c_str());
375 }
376 }
377 return strlen(ami->op);
378 }
379# else
381# endif
382 return 0;
383}
384
385static PointerRNA rna_XrActionMapItem_op_properties_get(PointerRNA *ptr)
386{
387# ifdef WITH_XR_OPENXR
388 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
389 if (ami->op_properties_ptr) {
390 return *(ami->op_properties_ptr);
391 }
392# else
394# endif
395 return PointerRNA_NULL;
396}
397
398static bool rna_XrActionMapItem_bimanual_get(PointerRNA *ptr)
399{
400# ifdef WITH_XR_OPENXR
401 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
402 if ((ami->action_flag & XR_ACTION_BIMANUAL) != 0) {
403 return true;
404 }
405# else
407# endif
408 return false;
409}
410
411static void rna_XrActionMapItem_bimanual_set(PointerRNA *ptr, bool value)
412{
413# ifdef WITH_XR_OPENXR
414 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
416# else
417 UNUSED_VARS(ptr, value);
418# endif
419}
420
421static bool rna_XrActionMapItem_haptic_match_user_paths_get(PointerRNA *ptr)
422{
423# ifdef WITH_XR_OPENXR
424 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
425 if ((ami->haptic_flag & XR_HAPTIC_MATCHUSERPATHS) != 0) {
426 return true;
427 }
428# else
430# endif
431 return false;
432}
433
434static void rna_XrActionMapItem_haptic_match_user_paths_set(PointerRNA *ptr, bool value)
435{
436# ifdef WITH_XR_OPENXR
437 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
439# else
440 UNUSED_VARS(ptr, value);
441# endif
442}
443
444static int rna_XrActionMapItem_haptic_mode_get(PointerRNA *ptr)
445{
446# ifdef WITH_XR_OPENXR
447 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
448 if ((ami->haptic_flag & XR_HAPTIC_RELEASE) != 0) {
449 return ((ami->haptic_flag & XR_HAPTIC_PRESS) != 0) ? (XR_HAPTIC_PRESS | XR_HAPTIC_RELEASE) :
451 }
452 if ((ami->haptic_flag & XR_HAPTIC_REPEAT) != 0) {
453 return XR_HAPTIC_REPEAT;
454 }
455# else
457# endif
458 return XR_HAPTIC_PRESS;
459}
460
461static void rna_XrActionMapItem_haptic_mode_set(PointerRNA *ptr, int value)
462{
463# ifdef WITH_XR_OPENXR
464 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
466 ami->haptic_flag |= value;
467# else
468 UNUSED_VARS(ptr, value);
469# endif
470}
471
472static bool rna_XrActionMapItem_pose_is_controller_grip_get(PointerRNA *ptr)
473{
474# ifdef WITH_XR_OPENXR
475 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
476 if ((ami->pose_flag & XR_POSE_GRIP) != 0) {
477 return true;
478 }
479# else
481# endif
482 return false;
483}
484
485static void rna_XrActionMapItem_pose_is_controller_grip_set(PointerRNA *ptr, bool value)
486{
487# ifdef WITH_XR_OPENXR
488 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
490# else
491 UNUSED_VARS(ptr, value);
492# endif
493}
494
495static bool rna_XrActionMapItem_pose_is_controller_aim_get(PointerRNA *ptr)
496{
497# ifdef WITH_XR_OPENXR
498 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
499 if ((ami->pose_flag & XR_POSE_AIM) != 0) {
500 return true;
501 }
502# else
504# endif
505 return false;
506}
507
508static void rna_XrActionMapItem_pose_is_controller_aim_set(PointerRNA *ptr, bool value)
509{
510# ifdef WITH_XR_OPENXR
511 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
513# else
514 UNUSED_VARS(ptr, value);
515# endif
516}
517
518static void rna_XrActionMapItem_bindings_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
519{
520# ifdef WITH_XR_OPENXR
521 XrActionMapItem *ami = (XrActionMapItem *)ptr->data;
522 rna_iterator_listbase_begin(iter, ptr, &ami->bindings, nullptr);
523# else
524 UNUSED_VARS(iter, ptr);
525# endif
526}
527
528static int rna_XrActionMapItem_bindings_length(PointerRNA *ptr)
529{
530# ifdef WITH_XR_OPENXR
531 XrActionMapItem *ami = (XrActionMapItem *)ptr->data;
532 return BLI_listbase_count(&ami->bindings);
533# else
535 return 0;
536# endif
537}
538
539static void rna_XrActionMapItem_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
540{
541# ifdef WITH_XR_OPENXR
542 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
543 if (wm && wm->xr.runtime) {
544 ListBase *actionmaps = WM_xr_actionmaps_get(wm->xr.runtime);
546 XrActionMap *actionmap = static_cast<XrActionMap *>(BLI_findlink(actionmaps, idx));
547 if (actionmap) {
548 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
550 }
551 }
552# else
553 UNUSED_VARS(bmain, ptr);
554# endif
555}
556
557static void rna_XrActionMapItem_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
558{
559# ifdef WITH_XR_OPENXR
560 XrActionMapItem *ami = static_cast<XrActionMapItem *>(ptr->data);
562# else
564# endif
565}
566
567static XrActionMap *rna_XrActionMap_new(PointerRNA *ptr, const char *name, bool replace_existing)
568{
569# ifdef WITH_XR_OPENXR
570 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
571 return WM_xr_actionmap_new(xr->runtime, name, replace_existing);
572# else
573 UNUSED_VARS(ptr, name, replace_existing);
574 return nullptr;
575# endif
576}
577
578static XrActionMap *rna_XrActionMap_new_from_actionmap(PointerRNA *ptr, XrActionMap *am_src)
579{
580# ifdef WITH_XR_OPENXR
581 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
582 return WM_xr_actionmap_add_copy(xr->runtime, am_src);
583# else
584 UNUSED_VARS(ptr, am_src);
585 return nullptr;
586# endif
587}
588
589static void rna_XrActionMap_remove(ReportList *reports, PointerRNA *ptr, PointerRNA *actionmap_ptr)
590{
591# ifdef WITH_XR_OPENXR
592 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
593 XrActionMap *actionmap = static_cast<XrActionMap *>(actionmap_ptr->data);
594 if (WM_xr_actionmap_remove(xr->runtime, actionmap) == false) {
595 BKE_reportf(reports, RPT_ERROR, "ActionMap '%s' cannot be removed", actionmap->name);
596 return;
597 }
598 actionmap_ptr->invalidate();
599# else
600 UNUSED_VARS(ptr, reports, actionmap_ptr);
601# endif
602}
603
604static XrActionMap *rna_XrActionMap_find(PointerRNA *ptr, const char *name)
605{
606# ifdef WITH_XR_OPENXR
607 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
608 return WM_xr_actionmap_find(xr->runtime, name);
609# else
611 return nullptr;
612# endif
613}
614
615static void rna_XrActionMap_items_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
616{
617# ifdef WITH_XR_OPENXR
618 XrActionMap *actionmap = (XrActionMap *)ptr->data;
619 rna_iterator_listbase_begin(iter, ptr, &actionmap->items, nullptr);
620# else
621 UNUSED_VARS(iter, ptr);
622# endif
623}
624
625static int rna_XrActionMap_items_length(PointerRNA *ptr)
626{
627# ifdef WITH_XR_OPENXR
628 XrActionMap *actionmap = (XrActionMap *)ptr->data;
629 return BLI_listbase_count(&actionmap->items);
630# else
632 return 0;
633# endif
634}
635
636static void rna_XrActionMap_name_update(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
637{
638# ifdef WITH_XR_OPENXR
639 wmWindowManager *wm = static_cast<wmWindowManager *>(bmain->wm.first);
640 if (wm && wm->xr.runtime) {
641 XrActionMap *actionmap = static_cast<XrActionMap *>(ptr->data);
643 }
644# else
645 UNUSED_VARS(bmain, ptr);
646# endif
647}
648
650
651/* -------------------------------------------------------------------- */
654
655static bool rna_XrSessionSettings_use_positional_tracking_get(PointerRNA *ptr)
656{
657# ifdef WITH_XR_OPENXR
658 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
660# else
662 return false;
663# endif
664}
665
666static void rna_XrSessionSettings_use_positional_tracking_set(PointerRNA *ptr, bool value)
667{
668# ifdef WITH_XR_OPENXR
669 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
671# else
672 UNUSED_VARS(ptr, value);
673# endif
674}
675
676static bool rna_XrSessionSettings_use_absolute_tracking_get(PointerRNA *ptr)
677{
678# ifdef WITH_XR_OPENXR
679 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
681# else
683 return false;
684# endif
685}
686
687static void rna_XrSessionSettings_use_absolute_tracking_set(PointerRNA *ptr, bool value)
688{
689# ifdef WITH_XR_OPENXR
690 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
692# else
693 UNUSED_VARS(ptr, value);
694# endif
695}
696
697static int rna_XrSessionSettings_icon_from_show_object_viewport_get(PointerRNA *ptr)
698{
699# ifdef WITH_XR_OPENXR
700 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
703# if 0
704 /* For the future when selection in VR is reliably supported. */
706# else
707 nullptr
708# endif
709 );
710# else
712 return ICON_NONE;
713# endif
714}
715
717
718/* -------------------------------------------------------------------- */
721
722static bool rna_XrSessionState_is_running(bContext *C)
723{
724# ifdef WITH_XR_OPENXR
725 const wmWindowManager *wm = CTX_wm_manager(C);
726 return WM_xr_session_exists(&wm->xr);
727# else
728 UNUSED_VARS(C);
729 return false;
730# endif
731}
732
733static void rna_XrSessionState_reset_to_base_pose(bContext *C)
734{
735# ifdef WITH_XR_OPENXR
738# else
739 UNUSED_VARS(C);
740# endif
741}
742
743static bool rna_XrSessionState_action_set_create(bContext *C, XrActionMap *actionmap)
744{
745# ifdef WITH_XR_OPENXR
747 return WM_xr_action_set_create(&wm->xr, actionmap->name);
748# else
749 UNUSED_VARS(C, actionmap);
750 return false;
751# endif
752}
753
754static bool rna_XrSessionState_action_create(bContext *C,
755 XrActionMap *actionmap,
756 XrActionMapItem *ami)
757{
758# ifdef WITH_XR_OPENXR
761 return false;
762 }
763
764 const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
765 const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
766 wmOperatorType *ot = nullptr;
767 IDProperty *op_properties = nullptr;
768 int64_t haptic_duration_msec;
769
770 if (is_button_action) {
771 if (ami->op[0]) {
772 char idname[OP_MAX_TYPENAME];
773 WM_operator_bl_idname(idname, ami->op);
774 ot = WM_operatortype_find(idname, true);
775 if (ot) {
776 op_properties = ami->op_properties;
777 }
778 }
779
780 haptic_duration_msec = int64_t(ami->haptic_duration * 1000.0f);
781 }
782
783 return WM_xr_action_create(&wm->xr,
784 actionmap->name,
785 ami->name,
786 eXrActionType(ami->type),
787 &ami->user_paths,
788 ot,
789 op_properties,
790 is_button_action ? ami->haptic_name : nullptr,
791 is_button_action ? &haptic_duration_msec : nullptr,
792 is_button_action ? &ami->haptic_frequency : nullptr,
793 is_button_action ? &ami->haptic_amplitude : nullptr,
794 eXrOpFlag(ami->op_flag),
797# else
798 UNUSED_VARS(C, actionmap, ami);
799 return false;
800# endif
801}
802
803static bool rna_XrSessionState_action_binding_create(bContext *C,
804 XrActionMap *actionmap,
805 XrActionMapItem *ami,
807{
808# ifdef WITH_XR_OPENXR
810 const int count_user_paths = BLI_listbase_count(&ami->user_paths);
811 const int count_component_paths = BLI_listbase_count(&amb->component_paths);
812 if (count_user_paths < 1 || (count_user_paths != count_component_paths)) {
813 return false;
814 }
815
816 const bool is_float_action = ELEM(ami->type, XR_FLOAT_INPUT, XR_VECTOR2F_INPUT);
817 const bool is_button_action = (is_float_action || ami->type == XR_BOOLEAN_INPUT);
818 const bool is_pose_action = (ami->type == XR_POSE_INPUT);
819 float float_thresholds[2];
820 eXrAxisFlag axis_flags[2];
821 wmXrPose poses[2];
822
823 if (is_float_action) {
824 float_thresholds[0] = float_thresholds[1] = amb->float_threshold;
825 }
826 if (is_button_action) {
827 axis_flags[0] = axis_flags[1] = eXrAxisFlag(amb->axis_flag);
828 }
829 if (is_pose_action) {
830 copy_v3_v3(poses[0].position, amb->pose_location);
831 eul_to_quat(poses[0].orientation_quat, amb->pose_rotation);
832 normalize_qt(poses[0].orientation_quat);
833 memcpy(&poses[1], &poses[0], sizeof(poses[1]));
834 }
835
837 actionmap->name,
838 ami->name,
839 amb->profile,
840 &ami->user_paths,
841 &amb->component_paths,
842 is_float_action ? float_thresholds : nullptr,
843 is_button_action ? axis_flags : nullptr,
844 is_pose_action ? poses : nullptr);
845# else
846 UNUSED_VARS(C, actionmap, ami, amb);
847 return false;
848# endif
849}
850
851bool rna_XrSessionState_active_action_set_set(bContext *C, const char *action_set_name)
852{
853# ifdef WITH_XR_OPENXR
855 return WM_xr_active_action_set_set(&wm->xr, action_set_name, true);
856# else
857 UNUSED_VARS(C, action_set_name);
858 return false;
859# endif
860}
861
862bool rna_XrSessionState_controller_pose_actions_set(bContext *C,
863 const char *action_set_name,
864 const char *grip_action_name,
865 const char *aim_action_name)
866{
867# ifdef WITH_XR_OPENXR
870 &wm->xr, action_set_name, grip_action_name, aim_action_name);
871# else
872 UNUSED_VARS(C, action_set_name, grip_action_name, aim_action_name);
873 return false;
874# endif
875}
876
877void rna_XrSessionState_action_state_get(bContext *C,
878 const char *action_set_name,
879 const char *action_name,
880 const char *user_path,
881 float r_state[2])
882{
883# ifdef WITH_XR_OPENXR
885 wmXrActionState state;
886 if (WM_xr_action_state_get(&wm->xr, action_set_name, action_name, user_path, &state)) {
887 switch (state.type) {
888 case XR_BOOLEAN_INPUT:
889 r_state[0] = float(state.state_boolean);
890 r_state[1] = 0.0f;
891 return;
892 case XR_FLOAT_INPUT:
893 r_state[0] = state.state_float;
894 r_state[1] = 0.0f;
895 return;
897 copy_v2_v2(r_state, state.state_vector2f);
898 return;
899 case XR_POSE_INPUT:
902 break;
903 }
904 }
905# else
906 UNUSED_VARS(C, action_set_name, action_name, user_path);
907# endif
908 zero_v2(r_state);
909}
910
911bool rna_XrSessionState_haptic_action_apply(bContext *C,
912 const char *action_set_name,
913 const char *action_name,
914 const char *user_path,
915 float duration,
916 float frequency,
917 float amplitude)
918{
919# ifdef WITH_XR_OPENXR
921 int64_t duration_msec = int64_t(duration * 1000.0f);
922 return WM_xr_haptic_action_apply(&wm->xr,
923 action_set_name,
924 action_name,
925 user_path[0] ? user_path : nullptr,
926 &duration_msec,
927 &frequency,
928 &amplitude);
929# else
930 UNUSED_VARS(C, action_set_name, action_name, user_path, duration, frequency, amplitude);
931 return false;
932# endif
933}
934
935void rna_XrSessionState_haptic_action_stop(bContext *C,
936 const char *action_set_name,
937 const char *action_name,
938 const char *user_path)
939{
940# ifdef WITH_XR_OPENXR
943 &wm->xr, action_set_name, action_name, user_path[0] ? user_path : nullptr);
944# else
945 UNUSED_VARS(C, action_set_name, action_name, user_path);
946# endif
947}
948
949static void rna_XrSessionState_controller_grip_location_get(bContext *C,
950 int index,
951 float r_values[3])
952{
953# ifdef WITH_XR_OPENXR
954 const wmWindowManager *wm = CTX_wm_manager(C);
956# else
957 UNUSED_VARS(C, index);
958 zero_v3(r_values);
959# endif
960}
961
962static void rna_XrSessionState_controller_grip_rotation_get(bContext *C,
963 int index,
964 float r_values[4])
965{
966# ifdef WITH_XR_OPENXR
967 const wmWindowManager *wm = CTX_wm_manager(C);
969# else
970 UNUSED_VARS(C, index);
971 unit_qt(r_values);
972# endif
973}
974
975static void rna_XrSessionState_controller_aim_location_get(bContext *C,
976 int index,
977 float r_values[3])
978{
979# ifdef WITH_XR_OPENXR
980 const wmWindowManager *wm = CTX_wm_manager(C);
982# else
983 UNUSED_VARS(C, index);
984 zero_v3(r_values);
985# endif
986}
987
988static void rna_XrSessionState_controller_aim_rotation_get(bContext *C,
989 int index,
990 float r_values[4])
991{
992# ifdef WITH_XR_OPENXR
993 const wmWindowManager *wm = CTX_wm_manager(C);
995# else
996 UNUSED_VARS(C, index);
997 unit_qt(r_values);
998# endif
999}
1000
1001static void rna_XrSessionState_viewer_pose_location_get(PointerRNA *ptr, float *r_values)
1002{
1003# ifdef WITH_XR_OPENXR
1004 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1006# else
1008 zero_v3(r_values);
1009# endif
1010}
1011
1012static void rna_XrSessionState_viewer_pose_rotation_get(PointerRNA *ptr, float *r_values)
1013{
1014# ifdef WITH_XR_OPENXR
1015 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1017# else
1019 unit_qt(r_values);
1020# endif
1021}
1022
1023static void rna_XrSessionState_nav_location_get(PointerRNA *ptr, float *r_values)
1024{
1025# ifdef WITH_XR_OPENXR
1026 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1028# else
1030 zero_v3(r_values);
1031# endif
1032}
1033
1034static void rna_XrSessionState_nav_location_set(PointerRNA *ptr, const float *values)
1035{
1036# ifdef WITH_XR_OPENXR
1037 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1039# else
1040 UNUSED_VARS(ptr, values);
1041# endif
1042}
1043
1044static void rna_XrSessionState_nav_rotation_get(PointerRNA *ptr, float *r_values)
1045{
1046# ifdef WITH_XR_OPENXR
1047 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1049# else
1051 unit_qt(r_values);
1052# endif
1053}
1054
1055static void rna_XrSessionState_nav_rotation_set(PointerRNA *ptr, const float *values)
1056{
1057# ifdef WITH_XR_OPENXR
1058 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1060# else
1061 UNUSED_VARS(ptr, values);
1062# endif
1063}
1064
1065static float rna_XrSessionState_nav_scale_get(PointerRNA *ptr)
1066{
1067 float value;
1068# ifdef WITH_XR_OPENXR
1069 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1071# else
1073 value = 1.0f;
1074# endif
1075 return value;
1076}
1077
1078static void rna_XrSessionState_nav_scale_set(PointerRNA *ptr, float value)
1079{
1080# ifdef WITH_XR_OPENXR
1081 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1083# else
1084 UNUSED_VARS(ptr, value);
1085# endif
1086}
1087
1088static void rna_XrSessionState_actionmaps_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
1089{
1090# ifdef WITH_XR_OPENXR
1091 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1093 rna_iterator_listbase_begin(iter, ptr, lb, nullptr);
1094# else
1095 UNUSED_VARS(iter, ptr);
1096# endif
1097}
1098
1099static int rna_XrSessionState_actionmaps_length(PointerRNA *ptr)
1100{
1101# ifdef WITH_XR_OPENXR
1102 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1104 return BLI_listbase_count(lb);
1105# else
1107 return 0;
1108# endif
1109}
1110
1111static int rna_XrSessionState_active_actionmap_get(PointerRNA *ptr)
1112{
1113# ifdef WITH_XR_OPENXR
1114 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1116# else
1118 return -1;
1119# endif
1120}
1121
1122static void rna_XrSessionState_active_actionmap_set(PointerRNA *ptr, int value)
1123{
1124# ifdef WITH_XR_OPENXR
1125 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1126 WM_xr_actionmap_active_index_set(xr->runtime, short(value));
1127# else
1128 UNUSED_VARS(ptr, value);
1129# endif
1130}
1131
1132static int rna_XrSessionState_selected_actionmap_get(PointerRNA *ptr)
1133{
1134# ifdef WITH_XR_OPENXR
1135 const wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1137# else
1139 return -1;
1140# endif
1141}
1142
1143static void rna_XrSessionState_selected_actionmap_set(PointerRNA *ptr, int value)
1144{
1145# ifdef WITH_XR_OPENXR
1146 wmXrData *xr = rna_XrSession_wm_xr_data_get(ptr);
1148# else
1149 UNUSED_VARS(ptr, value);
1150# endif
1151}
1152
1154
1155/* -------------------------------------------------------------------- */
1158
1159static void rna_XrEventData_action_set_get(PointerRNA *ptr, char *r_value)
1160{
1161# ifdef WITH_XR_OPENXR
1162 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1163 strcpy(r_value, data->action_set);
1164# else
1166 r_value[0] = '\0';
1167# endif
1168}
1169
1170static int rna_XrEventData_action_set_length(PointerRNA *ptr)
1171{
1172# ifdef WITH_XR_OPENXR
1173 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1174 return strlen(data->action_set);
1175# else
1177 return 0;
1178# endif
1179}
1180
1181static void rna_XrEventData_action_get(PointerRNA *ptr, char *r_value)
1182{
1183# ifdef WITH_XR_OPENXR
1184 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1185 strcpy(r_value, data->action);
1186# else
1188 r_value[0] = '\0';
1189# endif
1190}
1191
1192static int rna_XrEventData_action_length(PointerRNA *ptr)
1193{
1194# ifdef WITH_XR_OPENXR
1195 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1196 return strlen(data->action);
1197# else
1199 return 0;
1200# endif
1201}
1202
1203static void rna_XrEventData_user_path_get(PointerRNA *ptr, char *r_value)
1204{
1205# ifdef WITH_XR_OPENXR
1206 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1207 strcpy(r_value, data->user_path);
1208# else
1210 r_value[0] = '\0';
1211# endif
1212}
1213
1214static int rna_XrEventData_user_path_length(PointerRNA *ptr)
1215{
1216# ifdef WITH_XR_OPENXR
1217 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1218 return strlen(data->user_path);
1219# else
1221 return 0;
1222# endif
1223}
1224
1225static void rna_XrEventData_user_path_other_get(PointerRNA *ptr, char *r_value)
1226{
1227# ifdef WITH_XR_OPENXR
1228 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1229 strcpy(r_value, data->user_path_other);
1230# else
1232 r_value[0] = '\0';
1233# endif
1234}
1235
1236static int rna_XrEventData_user_path_other_length(PointerRNA *ptr)
1237{
1238# ifdef WITH_XR_OPENXR
1239 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1240 return strlen(data->user_path_other);
1241# else
1243 return 0;
1244# endif
1245}
1246
1247static int rna_XrEventData_type_get(PointerRNA *ptr)
1248{
1249# ifdef WITH_XR_OPENXR
1250 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1251 return data->type;
1252# else
1254 return 0;
1255# endif
1256}
1257
1258static void rna_XrEventData_state_get(PointerRNA *ptr, float r_values[2])
1259{
1260# ifdef WITH_XR_OPENXR
1261 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1262 copy_v2_v2(r_values, data->state);
1263# else
1265 zero_v2(r_values);
1266# endif
1267}
1268
1269static void rna_XrEventData_state_other_get(PointerRNA *ptr, float r_values[2])
1270{
1271# ifdef WITH_XR_OPENXR
1272 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1273 copy_v2_v2(r_values, data->state_other);
1274# else
1276 zero_v2(r_values);
1277# endif
1278}
1279
1280static float rna_XrEventData_float_threshold_get(PointerRNA *ptr)
1281{
1282# ifdef WITH_XR_OPENXR
1283 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1284 return data->float_threshold;
1285# else
1287 return 0.0f;
1288# endif
1289}
1290
1291static void rna_XrEventData_controller_location_get(PointerRNA *ptr, float r_values[3])
1292{
1293# ifdef WITH_XR_OPENXR
1294 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1295 copy_v3_v3(r_values, data->controller_loc);
1296# else
1298 zero_v3(r_values);
1299# endif
1300}
1301
1302static void rna_XrEventData_controller_rotation_get(PointerRNA *ptr, float r_values[4])
1303{
1304# ifdef WITH_XR_OPENXR
1305 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1306 copy_qt_qt(r_values, data->controller_rot);
1307# else
1309 unit_qt(r_values);
1310# endif
1311}
1312
1313static void rna_XrEventData_controller_location_other_get(PointerRNA *ptr, float r_values[3])
1314{
1315# ifdef WITH_XR_OPENXR
1316 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1317 copy_v3_v3(r_values, data->controller_loc_other);
1318# else
1320 zero_v3(r_values);
1321# endif
1322}
1323
1324static void rna_XrEventData_controller_rotation_other_get(PointerRNA *ptr, float r_values[4])
1325{
1326# ifdef WITH_XR_OPENXR
1327 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1328 copy_qt_qt(r_values, data->controller_rot_other);
1329# else
1331 unit_qt(r_values);
1332# endif
1333}
1334
1335static bool rna_XrEventData_bimanual_get(PointerRNA *ptr)
1336{
1337# ifdef WITH_XR_OPENXR
1338 const wmXrActionData *data = static_cast<const wmXrActionData *>(ptr->data);
1339 return data->bimanual;
1340# else
1342 return false;
1343# endif
1344}
1345
1347
1348#else /* RNA_RUNTIME */
1349
1350/* -------------------------------------------------------------------- */
1351
1354 "FLOAT",
1355 0,
1356 "Float",
1357 "Float action, representing either a digital or analog button"},
1359 "VECTOR2D",
1360 0,
1361 "Vector2D",
1362 "2D float vector action, representing a thumbstick or trackpad"},
1364 "POSE",
1365 0,
1366 "Pose",
1367 "3D pose action, representing a controller's location and rotation"},
1369 "VIBRATION",
1370 0,
1371 "Vibration",
1372 "Haptic vibration output action, to be applied with a duration, frequency, and amplitude"},
1373 {0, nullptr, 0, nullptr, nullptr},
1374};
1375
1377 {XR_OP_PRESS,
1378 "PRESS",
1379 0,
1380 "Press",
1381 "Execute operator on button press (non-modal operators only)"},
1383 "RELEASE",
1384 0,
1385 "Release",
1386 "Execute operator on button release (non-modal operators only)"},
1387 {XR_OP_MODAL, "MODAL", 0, "Modal", "Use modal execution (modal operators only)"},
1388 {0, nullptr, 0, nullptr, nullptr},
1389};
1390
1392 {XR_HAPTIC_PRESS, "PRESS", 0, "Press", "Apply haptics on button press"},
1393 {XR_HAPTIC_RELEASE, "RELEASE", 0, "Release", "Apply haptics on button release"},
1395 "PRESS_RELEASE",
1396 0,
1397 "Press Release",
1398 "Apply haptics on button press and release"},
1400 "REPEAT",
1401 0,
1402 "Repeat",
1403 "Apply haptics repeatedly for the duration of the button press"},
1404 {0, nullptr, 0, nullptr, nullptr},
1405};
1406
1408 {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1409 {XR_AXIS0_POS,
1410 "POSITIVE",
1411 0,
1412 "Positive",
1413 "Use positive axis region only for operator execution"},
1414 {XR_AXIS0_NEG,
1415 "NEGATIVE",
1416 0,
1417 "Negative",
1418 "Use negative axis region only for operator execution"},
1419 {0, nullptr, 0, nullptr, nullptr},
1420};
1421
1423 {0, "ANY", 0, "Any", "Use any axis region for operator execution"},
1424 {XR_AXIS1_POS,
1425 "POSITIVE",
1426 0,
1427 "Positive",
1428 "Use positive axis region only for operator execution"},
1429 {XR_AXIS1_NEG,
1430 "NEGATIVE",
1431 0,
1432 "Negative",
1433 "Use negative axis region only for operator execution"},
1434 {0, nullptr, 0, nullptr, nullptr},
1435};
1436
1437/* -------------------------------------------------------------------- */
1440
1442{
1443 StructRNA *srna;
1444 FunctionRNA *func;
1445 PropertyRNA *parm;
1446
1447 RNA_def_property_srna(cprop, "XrComponentPaths");
1448 srna = RNA_def_struct(brna, "XrComponentPaths", nullptr);
1449 RNA_def_struct_sdna(srna, "XrActionMapBinding");
1450 RNA_def_struct_ui_text(srna, "XR Component Paths", "Collection of OpenXR component paths");
1451
1452 func = RNA_def_function(srna, "new", "rna_XrComponentPath_new");
1453 parm = RNA_def_string(
1454 func, "path", nullptr, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1456 parm = RNA_def_pointer(
1457 func, "component_path", "XrComponentPath", "Component Path", "Added component path");
1458 RNA_def_function_return(func, parm);
1459
1460 func = RNA_def_function(srna, "remove", "rna_XrComponentPath_remove");
1461 parm = RNA_def_pointer(func, "component_path", "XrComponentPath", "Component Path", "");
1464
1465 func = RNA_def_function(srna, "find", "rna_XrComponentPath_find");
1466 parm = RNA_def_string(
1467 func, "path", nullptr, XR_MAX_COMPONENT_PATH_LENGTH, "Path", "OpenXR component path");
1469 parm = RNA_def_pointer(func,
1470 "component_path",
1471 "XrComponentPath",
1472 "Component Path",
1473 "The component path with the given path");
1474 RNA_def_function_return(func, parm);
1475}
1476
1478{
1479 StructRNA *srna;
1480 FunctionRNA *func;
1481 PropertyRNA *parm;
1482
1483 RNA_def_property_srna(cprop, "XrActionMapBindings");
1484 srna = RNA_def_struct(brna, "XrActionMapBindings", nullptr);
1485 RNA_def_struct_sdna(srna, "XrActionMapItem");
1486 RNA_def_struct_ui_text(srna, "XR Action Map Bindings", "Collection of XR action map bindings");
1487
1488 func = RNA_def_function(srna, "new", "rna_XrActionMapBinding_new");
1489 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name of the action map binding", "");
1491 parm = RNA_def_boolean(func,
1492 "replace_existing",
1493 true,
1494 "Replace Existing",
1495 "Replace any existing binding with the same name");
1497 parm = RNA_def_pointer(
1498 func, "binding", "XrActionMapBinding", "Binding", "Added action map binding");
1499 RNA_def_function_return(func, parm);
1500
1501 func = RNA_def_function(srna, "new_from_binding", "rna_XrActionMapBinding_new_from_binding");
1502 parm = RNA_def_pointer(
1503 func, "binding", "XrActionMapBinding", "Binding", "Binding to use as a reference");
1505 parm = RNA_def_pointer(
1506 func, "result", "XrActionMapBinding", "Binding", "Added action map binding");
1507 RNA_def_function_return(func, parm);
1508
1509 func = RNA_def_function(srna, "remove", "rna_XrActionMapBinding_remove");
1511 parm = RNA_def_pointer(func, "binding", "XrActionMapBinding", "Binding", "");
1514
1515 func = RNA_def_function(srna, "find", "rna_XrActionMapBinding_find");
1516 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1518 parm = RNA_def_pointer(func,
1519 "binding",
1520 "XrActionMapBinding",
1521 "Binding",
1522 "The action map binding with the given name");
1523 RNA_def_function_return(func, parm);
1524}
1525
1527{
1528 StructRNA *srna;
1529 FunctionRNA *func;
1530 PropertyRNA *parm;
1531
1532 RNA_def_property_srna(cprop, "XrUserPaths");
1533 srna = RNA_def_struct(brna, "XrUserPaths", nullptr);
1534 RNA_def_struct_sdna(srna, "XrActionMapItem");
1535 RNA_def_struct_ui_text(srna, "XR User Paths", "Collection of OpenXR user paths");
1536
1537 func = RNA_def_function(srna, "new", "rna_XrUserPath_new");
1538 parm = RNA_def_string(
1539 func, "path", nullptr, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1541 parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "Added user path");
1542 RNA_def_function_return(func, parm);
1543
1544 func = RNA_def_function(srna, "remove", "rna_XrUserPath_remove");
1545 parm = RNA_def_pointer(func, "user_path", "XrUserPath", "User Path", "");
1548
1549 func = RNA_def_function(srna, "find", "rna_XrUserPath_find");
1550 parm = RNA_def_string(
1551 func, "path", nullptr, XR_MAX_USER_PATH_LENGTH, "Path", "OpenXR user path");
1553 parm = RNA_def_pointer(
1554 func, "user_path", "XrUserPath", "User Path", "The user path with the given path");
1555 RNA_def_function_return(func, parm);
1556}
1557
1559{
1560 StructRNA *srna;
1561 FunctionRNA *func;
1562 PropertyRNA *parm;
1563
1564 RNA_def_property_srna(cprop, "XrActionMapItems");
1565 srna = RNA_def_struct(brna, "XrActionMapItems", nullptr);
1566 RNA_def_struct_sdna(srna, "XrActionMap");
1567 RNA_def_struct_ui_text(srna, "XR Action Map Items", "Collection of XR action map items");
1568
1569 func = RNA_def_function(srna, "new", "rna_XrActionMapItem_new");
1570 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name of the action map item", "");
1572 parm = RNA_def_boolean(func,
1573 "replace_existing",
1574 true,
1575 "Replace Existing",
1576 "Replace any existing item with the same name");
1578 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Added action map item");
1579 RNA_def_function_return(func, parm);
1580
1581 func = RNA_def_function(srna, "new_from_item", "rna_XrActionMapItem_new_from_item");
1582 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "Item to use as a reference");
1584 parm = RNA_def_pointer(func, "result", "XrActionMapItem", "Item", "Added action map item");
1585 RNA_def_function_return(func, parm);
1586
1587 func = RNA_def_function(srna, "remove", "rna_XrActionMapItem_remove");
1589 parm = RNA_def_pointer(func, "item", "XrActionMapItem", "Item", "");
1592
1593 func = RNA_def_function(srna, "find", "rna_XrActionMapItem_find");
1594 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1596 parm = RNA_def_pointer(
1597 func, "item", "XrActionMapItem", "Item", "The action map item with the given name");
1598 RNA_def_function_return(func, parm);
1599}
1600
1602{
1603 StructRNA *srna;
1604 FunctionRNA *func;
1605 PropertyRNA *parm;
1606
1607 RNA_def_property_srna(cprop, "XrActionMaps");
1608 srna = RNA_def_struct(brna, "XrActionMaps", nullptr);
1609 RNA_def_struct_ui_text(srna, "XR Action Maps", "Collection of XR action maps");
1610
1611 func = RNA_def_function(srna, "new", "rna_XrActionMap_new");
1613 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1615 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1617 parm = RNA_def_boolean(func,
1618 "replace_existing",
1619 true,
1620 "Replace Existing",
1621 "Replace any existing actionmap with the same name");
1623 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Added action map");
1624 RNA_def_function_return(func, parm);
1625
1626 func = RNA_def_function(srna, "new_from_actionmap", "rna_XrActionMap_new_from_actionmap");
1628 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1630 parm = RNA_def_pointer(
1631 func, "actionmap", "XrActionMap", "Action Map", "Action map to use as a reference");
1633 parm = RNA_def_pointer(func, "result", "XrActionMap", "Action Map", "Added action map");
1634 RNA_def_function_return(func, parm);
1635
1636 func = RNA_def_function(srna, "remove", "rna_XrActionMap_remove");
1638 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1640 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "Action Map", "Removed action map");
1643
1644 func = RNA_def_function(srna, "find", "rna_XrActionMap_find");
1646 parm = RNA_def_pointer(func, "xr_session_state", "XrSessionState", "XR Session State", "");
1648 parm = RNA_def_string(func, "name", nullptr, MAX_NAME, "Name", "");
1650 parm = RNA_def_pointer(
1651 func, "actionmap", "XrActionMap", "Action Map", "The action map with the given name");
1652 RNA_def_function_return(func, parm);
1653}
1654
1656{
1657 StructRNA *srna;
1658 PropertyRNA *prop;
1659
1660 /* XrActionMap */
1661 srna = RNA_def_struct(brna, "XrActionMap", nullptr);
1662 RNA_def_struct_sdna(srna, "XrActionMap");
1663 RNA_def_struct_ui_text(srna, "XR Action Map", "");
1664
1665 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1666 RNA_def_property_ui_text(prop, "Name", "Name of the action map");
1667 RNA_def_property_update(prop, 0, "rna_XrActionMap_name_update");
1668 RNA_def_struct_name_property(srna, prop);
1669
1670 prop = RNA_def_property(srna, "actionmap_items", PROP_COLLECTION, PROP_NONE);
1671 RNA_def_property_collection_sdna(prop, nullptr, "items", nullptr);
1672 RNA_def_property_struct_type(prop, "XrActionMapItem");
1674 "rna_XrActionMap_items_begin",
1675 "rna_iterator_listbase_next",
1676 "rna_iterator_listbase_end",
1677 "rna_iterator_listbase_get",
1678 "rna_XrActionMap_items_length",
1679 nullptr,
1680 nullptr,
1681 nullptr);
1683 prop,
1684 "Items",
1685 "Items in the action map, mapping an XR event to an operator, pose, or haptic output");
1686 rna_def_xr_actionmap_items(brna, prop);
1687
1688 prop = RNA_def_property(srna, "selected_item", PROP_INT, PROP_NONE);
1689 RNA_def_property_int_sdna(prop, nullptr, "selitem");
1690 RNA_def_property_ui_text(prop, "Selected Item", "");
1691
1692 /* XrUserPath */
1693 srna = RNA_def_struct(brna, "XrUserPath", nullptr);
1694 RNA_def_struct_sdna(srna, "XrUserPath");
1695 RNA_def_struct_ui_text(srna, "XR User Path", "");
1696
1697 prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1699 RNA_def_property_ui_text(prop, "Path", "OpenXR user path");
1700
1701 /* XrActionMapItem */
1702 srna = RNA_def_struct(brna, "XrActionMapItem", nullptr);
1703 RNA_def_struct_sdna(srna, "XrActionMapItem");
1704 RNA_def_struct_ui_text(srna, "XR Action Map Item", "");
1705
1706 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1707 RNA_def_property_ui_text(prop, "Name", "Name of the action map item");
1708 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_name_update");
1709 RNA_def_struct_name_property(srna, prop);
1710
1711 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
1713 RNA_def_property_ui_text(prop, "Type", "Action type");
1714 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1715
1716 prop = RNA_def_property(srna, "user_paths", PROP_COLLECTION, PROP_NONE);
1717 RNA_def_property_struct_type(prop, "XrUserPath");
1719 "rna_XrActionMapItem_user_paths_begin",
1720 "rna_iterator_listbase_next",
1721 "rna_iterator_listbase_end",
1722 "rna_iterator_listbase_get",
1723 "rna_XrActionMapItem_user_paths_length",
1724 nullptr,
1725 nullptr,
1726 nullptr);
1727 RNA_def_property_ui_text(prop, "User Paths", "OpenXR user paths");
1728 rna_def_xr_user_paths(brna, prop);
1729
1730 prop = RNA_def_property(srna, "op", PROP_STRING, PROP_NONE);
1732 RNA_def_property_ui_text(prop, "Operator", "Identifier of operator to call on action event");
1733 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1734
1735 prop = RNA_def_property(srna, "op_name", PROP_STRING, PROP_NONE);
1738 prop, "Operator Name", "Name of operator (translated) to call on action event");
1740 prop, "rna_XrActionMapItem_op_name_get", "rna_XrActionMapItem_op_name_length", nullptr);
1741
1742 prop = RNA_def_property(srna, "op_properties", PROP_POINTER, PROP_NONE);
1743 RNA_def_property_struct_type(prop, "OperatorProperties");
1745 prop, "rna_XrActionMapItem_op_properties_get", nullptr, nullptr, nullptr);
1747 prop, "Operator Properties", "Properties to set when the operator is called");
1748 RNA_def_property_update(prop, 0, "rna_XrActionMapItem_update");
1749
1750 prop = RNA_def_property(srna, "op_mode", PROP_ENUM, PROP_NONE);
1751 RNA_def_property_enum_sdna(prop, nullptr, "op_flag");
1753 RNA_def_property_ui_text(prop, "Operator Mode", "Operator execution mode");
1754
1755 prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
1757 prop, "rna_XrActionMapItem_bimanual_get", "rna_XrActionMapItem_bimanual_set");
1759 prop, "Bimanual", "The action depends on the states/poses of both user paths");
1760
1761 prop = RNA_def_property(srna, "pose_is_controller_grip", PROP_BOOLEAN, PROP_NONE);
1763 "rna_XrActionMapItem_pose_is_controller_grip_get",
1764 "rna_XrActionMapItem_pose_is_controller_grip_set");
1766 prop, "Is Controller Grip", "The action poses will be used for the VR controller grips");
1767
1768 prop = RNA_def_property(srna, "pose_is_controller_aim", PROP_BOOLEAN, PROP_NONE);
1770 "rna_XrActionMapItem_pose_is_controller_aim_get",
1771 "rna_XrActionMapItem_pose_is_controller_aim_set");
1773 prop, "Is Controller Aim", "The action poses will be used for the VR controller aims");
1774
1775 prop = RNA_def_property(srna, "haptic_name", PROP_STRING, PROP_NONE);
1777 prop, "Haptic Name", "Name of the haptic action to apply when executing this action");
1778
1779 prop = RNA_def_property(srna, "haptic_match_user_paths", PROP_BOOLEAN, PROP_NONE);
1781 "rna_XrActionMapItem_haptic_match_user_paths_get",
1782 "rna_XrActionMapItem_haptic_match_user_paths_set");
1784 prop,
1785 "Haptic Match User Paths",
1786 "Apply haptics to the same user paths for the haptic action and this action");
1787
1788 prop = RNA_def_property(srna, "haptic_duration", PROP_FLOAT, PROP_NONE);
1789 RNA_def_property_range(prop, 0.0, FLT_MAX);
1791 "Haptic Duration",
1792 "Haptic duration in seconds. 0.0 is the minimum supported duration.");
1793
1794 prop = RNA_def_property(srna, "haptic_frequency", PROP_FLOAT, PROP_NONE);
1795 RNA_def_property_range(prop, 0.0, FLT_MAX);
1797 "Haptic Frequency",
1798 "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
1799 "runtime's default frequency.");
1800
1801 prop = RNA_def_property(srna, "haptic_amplitude", PROP_FLOAT, PROP_NONE);
1802 RNA_def_property_range(prop, 0.0, 1.0);
1804 prop, "Haptic Amplitude", "Intensity of the haptic vibration, ranging from 0.0 to 1.0");
1805
1806 prop = RNA_def_property(srna, "haptic_mode", PROP_ENUM, PROP_NONE);
1809 prop, "rna_XrActionMapItem_haptic_mode_get", "rna_XrActionMapItem_haptic_mode_set", nullptr);
1810 RNA_def_property_ui_text(prop, "Haptic mode", "Haptic application mode");
1811
1812 prop = RNA_def_property(srna, "bindings", PROP_COLLECTION, PROP_NONE);
1813 RNA_def_property_struct_type(prop, "XrActionMapBinding");
1815 "rna_XrActionMapItem_bindings_begin",
1816 "rna_iterator_listbase_next",
1817 "rna_iterator_listbase_end",
1818 "rna_iterator_listbase_get",
1819 "rna_XrActionMapItem_bindings_length",
1820 nullptr,
1821 nullptr,
1822 nullptr);
1824 prop, "Bindings", "Bindings for the action map item, mapping the action to an XR input");
1826
1827 prop = RNA_def_property(srna, "selected_binding", PROP_INT, PROP_NONE);
1828 RNA_def_property_int_sdna(prop, nullptr, "selbinding");
1829 RNA_def_property_ui_text(prop, "Selected Binding", "Currently selected binding");
1830
1831 /* XrComponentPath */
1832 srna = RNA_def_struct(brna, "XrComponentPath", nullptr);
1833 RNA_def_struct_sdna(srna, "XrComponentPath");
1834 RNA_def_struct_ui_text(srna, "XR Component Path", "");
1835
1836 prop = RNA_def_property(srna, "path", PROP_STRING, PROP_NONE);
1838 RNA_def_property_ui_text(prop, "Path", "OpenXR component path");
1839
1840 /* XrActionMapBinding */
1841 srna = RNA_def_struct(brna, "XrActionMapBinding", nullptr);
1842 RNA_def_struct_sdna(srna, "XrActionMapBinding");
1843 RNA_def_struct_ui_text(srna, "XR Action Map Binding", "Binding in an XR action map item");
1844
1845 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1846 RNA_def_property_ui_text(prop, "Name", "Name of the action map binding");
1847 RNA_def_property_update(prop, 0, "rna_XrActionMapBinding_name_update");
1848 RNA_def_struct_name_property(srna, prop);
1849
1850 prop = RNA_def_property(srna, "profile", PROP_STRING, PROP_NONE);
1852 RNA_def_property_ui_text(prop, "Profile", "OpenXR interaction profile path");
1853
1854 prop = RNA_def_property(srna, "component_paths", PROP_COLLECTION, PROP_NONE);
1855 RNA_def_property_struct_type(prop, "XrComponentPath");
1857 "rna_XrActionMapBinding_component_paths_begin",
1858 "rna_iterator_listbase_next",
1859 "rna_iterator_listbase_end",
1860 "rna_iterator_listbase_get",
1861 "rna_XrActionMapBinding_component_paths_length",
1862 nullptr,
1863 nullptr,
1864 nullptr);
1865 RNA_def_property_ui_text(prop, "Component Paths", "OpenXR component paths");
1866 rna_def_xr_component_paths(brna, prop);
1867
1868 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
1869 RNA_def_property_float_sdna(prop, nullptr, "float_threshold");
1870 RNA_def_property_range(prop, 0.0, 1.0);
1871 RNA_def_property_ui_text(prop, "Threshold", "Input threshold for button/axis actions");
1872
1873 prop = RNA_def_property(srna, "axis0_region", PROP_ENUM, PROP_NONE);
1876 "rna_XrActionMapBinding_axis0_region_get",
1877 "rna_XrActionMapBinding_axis0_region_set",
1878 nullptr);
1880 prop, "Axis 0 Region", "Action execution region for the first input axis");
1881
1882 prop = RNA_def_property(srna, "axis1_region", PROP_ENUM, PROP_NONE);
1885 "rna_XrActionMapBinding_axis1_region_get",
1886 "rna_XrActionMapBinding_axis1_region_set",
1887 nullptr);
1889 prop, "Axis 1 Region", "Action execution region for the second input axis");
1890
1891 prop = RNA_def_property(srna, "pose_location", PROP_FLOAT, PROP_TRANSLATION);
1892 RNA_def_property_ui_text(prop, "Pose Location Offset", "");
1893
1894 prop = RNA_def_property(srna, "pose_rotation", PROP_FLOAT, PROP_EULER);
1895 RNA_def_property_ui_text(prop, "Pose Rotation Offset", "");
1896}
1897
1899
1900/* -------------------------------------------------------------------- */
1903
1905{
1906 StructRNA *srna;
1907 PropertyRNA *prop;
1908
1909 static const EnumPropertyItem base_pose_types[] = {
1911 "SCENE_CAMERA",
1912 0,
1913 "Scene Camera",
1914 "Follow the active scene camera to define the VR view's base pose"},
1916 "OBJECT",
1917 0,
1918 "Object",
1919 "Follow the transformation of an object to define the VR view's base pose"},
1921 "CUSTOM",
1922 0,
1923 "Custom",
1924 "Follow a custom transformation to define the VR view's base pose"},
1925 {0, nullptr, 0, nullptr, nullptr},
1926 };
1927
1928 static const EnumPropertyItem controller_draw_styles[] = {
1929 {XR_CONTROLLER_DRAW_DARK, "DARK", 0, "Dark", "Draw dark controller"},
1930 {XR_CONTROLLER_DRAW_LIGHT, "LIGHT", 0, "Light", "Draw light controller"},
1932 "DARK_RAY",
1933 0,
1934 "Dark + Ray",
1935 "Draw dark controller with aiming axis ray"},
1937 "LIGHT_RAY",
1938 0,
1939 "Light + Ray",
1940 "Draw light controller with aiming axis ray"},
1941 {0, nullptr, 0, nullptr, nullptr},
1942 };
1943
1944 srna = RNA_def_struct(brna, "XrSessionSettings", nullptr);
1945 RNA_def_struct_ui_text(srna, "XR Session Settings", "");
1946
1947 prop = RNA_def_property(srna, "shading", PROP_POINTER, PROP_NONE);
1949 RNA_def_property_ui_text(prop, "Shading Settings", "");
1951
1952 prop = RNA_def_property(srna, "base_pose_type", PROP_ENUM, PROP_NONE);
1954 RNA_def_property_enum_items(prop, base_pose_types);
1956 prop,
1957 "Base Pose Type",
1958 "Define where the location and rotation for the VR view come from, to which "
1959 "translation and rotation deltas from the VR headset will be applied to");
1961
1962 prop = RNA_def_property(srna, "base_pose_object", PROP_POINTER, PROP_NONE);
1965 "Base Pose Object",
1966 "Object to take the location and rotation to which translation and "
1967 "rotation deltas from the VR headset will be applied to");
1969
1970 prop = RNA_def_property(srna, "base_pose_location", PROP_FLOAT, PROP_TRANSLATION);
1972 "Base Pose Location",
1973 "Coordinates to apply translation deltas from the VR headset to");
1976
1977 prop = RNA_def_property(srna, "base_pose_angle", PROP_FLOAT, PROP_AXISANGLE);
1979 prop,
1980 "Base Pose Angle",
1981 "Rotation angle around the Z-Axis to apply the rotation deltas from the VR headset to");
1983
1984 prop = RNA_def_property(srna, "base_scale", PROP_FLOAT, PROP_NONE);
1985 RNA_def_property_ui_text(prop, "Base Scale", "Uniform scale to apply to VR view");
1986 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
1987 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10, 3);
1990
1991 prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
1992 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_GRIDFLOOR);
1993 RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid");
1995
1996 prop = RNA_def_property(srna, "show_passthrough", PROP_BOOLEAN, PROP_NONE);
1998 RNA_def_property_ui_text(prop, "Show Passthrough", "Show the passthrough view");
2000
2001 prop = RNA_def_property(srna, "show_annotation", PROP_BOOLEAN, PROP_NONE);
2002 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_ANNOTATION);
2003 RNA_def_property_ui_text(prop, "Show Annotation", "Show annotations for this view");
2005
2006 prop = RNA_def_property(srna, "show_selection", PROP_BOOLEAN, PROP_NONE);
2007 RNA_def_property_boolean_sdna(prop, nullptr, "draw_flags", V3D_OFSDRAW_SHOW_SELECTION);
2008 RNA_def_property_ui_text(prop, "Show Selection", "Show selection outlines");
2010
2011 prop = RNA_def_property(srna, "show_controllers", PROP_BOOLEAN, PROP_NONE);
2014 prop, "Show Controllers", "Show VR controllers (requires VR actions for controller poses)");
2016
2017 prop = RNA_def_property(srna, "show_custom_overlays", PROP_BOOLEAN, PROP_NONE);
2019 RNA_def_property_ui_text(prop, "Show Custom Overlays", "Show custom VR overlays");
2021
2022 prop = RNA_def_property(srna, "show_object_extras", PROP_BOOLEAN, PROP_NONE);
2025 prop, "Show Object Extras", "Show object extras, including empties, lights, and cameras");
2027
2028 prop = RNA_def_property(srna, "controller_draw_style", PROP_ENUM, PROP_NONE);
2030 RNA_def_property_enum_items(prop, controller_draw_styles);
2032 prop, "Controller Draw Style", "Style to use when drawing VR controllers");
2035
2036 prop = RNA_def_property(srna, "clip_start", PROP_FLOAT, PROP_DISTANCE);
2037 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2038 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 0.1 * 100, 3);
2039 RNA_def_property_ui_text(prop, "Clip Start", "VR viewport near clipping distance");
2041
2042 prop = RNA_def_property(srna, "clip_end", PROP_FLOAT, PROP_DISTANCE);
2043 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2044 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 10 * 100, 3);
2045 RNA_def_property_ui_text(prop, "Clip End", "VR viewport far clipping distance");
2047
2048 prop = RNA_def_property(srna, "fly_speed", PROP_FLOAT, PROP_NONE);
2049 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
2050 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 0.5 * 100, 3);
2051 RNA_def_property_ui_text(prop, "Fly Speed", "Fly speed in meters per second");
2053
2054 prop = RNA_def_property(srna, "use_positional_tracking", PROP_BOOLEAN, PROP_NONE);
2056 "rna_XrSessionSettings_use_positional_tracking_get",
2057 "rna_XrSessionSettings_use_positional_tracking_set");
2059 prop,
2060 "Positional Tracking",
2061 "Allow VR headsets to affect the location in virtual space, in addition to the rotation");
2063
2064 prop = RNA_def_property(srna, "use_absolute_tracking", PROP_BOOLEAN, PROP_NONE);
2066 "rna_XrSessionSettings_use_absolute_tracking_get",
2067 "rna_XrSessionSettings_use_absolute_tracking_set");
2069 prop,
2070 "Absolute Tracking",
2071 "Allow the VR tracking origin to be defined independently of the headset location");
2073
2075
2076 /* Helper for drawing the icon. */
2077 prop = RNA_def_property(srna, "icon_from_show_object_viewport", PROP_INT, PROP_NONE);
2079 prop, "rna_XrSessionSettings_icon_from_show_object_viewport_get", nullptr, nullptr);
2081 RNA_def_property_ui_text(prop, "Visibility Icon", "");
2082}
2083
2085
2086/* -------------------------------------------------------------------- */
2089
2091{
2092 StructRNA *srna;
2093 FunctionRNA *func;
2094 PropertyRNA *parm, *prop;
2095
2096 srna = RNA_def_struct(brna, "XrSessionState", nullptr);
2097 RNA_def_struct_ui_text(srna, "Session State", "Runtime state information about the VR session");
2098
2099 func = RNA_def_function(srna, "is_running", "rna_XrSessionState_is_running");
2100 RNA_def_function_ui_description(func, "Query if the VR session is currently running");
2102 parm = RNA_def_pointer(func, "context", "Context", "", "");
2104 parm = RNA_def_boolean(func, "result", false, "Result", "");
2105 RNA_def_function_return(func, parm);
2106
2107 func = RNA_def_function(srna, "reset_to_base_pose", "rna_XrSessionState_reset_to_base_pose");
2108 RNA_def_function_ui_description(func, "Force resetting of position and rotation deltas");
2110 parm = RNA_def_pointer(func, "context", "Context", "", "");
2112
2113 func = RNA_def_function(srna, "action_set_create", "rna_XrSessionState_action_set_create");
2114 RNA_def_function_ui_description(func, "Create a VR action set");
2116 parm = RNA_def_pointer(func, "context", "Context", "", "");
2118 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2120 parm = RNA_def_boolean(func, "result", false, "Result", "");
2121 RNA_def_function_return(func, parm);
2122
2123 func = RNA_def_function(srna, "action_create", "rna_XrSessionState_action_create");
2124 RNA_def_function_ui_description(func, "Create a VR action");
2126 parm = RNA_def_pointer(func, "context", "Context", "", "");
2128 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2130 parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2132 parm = RNA_def_boolean(func, "result", false, "Result", "");
2133 RNA_def_function_return(func, parm);
2134
2135 func = RNA_def_function(
2136 srna, "action_binding_create", "rna_XrSessionState_action_binding_create");
2137 RNA_def_function_ui_description(func, "Create a VR action binding");
2139 parm = RNA_def_pointer(func, "context", "Context", "", "");
2141 parm = RNA_def_pointer(func, "actionmap", "XrActionMap", "", "");
2143 parm = RNA_def_pointer(func, "actionmap_item", "XrActionMapItem", "", "");
2145 parm = RNA_def_pointer(func, "actionmap_binding", "XrActionMapBinding", "", "");
2147 parm = RNA_def_boolean(func, "result", false, "Result", "");
2148 RNA_def_function_return(func, parm);
2149
2150 func = RNA_def_function(
2151 srna, "active_action_set_set", "rna_XrSessionState_active_action_set_set");
2152 RNA_def_function_ui_description(func, "Set the active VR action set");
2154 parm = RNA_def_pointer(func, "context", "Context", "", "");
2156 parm = RNA_def_string(func, "action_set", nullptr, MAX_NAME, "Action Set", "Action set name");
2158 parm = RNA_def_boolean(func, "result", false, "Result", "");
2159 RNA_def_function_return(func, parm);
2160
2161 func = RNA_def_function(
2162 srna, "controller_pose_actions_set", "rna_XrSessionState_controller_pose_actions_set");
2163 RNA_def_function_ui_description(func, "Set the actions that determine the VR controller poses");
2165 parm = RNA_def_pointer(func, "context", "Context", "", "");
2167 parm = RNA_def_string(func, "action_set", nullptr, MAX_NAME, "Action Set", "Action set name");
2169 parm = RNA_def_string(func,
2170 "grip_action",
2171 nullptr,
2172 MAX_NAME,
2173 "Grip Action",
2174 "Name of the action representing the controller grips");
2176 parm = RNA_def_string(func,
2177 "aim_action",
2178 nullptr,
2179 MAX_NAME,
2180 "Aim Action",
2181 "Name of the action representing the controller aims");
2183 parm = RNA_def_boolean(func, "result", false, "Result", "");
2184 RNA_def_function_return(func, parm);
2185
2186 func = RNA_def_function(srna, "action_state_get", "rna_XrSessionState_action_state_get");
2187 RNA_def_function_ui_description(func, "Get the current state of a VR action");
2189 parm = RNA_def_pointer(func, "context", "Context", "", "");
2191 parm = RNA_def_string(
2192 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2194 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2196 parm = RNA_def_string(
2197 func, "user_path", nullptr, XR_MAX_USER_PATH_LENGTH, "User Path", "OpenXR user path");
2199 parm = RNA_def_float_array(
2200 func,
2201 "state",
2202 2,
2203 nullptr,
2204 -FLT_MAX,
2205 FLT_MAX,
2206 "Action State",
2207 "Current state of the VR action. Second float value is only set for 2D vector type actions.",
2208 -FLT_MAX,
2209 FLT_MAX);
2211
2212 func = RNA_def_function(srna, "haptic_action_apply", "rna_XrSessionState_haptic_action_apply");
2213 RNA_def_function_ui_description(func, "Apply a VR haptic action");
2215 parm = RNA_def_pointer(func, "context", "Context", "", "");
2217 parm = RNA_def_string(
2218 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2220 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2222 parm = RNA_def_string(
2223 func,
2224 "user_path",
2225 nullptr,
2227 "User Path",
2228 "Optional OpenXR user path. If not set, the action will be applied to all paths.");
2230 parm = RNA_def_float(func,
2231 "duration",
2232 0.0f,
2233 0.0f,
2234 FLT_MAX,
2235 "Duration",
2236 "Haptic duration in seconds. 0.0 is the minimum supported duration.",
2237 0.0f,
2238 FLT_MAX);
2240 parm = RNA_def_float(func,
2241 "frequency",
2242 0.0f,
2243 0.0f,
2244 FLT_MAX,
2245 "Frequency",
2246 "Frequency of the haptic vibration in hertz. 0.0 specifies the OpenXR "
2247 "runtime's default frequency.",
2248 0.0f,
2249 FLT_MAX);
2251 parm = RNA_def_float(func,
2252 "amplitude",
2253 1.0f,
2254 0.0f,
2255 1.0f,
2256 "Amplitude",
2257 "Haptic amplitude, ranging from 0.0 to 1.0",
2258 0.0f,
2259 1.0f);
2261 parm = RNA_def_boolean(func, "result", false, "Result", "");
2262 RNA_def_function_return(func, parm);
2263
2264 func = RNA_def_function(srna, "haptic_action_stop", "rna_XrSessionState_haptic_action_stop");
2265 RNA_def_function_ui_description(func, "Stop a VR haptic action");
2267 parm = RNA_def_pointer(func, "context", "Context", "", "");
2269 parm = RNA_def_string(
2270 func, "action_set_name", nullptr, MAX_NAME, "Action Set", "Action set name");
2272 parm = RNA_def_string(func, "action_name", nullptr, MAX_NAME, "Action", "Action name");
2274 parm = RNA_def_string(
2275 func,
2276 "user_path",
2277 nullptr,
2279 "User Path",
2280 "Optional OpenXR user path. If not set, the action will be stopped for all paths.");
2282
2283 func = RNA_def_function(
2284 srna, "controller_grip_location_get", "rna_XrSessionState_controller_grip_location_get");
2286 "Get the last known controller grip location 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_translation(func,
2293 "location",
2294 3,
2295 nullptr,
2296 -FLT_MAX,
2297 FLT_MAX,
2298 "Location",
2299 "Controller grip location",
2300 -FLT_MAX,
2301 FLT_MAX);
2303
2304 func = RNA_def_function(
2305 srna, "controller_grip_rotation_get", "rna_XrSessionState_controller_grip_rotation_get");
2307 func, "Get the last known controller grip rotation (quaternion) in world space");
2309 parm = RNA_def_pointer(func, "context", "Context", "", "");
2311 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2313 parm = RNA_def_float_vector(func,
2314 "rotation",
2315 4,
2316 nullptr,
2317 -FLT_MAX,
2318 FLT_MAX,
2319 "Rotation",
2320 "Controller grip quaternion rotation",
2321 -FLT_MAX,
2322 FLT_MAX);
2323 parm->subtype = PROP_QUATERNION;
2326
2327 func = RNA_def_function(
2328 srna, "controller_aim_location_get", "rna_XrSessionState_controller_aim_location_get");
2330 "Get the last known controller aim location 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_translation(func,
2337 "location",
2338 3,
2339 nullptr,
2340 -FLT_MAX,
2341 FLT_MAX,
2342 "Location",
2343 "Controller aim location",
2344 -FLT_MAX,
2345 FLT_MAX);
2347
2348 func = RNA_def_function(
2349 srna, "controller_aim_rotation_get", "rna_XrSessionState_controller_aim_rotation_get");
2351 func, "Get the last known controller aim rotation (quaternion) in world space");
2353 parm = RNA_def_pointer(func, "context", "Context", "", "");
2355 parm = RNA_def_int(func, "index", 0, 0, 255, "Index", "Controller index", 0, 255);
2357 parm = RNA_def_float_vector(func,
2358 "rotation",
2359 4,
2360 nullptr,
2361 -FLT_MAX,
2362 FLT_MAX,
2363 "Rotation",
2364 "Controller aim quaternion rotation",
2365 -FLT_MAX,
2366 FLT_MAX);
2367 parm->subtype = PROP_QUATERNION;
2370
2371 prop = RNA_def_property(srna, "viewer_pose_location", PROP_FLOAT, PROP_TRANSLATION);
2372 RNA_def_property_array(prop, 3);
2374 prop, "rna_XrSessionState_viewer_pose_location_get", nullptr, nullptr);
2377 prop,
2378 "Viewer Pose Location",
2379 "Last known location of the viewer pose (center between the eyes) in world space");
2380
2381 prop = RNA_def_property(srna, "viewer_pose_rotation", PROP_FLOAT, PROP_QUATERNION);
2382 RNA_def_property_array(prop, 4);
2384 prop, "rna_XrSessionState_viewer_pose_rotation_get", nullptr, nullptr);
2387 prop,
2388 "Viewer Pose Rotation",
2389 "Last known rotation of the viewer pose (center between the eyes) in world space");
2390
2391 prop = RNA_def_property(srna, "navigation_location", PROP_FLOAT, PROP_TRANSLATION);
2392 RNA_def_property_array(prop, 3);
2394 prop, "rna_XrSessionState_nav_location_get", "rna_XrSessionState_nav_location_set", nullptr);
2396 prop,
2397 "Navigation Location",
2398 "Location offset to apply to base pose when determining viewer location");
2399
2400 prop = RNA_def_property(srna, "navigation_rotation", PROP_FLOAT, PROP_QUATERNION);
2401 RNA_def_property_array(prop, 4);
2403 prop, "rna_XrSessionState_nav_rotation_get", "rna_XrSessionState_nav_rotation_set", nullptr);
2405 prop,
2406 "Navigation Rotation",
2407 "Rotation offset to apply to base pose when determining viewer rotation");
2408
2409 prop = RNA_def_property(srna, "navigation_scale", PROP_FLOAT, PROP_NONE);
2411 prop, "rna_XrSessionState_nav_scale_get", "rna_XrSessionState_nav_scale_set", nullptr);
2413 prop,
2414 "Navigation Scale",
2415 "Additional scale multiplier to apply to base scale when determining viewer scale");
2416
2417 prop = RNA_def_property(srna, "actionmaps", PROP_COLLECTION, PROP_NONE);
2418 RNA_def_property_struct_type(prop, "XrActionMap");
2420 "rna_XrSessionState_actionmaps_begin",
2421 "rna_iterator_listbase_next",
2422 "rna_iterator_listbase_end",
2423 "rna_iterator_listbase_get",
2424 "rna_XrSessionState_actionmaps_length",
2425 nullptr,
2426 nullptr,
2427 nullptr);
2428 RNA_def_property_ui_text(prop, "XR Action Maps", "");
2429 rna_def_xr_actionmaps(brna, prop);
2430
2431 prop = RNA_def_property(srna, "active_actionmap", PROP_INT, PROP_NONE);
2433 "rna_XrSessionState_active_actionmap_get",
2434 "rna_XrSessionState_active_actionmap_set",
2435 nullptr);
2436 RNA_def_property_ui_text(prop, "Active Action Map", "");
2437
2438 prop = RNA_def_property(srna, "selected_actionmap", PROP_INT, PROP_NONE);
2440 "rna_XrSessionState_selected_actionmap_get",
2441 "rna_XrSessionState_selected_actionmap_set",
2442 nullptr);
2443 RNA_def_property_ui_text(prop, "Selected Action Map", "");
2444}
2445
2447
2448/* -------------------------------------------------------------------- */
2451
2453{
2454 StructRNA *srna;
2455 PropertyRNA *prop;
2456
2457 srna = RNA_def_struct(brna, "XrEventData", nullptr);
2458 RNA_def_struct_ui_text(srna, "XrEventData", "XR Data for Window Manager Event");
2459
2460 prop = RNA_def_property(srna, "action_set", PROP_STRING, PROP_NONE);
2463 prop, "rna_XrEventData_action_set_get", "rna_XrEventData_action_set_length", nullptr);
2464 RNA_def_property_ui_text(prop, "Action Set", "XR action set name");
2465
2466 prop = RNA_def_property(srna, "action", PROP_STRING, PROP_NONE);
2469 prop, "rna_XrEventData_action_get", "rna_XrEventData_action_length", nullptr);
2470 RNA_def_property_ui_text(prop, "Action", "XR action name");
2471
2472 prop = RNA_def_property(srna, "user_path", PROP_STRING, PROP_NONE);
2475 prop, "rna_XrEventData_user_path_get", "rna_XrEventData_user_path_length", nullptr);
2476 RNA_def_property_ui_text(prop, "User Path", "User path of the action. E.g. \"/user/hand/left\"");
2477
2478 prop = RNA_def_property(srna, "user_path_other", PROP_STRING, PROP_NONE);
2481 "rna_XrEventData_user_path_other_get",
2482 "rna_XrEventData_user_path_other_length",
2483 nullptr);
2485 prop, "User Path Other", "Other user path, for bimanual actions. E.g. \"/user/hand/right\"");
2486
2487 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
2490 RNA_def_property_enum_funcs(prop, "rna_XrEventData_type_get", nullptr, nullptr);
2491 RNA_def_property_ui_text(prop, "Type", "XR action type");
2492
2493 prop = RNA_def_property(srna, "state", PROP_FLOAT, PROP_NONE);
2494 RNA_def_property_array(prop, 2);
2496 RNA_def_property_float_funcs(prop, "rna_XrEventData_state_get", nullptr, nullptr);
2497 RNA_def_property_ui_text(prop, "State", "XR action values corresponding to type");
2498
2499 prop = RNA_def_property(srna, "state_other", PROP_FLOAT, PROP_NONE);
2500 RNA_def_property_array(prop, 2);
2502 RNA_def_property_float_funcs(prop, "rna_XrEventData_state_other_get", nullptr, nullptr);
2504 prop, "State Other", "State of the other user path for bimanual actions");
2505
2506 prop = RNA_def_property(srna, "float_threshold", PROP_FLOAT, PROP_NONE);
2508 RNA_def_property_float_funcs(prop, "rna_XrEventData_float_threshold_get", nullptr, nullptr);
2509 RNA_def_property_ui_text(prop, "Float Threshold", "Input threshold for float/2D vector actions");
2510
2511 prop = RNA_def_property(srna, "controller_location", PROP_FLOAT, PROP_TRANSLATION);
2512 RNA_def_property_array(prop, 3);
2514 RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_location_get", nullptr, nullptr);
2516 "Controller Location",
2517 "Location of the action's corresponding controller aim in world space");
2518
2519 prop = RNA_def_property(srna, "controller_rotation", PROP_FLOAT, PROP_QUATERNION);
2520 RNA_def_property_array(prop, 4);
2522 RNA_def_property_float_funcs(prop, "rna_XrEventData_controller_rotation_get", nullptr, nullptr);
2524 "Controller Rotation",
2525 "Rotation of the action's corresponding controller aim in world space");
2526
2527 prop = RNA_def_property(srna, "controller_location_other", PROP_FLOAT, PROP_TRANSLATION);
2528 RNA_def_property_array(prop, 3);
2531 prop, "rna_XrEventData_controller_location_other_get", nullptr, nullptr);
2533 "Controller Location Other",
2534 "Controller aim location of the other user path for bimanual actions");
2535
2536 prop = RNA_def_property(srna, "controller_rotation_other", PROP_FLOAT, PROP_QUATERNION);
2537 RNA_def_property_array(prop, 4);
2540 prop, "rna_XrEventData_controller_rotation_other_get", nullptr, nullptr);
2542 "Controller Rotation Other",
2543 "Controller aim rotation of the other user path for bimanual actions");
2544
2545 prop = RNA_def_property(srna, "bimanual", PROP_BOOLEAN, PROP_NONE);
2547 RNA_def_property_boolean_funcs(prop, "rna_XrEventData_bimanual_get", nullptr);
2548 RNA_def_property_ui_text(prop, "Bimanual", "Whether bimanual interaction is occurring");
2549}
2550
2552
2554{
2556
2561
2563}
2564
2565#endif /* RNA_RUNTIME */
wmWindowManager * CTX_wm_manager(const bContext *C)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
@ RPT_ERROR
Definition BKE_report.hh:39
#define BLI_assert_unreachable()
Definition BLI_assert.h:93
#define BLI_assert(a)
Definition BLI_assert.h:46
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:534
void * BLI_findstring(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:608
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_freelinkN(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:270
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:524
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])
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:693
#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
ParameterFlag
Definition RNA_types.hh:544
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ PARM_OUTPUT
Definition RNA_types.hh:546
@ FUNC_USE_REPORTS
Definition RNA_types.hh:914
@ FUNC_NO_SELF
Definition RNA_types.hh:907
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_INT
Definition RNA_types.hh:163
@ PROP_STRING
Definition RNA_types.hh:165
@ PROP_POINTER
Definition RNA_types.hh:167
@ PROP_COLLECTION
Definition RNA_types.hh:168
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:224
PropertyFlag
Definition RNA_types.hh:300
@ PROP_THICK_WRAP
Definition RNA_types.hh:423
@ PROP_ANIMATABLE
Definition RNA_types.hh:319
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_DISTANCE
Definition RNA_types.hh:256
@ PROP_AXISANGLE
Definition RNA_types.hh:268
@ PROP_EULER
Definition RNA_types.hh:266
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_TRANSLATION
Definition RNA_types.hh:261
@ PROP_QUATERNION
Definition RNA_types.hh:267
#define C
Definition RandGen.cpp:29
#define NC_WM
Definition WM_types.hh:374
#define ND_XR_DATA_CHANGED
Definition WM_types.hh:418
BMesh const char void * data
long long int int64_t
nullptr float
#define offsetof(t, d)
#define GS(x)
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
static ulong state[N]
const char * name
const PointerRNA PointerRNA_NULL
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, ListBase *lb, IteratorSkipFunc skip)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
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_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:1904
static const EnumPropertyItem rna_enum_xr_haptic_flags[]
Definition rna_xr.cc:1391
static void rna_def_xr_actionmap_bindings(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1477
static void rna_def_xr_session_state(BlenderRNA *brna)
Definition rna_xr.cc:2090
static void rna_def_xr_user_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1526
static const EnumPropertyItem rna_enum_xr_axis0_flags[]
Definition rna_xr.cc:1407
static const EnumPropertyItem rna_enum_xr_axis1_flags[]
Definition rna_xr.cc:1422
static void rna_def_xr_component_paths(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1441
static void rna_def_xr_actionmap(BlenderRNA *brna)
Definition rna_xr.cc:1655
static const EnumPropertyItem rna_enum_xr_action_types[]
Definition rna_xr.cc:1352
static void rna_def_xr_actionmap_items(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1558
static const EnumPropertyItem rna_enum_xr_op_flags[]
Definition rna_xr.cc:1376
static void rna_def_xr_actionmaps(BlenderRNA *brna, PropertyRNA *cprop)
Definition rna_xr.cc:1601
static void rna_def_xr_eventdata(BlenderRNA *brna)
Definition rna_xr.cc:2452
void RNA_def_xr(BlenderRNA *brna)
Definition rna_xr.cc:2553
#define FLT_MAX
Definition stdcycles.h:14
void * first
ListBase wm
Definition BKE_main.hh:307
void invalidate()
Definition RNA_types.hh:110
void * data
Definition RNA_types.hh:53
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:4238
wmOperatorType * ot
Definition wm_files.cc:4237
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])