VTK  9.6.20260329
vtkWebXR.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-FileCopyrightText: Copyright (c) Vhite Rabbit
3// SPDX-FileCopyrightText: Copyright (c) Jonathan Hale
4// SPDX-License-Identifier: BSD-3-Clause AND MIT
5
6// File adapted from:
7// https://github.com/WonderlandEngine/emscripten-webxr/blob/1bc0b7b66922d81f0bd0704f4b6e4a571b74eab2/webxr.h
8
9#ifndef vtkWebXR_h
10#define vtkWebXR_h
11
12#include "vtkABINamespace.h"
13
17
18#define webxr_init VTK_ABI_NAMESPACE_MANGLE(webxr_init)
19#define webxr_is_session_supported VTK_ABI_NAMESPACE_MANGLE(webxr_is_session_supported)
20#define webxr_request_session VTK_ABI_NAMESPACE_MANGLE(webxr_request_session)
21#define webxr_request_exit VTK_ABI_NAMESPACE_MANGLE(webxr_request_exit)
22#define webxr_get_viewer_pose VTK_ABI_NAMESPACE_MANGLE(webxr_get_viewer_pose)
23#define webxr_get_views VTK_ABI_NAMESPACE_MANGLE(webxr_get_views)
24#define webxr_get_framebuffer_size VTK_ABI_NAMESPACE_MANGLE(webxr_get_framebuffer_size)
25#define webxr_get_framebuffer VTK_ABI_NAMESPACE_MANGLE(webxr_get_framebuffer)
26#define webxr_get_input_sources VTK_ABI_NAMESPACE_MANGLE(webxr_get_input_sources)
27#define webxr_get_input_pose VTK_ABI_NAMESPACE_MANGLE(webxr_get_input_pose)
28#define webxr_get_input_gamepad VTK_ABI_NAMESPACE_MANGLE(webxr_get_input_gamepad)
29
30#ifdef __cplusplus
31extern "C"
32#endif
33{
34
36 enum WebXRError
37 {
38 WEBXR_ERR_API_UNSUPPORTED = -2,
39 WEBXR_ERR_GL_INCAPABLE = -3,
40 WEBXR_ERR_SESSION_UNSUPPORTED = -4,
41 };
42
50
58
66
68#define WEBXR_SESSION_FEATURE_LOCAL 0x01
69#define WEBXR_SESSION_FEATURE_LOCAL_FLOOR 0x02
70#define WEBXR_SESSION_FEATURE_BOUNDED_FLOOR 0x04
71#define WEBXR_SESSION_FEATURE_UNBOUNDED 0x08
72#define WEBXR_SESSION_FEATURE_HIT_TEST 0x10
73
80
82 typedef struct WebXRRigidTransform
83 {
84 double matrix[16];
85 double position[3];
86 double orientation[4];
88
90 typedef struct WebXRView
91 {
92 /* view pose */
94 /* projection matrix */
95 double projectionMatrix[16];
96 /* x, y, width, height of the eye viewport on target texture */
97 int viewport[4];
99
106
113
126
138
143 typedef struct WebXRGamepad
144 {
145 // Max 8 buttons per gamepad (4 standard + 4 custom)
148 // Max 8 axes per gamepad (4 standard + 4 custom)
149 float axes[8];
152
159 typedef void (*webxr_error_callback_func)(void* userData, int error);
160
167 typedef void (*webxr_frame_callback_func)(void* userData, int time);
168
175 typedef void (*webxr_session_callback_func)(void* userData, int mode);
176
183 typedef void (*webxr_session_supported_callback_func)(int mode, int supported);
184
194 extern void webxr_init(webxr_frame_callback_func frameCallback,
195 webxr_session_callback_func sessionStartCallback,
196 webxr_session_callback_func sessionEndCallback, webxr_error_callback_func errorCallback,
197 void* userData);
198
199 /*
200 Test if session mode is supported
201
202 @param mode Session mode to test
203 @param supportedCallback Callback which will be called once the
204 result has become available
205 */
208 /*
209 Request session presentation start
210
211 @param mode Session mode from @ref WebXRSessionMode.
212 @param requiredFeatures Required session features from @ref WebXRSessionFeatures
213 @param optionalFeatures Optional session features from @ref WebXRSessionFeatures
214
215 Needs to be called from a [user activation
216 event](https://html.spec.whatwg.org/multipage/interaction.html#triggered-by-user-activation).
217 */
219 WebXRSessionMode mode, unsigned int requiredFeatures, unsigned int optionalFeatures);
220
221 /*
222 Request that the webxr presentation exits VR mode
223 */
224 extern void webxr_request_exit();
225
230
234 extern bool webxr_get_views(WebXRView* views, int* viewCount, int maxViews);
235
239 extern bool webxr_get_framebuffer_size(int* width, int* height);
240
244 extern unsigned int webxr_get_framebuffer();
245
251
260 extern int webxr_get_input_sources(WebXRInputSource* outArray, int max, int* outCount);
261
272
281}
282
283#endif
284// VTK-HeaderTest-Exclude: vtkWebXR.h
WebXR Gamepad see https://www.w3.org/TR/2024/WD-webxr-gamepads-module-1-20240409/#xr-standard-heading...
Definition vtkWebXR.h:144
WebXRGamepadButton buttons[8]
Definition vtkWebXR.h:146
float axes[8]
Definition vtkWebXR.h:149
int buttonsCount
Definition vtkWebXR.h:147
WebXRTargetRayMode targetRayMode
Definition vtkWebXR.h:104
WebXRHandedness handedness
Definition vtkWebXR.h:103
WebXR rigid transform.
Definition vtkWebXR.h:83
double position[3]
Definition vtkWebXR.h:85
double orientation[4]
Definition vtkWebXR.h:86
double matrix[16]
Definition vtkWebXR.h:84
WebXR view.
Definition vtkWebXR.h:91
WebXRRigidTransform viewPose
Definition vtkWebXR.h:93
int viewport[4]
Definition vtkWebXR.h:97
double projectionMatrix[16]
Definition vtkWebXR.h:95
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
void(* webxr_error_callback_func)(void *userData, int error)
Callback for errors.
Definition vtkWebXR.h:159
#define webxr_get_framebuffer
Get WebXR framebuffer ID.
Definition vtkWebXR.h:25
#define webxr_get_views
Definition vtkWebXR.h:23
WebXRInputPoseMode
WebXR 'XRSessionMode' enum.
Definition vtkWebXR.h:76
@ WEBXR_INPUT_POSE_TARGET_RAY
Definition vtkWebXR.h:78
@ WEBXR_INPUT_POSE_GRIP
Definition vtkWebXR.h:77
void(* webxr_frame_callback_func)(void *userData, int time)
Callback for frame rendering.
Definition vtkWebXR.h:167
#define webxr_request_session
Definition vtkWebXR.h:20
#define webxr_request_exit
Definition vtkWebXR.h:21
#define webxr_get_input_sources
Definition vtkWebXR.h:26
#define webxr_get_input_pose
Definition vtkWebXR.h:27
WebXRGamepadButtonMapping
Definition vtkWebXR.h:115
@ WEBXR_BUTTON_4
Definition vtkWebXR.h:123
@ WEBXR_BUTTON_PRIMARY_TRIGGER
Definition vtkWebXR.h:116
@ WEBXR_BUTTON_PRIMARY_TOUCHPAD
Definition vtkWebXR.h:118
@ WEBXR_BUTTON_3
Definition vtkWebXR.h:122
@ WEBXR_BUTTON_2
Definition vtkWebXR.h:121
@ WEBXR_BUTTON_PRIMARY_SQUEEZE
Definition vtkWebXR.h:117
@ WEBXR_BUTTON_PRIMARY_THUMBSTICK
Definition vtkWebXR.h:119
@ WEBXR_BUTTON_1
Definition vtkWebXR.h:120
@ WEBXR_INTERNAL_HANDPOSE
Definition vtkWebXR.h:124
WebXRTargetRayMode
WebXR target ray mode.
Definition vtkWebXR.h:53
@ WEBXR_TARGET_RAY_MODE_TRACKED_POINTER
Definition vtkWebXR.h:55
@ WEBXR_TARGET_RAY_MODE_SCREEN
Definition vtkWebXR.h:56
@ WEBXR_TARGET_RAY_MODE_GAZE
Definition vtkWebXR.h:54
void(* webxr_session_supported_callback_func)(int mode, int supported)
Callback for webxr_is_session_supported.
Definition vtkWebXR.h:183
#define webxr_is_session_supported
Definition vtkWebXR.h:19
void(* webxr_session_callback_func)(void *userData, int mode)
Callback for VR session start.
Definition vtkWebXR.h:175
WebXRGamepadAxisMapping
Definition vtkWebXR.h:128
@ WEBXR_AXIS_PRIMARY_TOUCHPAD_Y
Definition vtkWebXR.h:130
@ WEBXR_AXIS_1
Definition vtkWebXR.h:133
@ WEBXR_AXIS_PRIMARY_THUMBSTICK_Y
Definition vtkWebXR.h:132
@ WEBXR_AXIS_3
Definition vtkWebXR.h:135
@ WEBXR_AXIS_2
Definition vtkWebXR.h:134
@ WEBXR_AXIS_4
Definition vtkWebXR.h:136
@ WEBXR_AXIS_PRIMARY_THUMBSTICK_X
Definition vtkWebXR.h:131
@ WEBXR_AXIS_PRIMARY_TOUCHPAD_X
Definition vtkWebXR.h:129
#define webxr_init
Definition vtkWebXR.h:18
WebXRHandedness
WebXR handedness.
Definition vtkWebXR.h:45
@ WEBXR_HANDEDNESS_LEFT
Definition vtkWebXR.h:47
@ WEBXR_HANDEDNESS_RIGHT
Definition vtkWebXR.h:48
@ WEBXR_HANDEDNESS_NONE
Definition vtkWebXR.h:46
WebXRSessionMode
WebXR 'XRSessionMode' enum.
Definition vtkWebXR.h:61
@ WEBXR_SESSION_MODE_INLINE
Definition vtkWebXR.h:62
@ WEBXR_SESSION_MODE_IMMERSIVE_AR
Definition vtkWebXR.h:64
@ WEBXR_SESSION_MODE_IMMERSIVE_VR
Definition vtkWebXR.h:63
#define webxr_get_viewer_pose
Definition vtkWebXR.h:22
#define webxr_get_input_gamepad
Definition vtkWebXR.h:28
#define webxr_get_framebuffer_size
Definition vtkWebXR.h:24
#define max(a, b)