VTK  9.7.1
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 
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
31 extern "C"
32 #endif
33 {
34 
37  {
41  };
42 
45  {
49  };
50 
53  {
57  };
58 
61  {
65  };
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 
76  {
79  };
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];
98  } WebXRView;
99 
100  typedef struct WebXRInputSource
101  {
102  int id;
106 
107  typedef struct WebXRGamepadButton
108  {
109  int pressed;
110  int touched;
111  float value;
113 
115  {
125  };
126 
128  {
137  };
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];
151  } WebXRGamepad;
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  */
206  extern void webxr_is_session_supported(
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  */
218  extern void webxr_request_session(
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 
229  extern bool webxr_get_viewer_pose(WebXRRigidTransform* pose);
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 
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
#define webxr_request_exit
Definition: vtkWebXR.h:21
int axesCount
Definition: vtkWebXR.h:150
#define webxr_get_framebuffer
Definition: vtkWebXR.h:25
WebXR rigid transform.
Definition: vtkWebXR.h:82
#define webxr_get_input_sources
Definition: vtkWebXR.h:26
WebXRError
Errors enum.
Definition: vtkWebXR.h:36
int viewport[4]
Definition: vtkWebXR.h:97
double projectionMatrix[16]
Definition: vtkWebXR.h:95
struct WebXRGamepad WebXRGamepad
WebXR Gamepad see https://www.w3.org/TR/2024/WD-webxr-gamepads-module-1-20240409/#xr-standard-heading...
double orientation[4]
Definition: vtkWebXR.h:86
WebXRInputPoseMode
WebXR 'XRSessionMode' enum.
Definition: vtkWebXR.h:75
float axes[8]
Definition: vtkWebXR.h:149
#define webxr_request_session
Definition: vtkWebXR.h:20
WebXRTargetRayMode targetRayMode
Definition: vtkWebXR.h:104
WebXR Device API not supported in this browser.
Definition: vtkWebXR.h:38
#define webxr_get_framebuffer_size
Definition: vtkWebXR.h:24
WebXRHandedness
WebXR handedness.
Definition: vtkWebXR.h:44
double matrix[16]
Definition: vtkWebXR.h:84
#define webxr_get_views
Definition: vtkWebXR.h:23
struct WebXRInputSource WebXRInputSource
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
WebXR view.
Definition: vtkWebXR.h:90
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
struct WebXRView WebXRView
WebXR view.
struct WebXRGamepadButton WebXRGamepadButton
WebXRGamepadButtonMapping
Definition: vtkWebXR.h:114
given session mode not supported
Definition: vtkWebXR.h:40
#define webxr_init
Definition: vtkWebXR.h:18
GL context cannot render WebXR.
Definition: vtkWebXR.h:39
WebXRGamepadAxisMapping
Definition: vtkWebXR.h:127
struct WebXRRigidTransform WebXRRigidTransform
WebXR rigid transform.
void(* webxr_session_callback_func)(void *userData, int mode)
Callback for VR session start.
Definition: vtkWebXR.h:175
#define webxr_get_input_gamepad
Definition: vtkWebXR.h:28
WebXRGamepadButton buttons[8]
Definition: vtkWebXR.h:146
void(* webxr_frame_callback_func)(void *userData, int time)
Callback for frame rendering.
Definition: vtkWebXR.h:167
int buttonsCount
Definition: vtkWebXR.h:147
double position[3]
Definition: vtkWebXR.h:85
WebXRHandedness handedness
Definition: vtkWebXR.h:103
#define webxr_get_viewer_pose
Definition: vtkWebXR.h:22
WebXRTargetRayMode
WebXR target ray mode.
Definition: vtkWebXR.h:52
#define max(a, b)
WebXRSessionMode
WebXR 'XRSessionMode' enum.
Definition: vtkWebXR.h:60
void(* webxr_error_callback_func)(void *userData, int error)
Callback for errors.
Definition: vtkWebXR.h:159
WebXRRigidTransform viewPose
Definition: vtkWebXR.h:93
#define webxr_get_input_pose
Definition: vtkWebXR.h:27
WebXR Gamepad see https://www.w3.org/TR/2024/WD-webxr-gamepads-module-1-20240409/#xr-standard-heading...
Definition: vtkWebXR.h:143