iwer 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/iwer.js +4628 -0
- package/build/iwer.min.js +1 -0
- package/build/iwer.module.js +4591 -0
- package/build/iwer.module.min.js +1 -0
- package/lib/action/ActionPlayer.d.ts +75 -0
- package/lib/action/ActionPlayer.d.ts.map +1 -0
- package/lib/action/ActionPlayer.js +206 -0
- package/lib/action/ActionPlayer.js.map +1 -0
- package/lib/action/ActionRecorder.d.ts +59 -0
- package/lib/action/ActionRecorder.d.ts.map +1 -0
- package/lib/action/ActionRecorder.js +162 -0
- package/lib/action/ActionRecorder.js.map +1 -0
- package/lib/action/Capture.d.ts +3 -0
- package/lib/action/Capture.d.ts.map +1 -0
- package/lib/action/Capture.js +26907 -0
- package/lib/action/Capture.js.map +1 -0
- package/lib/device/XRController.d.ts +24 -0
- package/lib/device/XRController.d.ts.map +1 -0
- package/lib/device/XRController.js +82 -0
- package/lib/device/XRController.js.map +1 -0
- package/lib/device/XRDevice.d.ts +142 -0
- package/lib/device/XRDevice.d.ts.map +1 -0
- package/lib/device/XRDevice.js +370 -0
- package/lib/device/XRDevice.js.map +1 -0
- package/lib/device/XRHandInput.d.ts +44 -0
- package/lib/device/XRHandInput.d.ts.map +1 -0
- package/lib/device/XRHandInput.js +133 -0
- package/lib/device/XRHandInput.js.map +1 -0
- package/lib/device/XRTrackedInput.d.ts +22 -0
- package/lib/device/XRTrackedInput.d.ts.map +1 -0
- package/lib/device/XRTrackedInput.js +89 -0
- package/lib/device/XRTrackedInput.js.map +1 -0
- package/lib/device/configs/controller/meta.d.ts +6 -0
- package/lib/device/configs/controller/meta.d.ts.map +1 -0
- package/lib/device/configs/controller/meta.js +152 -0
- package/lib/device/configs/controller/meta.js.map +1 -0
- package/lib/device/configs/hand/pinch.d.ts +3 -0
- package/lib/device/configs/hand/pinch.d.ts.map +1 -0
- package/lib/device/configs/hand/pinch.js +237 -0
- package/lib/device/configs/hand/pinch.js.map +1 -0
- package/lib/device/configs/hand/point.d.ts +3 -0
- package/lib/device/configs/hand/point.d.ts.map +1 -0
- package/lib/device/configs/hand/point.js +236 -0
- package/lib/device/configs/hand/point.js.map +1 -0
- package/lib/device/configs/hand/relaxed.d.ts +3 -0
- package/lib/device/configs/hand/relaxed.d.ts.map +1 -0
- package/lib/device/configs/hand/relaxed.js +236 -0
- package/lib/device/configs/hand/relaxed.js.map +1 -0
- package/lib/device/configs/headset/meta.d.ts +6 -0
- package/lib/device/configs/headset/meta.d.ts.map +1 -0
- package/lib/device/configs/headset/meta.js +99 -0
- package/lib/device/configs/headset/meta.js.map +1 -0
- package/lib/device/controllers.d.ts +31 -0
- package/lib/device/controllers.d.ts.map +1 -0
- package/lib/device/controllers.js +8 -0
- package/lib/device/controllers.js.map +1 -0
- package/lib/events/XRInputSourceEvent.d.ts +16 -0
- package/lib/events/XRInputSourceEvent.d.ts.map +1 -0
- package/lib/events/XRInputSourceEvent.js +14 -0
- package/lib/events/XRInputSourceEvent.js.map +1 -0
- package/lib/events/XRInputSourcesChangeEvent.d.ts +18 -0
- package/lib/events/XRInputSourcesChangeEvent.d.ts.map +1 -0
- package/lib/events/XRInputSourcesChangeEvent.js +18 -0
- package/lib/events/XRInputSourcesChangeEvent.js.map +1 -0
- package/lib/events/XRReferenceSpaceEvent.d.ts +16 -0
- package/lib/events/XRReferenceSpaceEvent.d.ts.map +1 -0
- package/lib/events/XRReferenceSpaceEvent.js +11 -0
- package/lib/events/XRReferenceSpaceEvent.js.map +1 -0
- package/lib/events/XRSessionEvent.d.ts +13 -0
- package/lib/events/XRSessionEvent.d.ts.map +1 -0
- package/lib/events/XRSessionEvent.js +10 -0
- package/lib/events/XRSessionEvent.js.map +1 -0
- package/lib/frameloop/XRFrame.d.ts +28 -0
- package/lib/frameloop/XRFrame.d.ts.map +1 -0
- package/lib/frameloop/XRFrame.js +117 -0
- package/lib/frameloop/XRFrame.js.map +1 -0
- package/lib/gamepad/Gamepad.d.ts +72 -0
- package/lib/gamepad/Gamepad.d.ts.map +1 -0
- package/lib/gamepad/Gamepad.js +126 -0
- package/lib/gamepad/Gamepad.js.map +1 -0
- package/lib/index.d.ts +24 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +36 -0
- package/lib/index.js.map +1 -0
- package/lib/initialization/XRSystem.d.ts +13 -0
- package/lib/initialization/XRSystem.d.ts.map +1 -0
- package/lib/initialization/XRSystem.js +65 -0
- package/lib/initialization/XRSystem.js.map +1 -0
- package/lib/input/XRHand.d.ts +31 -0
- package/lib/input/XRHand.d.ts.map +1 -0
- package/lib/input/XRHand.js +31 -0
- package/lib/input/XRHand.js.map +1 -0
- package/lib/input/XRInputSource.d.ts +37 -0
- package/lib/input/XRInputSource.d.ts.map +1 -0
- package/lib/input/XRInputSource.js +51 -0
- package/lib/input/XRInputSource.js.map +1 -0
- package/lib/input/XRInputSourceArray.d.ts +11 -0
- package/lib/input/XRInputSourceArray.d.ts.map +1 -0
- package/lib/input/XRInputSourceArray.js +17 -0
- package/lib/input/XRInputSourceArray.js.map +1 -0
- package/lib/layers/XRWebGLLayer.d.ts +31 -0
- package/lib/layers/XRWebGLLayer.d.ts.map +1 -0
- package/lib/layers/XRWebGLLayer.js +67 -0
- package/lib/layers/XRWebGLLayer.js.map +1 -0
- package/lib/pose/XRJointPose.d.ts +11 -0
- package/lib/pose/XRJointPose.d.ts.map +1 -0
- package/lib/pose/XRJointPose.js +12 -0
- package/lib/pose/XRJointPose.js.map +1 -0
- package/lib/pose/XRPose.d.ts +16 -0
- package/lib/pose/XRPose.d.ts.map +1 -0
- package/lib/pose/XRPose.js +24 -0
- package/lib/pose/XRPose.js.map +1 -0
- package/lib/pose/XRViewerPose.d.ts +12 -0
- package/lib/pose/XRViewerPose.d.ts.map +1 -0
- package/lib/pose/XRViewerPose.js +14 -0
- package/lib/pose/XRViewerPose.js.map +1 -0
- package/lib/primitives/XRRigidTransform.d.ts +17 -0
- package/lib/primitives/XRRigidTransform.d.ts.map +1 -0
- package/lib/primitives/XRRigidTransform.js +54 -0
- package/lib/primitives/XRRigidTransform.js.map +1 -0
- package/lib/session/XRRenderState.d.ts +22 -0
- package/lib/session/XRRenderState.d.ts.map +1 -0
- package/lib/session/XRRenderState.js +26 -0
- package/lib/session/XRRenderState.js.map +1 -0
- package/lib/session/XRSession.d.ts +103 -0
- package/lib/session/XRSession.d.ts.map +1 -0
- package/lib/session/XRSession.js +459 -0
- package/lib/session/XRSession.js.map +1 -0
- package/lib/spaces/XRJointSpace.d.ts +13 -0
- package/lib/spaces/XRJointSpace.d.ts.map +1 -0
- package/lib/spaces/XRJointSpace.js +12 -0
- package/lib/spaces/XRJointSpace.js.map +1 -0
- package/lib/spaces/XRReferenceSpace.d.ts +22 -0
- package/lib/spaces/XRReferenceSpace.d.ts.map +1 -0
- package/lib/spaces/XRReferenceSpace.js +42 -0
- package/lib/spaces/XRReferenceSpace.js.map +1 -0
- package/lib/spaces/XRSpace.d.ts +20 -0
- package/lib/spaces/XRSpace.d.ts.map +1 -0
- package/lib/spaces/XRSpace.js +45 -0
- package/lib/spaces/XRSpace.js.map +1 -0
- package/lib/utils/DOMPointReadOnly.d.ts +17 -0
- package/lib/utils/DOMPointReadOnly.d.ts.map +1 -0
- package/lib/utils/DOMPointReadOnly.js +26 -0
- package/lib/utils/DOMPointReadOnly.js.map +1 -0
- package/lib/utils/Math.d.ts +49 -0
- package/lib/utils/Math.d.ts.map +1 -0
- package/lib/utils/Math.js +129 -0
- package/lib/utils/Math.js.map +1 -0
- package/lib/version.d.ts +2 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +2 -0
- package/lib/version.js.map +1 -0
- package/lib/views/XRView.d.ts +25 -0
- package/lib/views/XRView.d.ts.map +1 -0
- package/lib/views/XRView.js +39 -0
- package/lib/views/XRView.js.map +1 -0
- package/lib/views/XRViewport.d.ts +15 -0
- package/lib/views/XRViewport.d.ts.map +1 -0
- package/lib/views/XRViewport.js +19 -0
- package/lib/views/XRViewport.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import { WebXRFeatures, PRIVATE as XRDEVICE_PRIVATE, } from '../device/XRDevice';
|
|
2
|
+
import { PRIVATE as XRFRAME_PRIVATE, XRFrame } from '../frameloop/XRFrame';
|
|
3
|
+
import { XRInputSourcesChangeEvent, } from '../events/XRInputSourcesChangeEvent';
|
|
4
|
+
import { XRReferenceSpace, XRReferenceSpaceType, } from '../spaces/XRReferenceSpace';
|
|
5
|
+
import { XRRenderState } from './XRRenderState';
|
|
6
|
+
import { XRSessionEvent, } from '../events/XRSessionEvent';
|
|
7
|
+
import { XREye } from '../views/XRView';
|
|
8
|
+
import { PRIVATE as XRSPACE_PRIVATE } from '../spaces/XRSpace';
|
|
9
|
+
import { PRIVATE as XRWEBGLLAYER_PRIVATE } from '../layers/XRWebGLLayer';
|
|
10
|
+
import { mat4 } from 'gl-matrix';
|
|
11
|
+
export var XRVisibilityState;
|
|
12
|
+
(function (XRVisibilityState) {
|
|
13
|
+
XRVisibilityState["Visible"] = "visible";
|
|
14
|
+
XRVisibilityState["VisibleBlurred"] = "visible-blurred";
|
|
15
|
+
XRVisibilityState["Hidden"] = "hidden";
|
|
16
|
+
})(XRVisibilityState || (XRVisibilityState = {}));
|
|
17
|
+
export var XRSessionMode;
|
|
18
|
+
(function (XRSessionMode) {
|
|
19
|
+
XRSessionMode["Inline"] = "inline";
|
|
20
|
+
XRSessionMode["ImmersiveVR"] = "immersive-vr";
|
|
21
|
+
XRSessionMode["ImmersiveAR"] = "immersive-ar";
|
|
22
|
+
})(XRSessionMode || (XRSessionMode = {}));
|
|
23
|
+
export const PRIVATE = Symbol('@immersive-web-emulation-runtime/xr-session');
|
|
24
|
+
export class XRSession extends EventTarget {
|
|
25
|
+
constructor(device, mode, enabledFeatures) {
|
|
26
|
+
super();
|
|
27
|
+
this[PRIVATE] = {
|
|
28
|
+
device,
|
|
29
|
+
mode,
|
|
30
|
+
renderState: new XRRenderState(),
|
|
31
|
+
pendingRenderState: null,
|
|
32
|
+
enabledFeatures: enabledFeatures,
|
|
33
|
+
isSystemKeyboardSupported: false,
|
|
34
|
+
ended: false,
|
|
35
|
+
projectionMatrices: {
|
|
36
|
+
[XREye.Left]: mat4.create(),
|
|
37
|
+
[XREye.Right]: mat4.create(),
|
|
38
|
+
[XREye.None]: mat4.create(),
|
|
39
|
+
},
|
|
40
|
+
getProjectionMatrix: (eye) => {
|
|
41
|
+
return this[PRIVATE].projectionMatrices[eye];
|
|
42
|
+
},
|
|
43
|
+
referenceSpaceIsSupported: (referenceSpaceType) => {
|
|
44
|
+
if (!this[PRIVATE].enabledFeatures.includes(referenceSpaceType)) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
switch (referenceSpaceType) {
|
|
48
|
+
case XRReferenceSpaceType.Viewer:
|
|
49
|
+
return true;
|
|
50
|
+
case XRReferenceSpaceType.Local:
|
|
51
|
+
case XRReferenceSpaceType.LocalFloor:
|
|
52
|
+
case XRReferenceSpaceType.BoundedFloor:
|
|
53
|
+
case XRReferenceSpaceType.Unbounded:
|
|
54
|
+
return this[PRIVATE].mode != XRSessionMode.Inline;
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
frameHandle: 0,
|
|
58
|
+
frameCallbacks: [],
|
|
59
|
+
currentFrameCallbacks: null,
|
|
60
|
+
onDeviceFrame: () => {
|
|
61
|
+
if (this[PRIVATE].ended) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
this[PRIVATE].deviceFrameHandle = globalThis.requestAnimationFrame(this[PRIVATE].onDeviceFrame);
|
|
65
|
+
if (this[PRIVATE].pendingRenderState != null) {
|
|
66
|
+
this[PRIVATE].renderState = this[PRIVATE].pendingRenderState;
|
|
67
|
+
this[PRIVATE].pendingRenderState = null;
|
|
68
|
+
this[PRIVATE].device[XRDEVICE_PRIVATE].onBaseLayerSet(this[PRIVATE].renderState.baseLayer);
|
|
69
|
+
}
|
|
70
|
+
const baseLayer = this[PRIVATE].renderState.baseLayer;
|
|
71
|
+
if (baseLayer === null) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const context = baseLayer.context;
|
|
75
|
+
const canvas = context.canvas;
|
|
76
|
+
/**
|
|
77
|
+
* This code snippet is designed to clear the buffers attached to an opaque framebuffer
|
|
78
|
+
* at the beginning of each XR animation frame, but it only applies to immersive XR sessions.
|
|
79
|
+
* The process is as follows:
|
|
80
|
+
*
|
|
81
|
+
* 1. Check if the session is immersive: It verifies if `session.immersive` is true.
|
|
82
|
+
* This ensures that the buffer clearing operations are only performed for immersive
|
|
83
|
+
* sessions, which have exclusive access to the XR device's display.
|
|
84
|
+
*
|
|
85
|
+
* 2. Save current clear values: The current clear values for the color, depth, and
|
|
86
|
+
* stencil buffers are stored. These values need to be restored after clearing the
|
|
87
|
+
* buffers to maintain the application's rendering state as expected.
|
|
88
|
+
*
|
|
89
|
+
* 3. Set clear values to defaults: The clear color is set to transparent black, the
|
|
90
|
+
* clear depth to the maximum depth value (1.0), and the clear stencil to 0. This
|
|
91
|
+
* ensures that the buffers are reset to a known state, free from any residual data.
|
|
92
|
+
*
|
|
93
|
+
* 4. Clear the buffers: The depth, color, and stencil buffers are cleared, removing
|
|
94
|
+
* any content from previous frames and preparing them for new rendering operations.
|
|
95
|
+
*
|
|
96
|
+
* 5. Restore previous clear values: The original clear values are reinstated to return
|
|
97
|
+
* the WebGL context to its state prior to this operation, allowing subsequent rendering
|
|
98
|
+
* to proceed without interference.
|
|
99
|
+
*
|
|
100
|
+
* This clearing process is crucial for some XR devices to function correctly and to
|
|
101
|
+
* prevent rendering artifacts from past frames. It ensures that each new frame starts
|
|
102
|
+
* with a clean slate.
|
|
103
|
+
*/
|
|
104
|
+
if (this[PRIVATE].mode != XRSessionMode.Inline) {
|
|
105
|
+
const currentClearColor = context.getParameter(context.COLOR_CLEAR_VALUE);
|
|
106
|
+
const currentClearDepth = context.getParameter(context.DEPTH_CLEAR_VALUE);
|
|
107
|
+
const currentClearStencil = context.getParameter(context.STENCIL_CLEAR_VALUE);
|
|
108
|
+
context.clearColor(0.0, 0.0, 0.0, 0.0);
|
|
109
|
+
context.clearDepth(1);
|
|
110
|
+
context.clearStencil(0.0);
|
|
111
|
+
context.clear(context.DEPTH_BUFFER_BIT |
|
|
112
|
+
context.COLOR_BUFFER_BIT |
|
|
113
|
+
context.STENCIL_BUFFER_BIT);
|
|
114
|
+
context.clearColor(currentClearColor[0], currentClearColor[1], currentClearColor[2], currentClearColor[3]);
|
|
115
|
+
context.clearDepth(currentClearDepth);
|
|
116
|
+
context.clearStencil(currentClearStencil);
|
|
117
|
+
}
|
|
118
|
+
// Calculate projection matrices
|
|
119
|
+
const { depthNear, depthFar } = this[PRIVATE].renderState;
|
|
120
|
+
const { width, height } = canvas;
|
|
121
|
+
if (this[PRIVATE].mode !== XRSessionMode.Inline) {
|
|
122
|
+
const aspect = (width * (this[PRIVATE].device.stereoEnabled ? 0.5 : 1.0)) / height;
|
|
123
|
+
mat4.perspective(this[PRIVATE].projectionMatrices[XREye.Left], this[PRIVATE].device.fovy, aspect, depthNear, depthFar);
|
|
124
|
+
mat4.copy(this[PRIVATE].projectionMatrices[XREye.Right], this[PRIVATE].projectionMatrices[XREye.Left]);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const aspect = width / height;
|
|
128
|
+
mat4.perspective(this[PRIVATE].projectionMatrices[XREye.None], this[PRIVATE].renderState.inlineVerticalFieldOfView, aspect, depthNear, depthFar);
|
|
129
|
+
}
|
|
130
|
+
const frame = new XRFrame(this, this[PRIVATE].frameHandle, true, true, performance.now());
|
|
131
|
+
this[PRIVATE].device[XRDEVICE_PRIVATE].onFrameStart(frame);
|
|
132
|
+
this[PRIVATE].updateActiveInputSources();
|
|
133
|
+
/*
|
|
134
|
+
* For each entry in callbacks, in order:
|
|
135
|
+
* - If the entry’s cancelled boolean is true, continue to the next entry.
|
|
136
|
+
* - Invoke the Web IDL callback function, passing now and frame as the arguments.
|
|
137
|
+
* - If an exception is thrown, report the exception.
|
|
138
|
+
*/
|
|
139
|
+
// - Let callbacks be a list of the entries in session’s list of animation frame
|
|
140
|
+
// callback, in the order in which they were added to the list.
|
|
141
|
+
const callbacks = (this[PRIVATE].currentFrameCallbacks =
|
|
142
|
+
this[PRIVATE].frameCallbacks);
|
|
143
|
+
// - Set session’s list of animation frame callbacks to the empty list.
|
|
144
|
+
this[PRIVATE].frameCallbacks = [];
|
|
145
|
+
const rightNow = performance.now();
|
|
146
|
+
for (let i = 0; i < callbacks.length; i++) {
|
|
147
|
+
try {
|
|
148
|
+
if (!callbacks[i].cancelled) {
|
|
149
|
+
callbacks[i].callback(rightNow, frame);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.error(err);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
this[PRIVATE].currentFrameCallbacks = null;
|
|
157
|
+
// - Set frame’s active boolean to false.
|
|
158
|
+
frame[XRFRAME_PRIVATE].active = false;
|
|
159
|
+
},
|
|
160
|
+
nominalFrameRate: device.internalNominalFrameRate,
|
|
161
|
+
referenceSpaces: [],
|
|
162
|
+
inputSourceArray: [],
|
|
163
|
+
activeInputSources: [],
|
|
164
|
+
updateActiveInputSources: () => {
|
|
165
|
+
const handTrackingOn = this[PRIVATE].enabledFeatures.includes(WebXRFeatures.HandTracking);
|
|
166
|
+
const prevInputs = this[PRIVATE].activeInputSources;
|
|
167
|
+
const currInputs = this[PRIVATE].device.inputSources.filter((inputSource) => !inputSource.hand || handTrackingOn);
|
|
168
|
+
const added = currInputs.filter((item) => !prevInputs.includes(item));
|
|
169
|
+
const removed = prevInputs.filter((item) => !currInputs.includes(item));
|
|
170
|
+
if (added.length > 0 || removed.length > 0) {
|
|
171
|
+
this.dispatchEvent(new XRInputSourcesChangeEvent('inputsourceschange', {
|
|
172
|
+
session: this,
|
|
173
|
+
added,
|
|
174
|
+
removed,
|
|
175
|
+
}));
|
|
176
|
+
}
|
|
177
|
+
this[PRIVATE].activeInputSources = currInputs;
|
|
178
|
+
},
|
|
179
|
+
onend: null,
|
|
180
|
+
oninputsourceschange: null,
|
|
181
|
+
onselect: null,
|
|
182
|
+
onselectstart: null,
|
|
183
|
+
onselectend: null,
|
|
184
|
+
onsqueeze: null,
|
|
185
|
+
onsqueezestart: null,
|
|
186
|
+
onsqueezeend: null,
|
|
187
|
+
onvisibilitychange: null,
|
|
188
|
+
onframeratechange: null,
|
|
189
|
+
};
|
|
190
|
+
// start the frameloop
|
|
191
|
+
this[PRIVATE].onDeviceFrame();
|
|
192
|
+
}
|
|
193
|
+
get visibilityState() {
|
|
194
|
+
return this[PRIVATE].device.visibilityState;
|
|
195
|
+
}
|
|
196
|
+
get frameRate() {
|
|
197
|
+
return this[PRIVATE].nominalFrameRate;
|
|
198
|
+
}
|
|
199
|
+
get supportedFrameRates() {
|
|
200
|
+
return new Float32Array(this[PRIVATE].device.supportedFrameRates);
|
|
201
|
+
}
|
|
202
|
+
get renderState() {
|
|
203
|
+
return this[PRIVATE].renderState;
|
|
204
|
+
}
|
|
205
|
+
get inputSources() {
|
|
206
|
+
// use the same array object
|
|
207
|
+
this[PRIVATE].inputSourceArray.length = 0;
|
|
208
|
+
if (!this[PRIVATE].ended && this[PRIVATE].mode !== XRSessionMode.Inline) {
|
|
209
|
+
this[PRIVATE].inputSourceArray.push(...this[PRIVATE].activeInputSources);
|
|
210
|
+
}
|
|
211
|
+
return this[PRIVATE].inputSourceArray;
|
|
212
|
+
}
|
|
213
|
+
get enabledFeatures() {
|
|
214
|
+
return this[PRIVATE].enabledFeatures;
|
|
215
|
+
}
|
|
216
|
+
get isSystemKeyboardSupported() {
|
|
217
|
+
return this[PRIVATE].isSystemKeyboardSupported;
|
|
218
|
+
}
|
|
219
|
+
updateRenderState(state = {}) {
|
|
220
|
+
if (this[PRIVATE].ended) {
|
|
221
|
+
throw new DOMException('XRSession has already ended.', 'InvalidStateError');
|
|
222
|
+
}
|
|
223
|
+
if (state.baseLayer &&
|
|
224
|
+
state.baseLayer[XRWEBGLLAYER_PRIVATE].session !== this) {
|
|
225
|
+
throw new DOMException('Base layer was created by a different XRSession', 'InvalidStateError');
|
|
226
|
+
}
|
|
227
|
+
if (state.inlineVerticalFieldOfView != null &&
|
|
228
|
+
this[PRIVATE].mode !== XRSessionMode.Inline) {
|
|
229
|
+
throw new DOMException('InlineVerticalFieldOfView must not be set for an immersive session', 'InvalidStateError');
|
|
230
|
+
}
|
|
231
|
+
this[PRIVATE].pendingRenderState = new XRRenderState(state, this[PRIVATE].renderState);
|
|
232
|
+
}
|
|
233
|
+
// the nominal frame rate updates are emulated, no actual update to the
|
|
234
|
+
// display frame rate of the device will be executed
|
|
235
|
+
async updateTargetFrameRate(rate) {
|
|
236
|
+
return new Promise((resolve, reject) => {
|
|
237
|
+
if (this[PRIVATE].ended) {
|
|
238
|
+
reject(new DOMException('XRSession has already ended.', 'InvalidStateError'));
|
|
239
|
+
}
|
|
240
|
+
else if (!this[PRIVATE].device.supportedFrameRates.includes(rate)) {
|
|
241
|
+
reject(new DOMException('Requested frame rate not supported.', 'InvalidStateError'));
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
if (this[PRIVATE].nominalFrameRate === rate) {
|
|
245
|
+
console.log(`Requested frame rate is the same as the current nominal frame rate, no update made`);
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
this[PRIVATE].nominalFrameRate = rate;
|
|
249
|
+
this.dispatchEvent(new XRSessionEvent('frameratechange', { session: this }));
|
|
250
|
+
console.log(`Nominal frame rate updated to ${rate}`);
|
|
251
|
+
}
|
|
252
|
+
resolve();
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
async requestReferenceSpace(type) {
|
|
257
|
+
return new Promise((resolve, reject) => {
|
|
258
|
+
if (this[PRIVATE].ended ||
|
|
259
|
+
!this[PRIVATE].referenceSpaceIsSupported(type)) {
|
|
260
|
+
reject(new DOMException('The requested reference space type is not supported.', 'NotSupportedError'));
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
let referenceSpace;
|
|
264
|
+
switch (type) {
|
|
265
|
+
case XRReferenceSpaceType.Viewer:
|
|
266
|
+
referenceSpace = this[PRIVATE].device.viewerSpace;
|
|
267
|
+
break;
|
|
268
|
+
case XRReferenceSpaceType.Local:
|
|
269
|
+
// creating an XRReferenceSpace with the current headset transform in global space
|
|
270
|
+
referenceSpace = new XRReferenceSpace(type, this[PRIVATE].device[XRDEVICE_PRIVATE].globalSpace, this[PRIVATE].device.viewerSpace[XRSPACE_PRIVATE].offsetMatrix);
|
|
271
|
+
break;
|
|
272
|
+
case XRReferenceSpaceType.LocalFloor:
|
|
273
|
+
case XRReferenceSpaceType.BoundedFloor:
|
|
274
|
+
case XRReferenceSpaceType.Unbounded:
|
|
275
|
+
// TO-DO: add boundary geometry for bounded-floor
|
|
276
|
+
referenceSpace = new XRReferenceSpace(type, this[PRIVATE].device[XRDEVICE_PRIVATE].globalSpace);
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
this[PRIVATE].referenceSpaces.push(referenceSpace);
|
|
280
|
+
resolve(referenceSpace);
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
requestAnimationFrame(callback) {
|
|
284
|
+
if (this[PRIVATE].ended) {
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
const frameHandle = ++this[PRIVATE].frameHandle;
|
|
288
|
+
this[PRIVATE].frameCallbacks.push({
|
|
289
|
+
handle: frameHandle,
|
|
290
|
+
callback,
|
|
291
|
+
cancelled: false,
|
|
292
|
+
});
|
|
293
|
+
return frameHandle;
|
|
294
|
+
}
|
|
295
|
+
cancelAnimationFrame(handle) {
|
|
296
|
+
// Remove the callback with that handle from the queue
|
|
297
|
+
let callbacks = this[PRIVATE].frameCallbacks;
|
|
298
|
+
let index = callbacks.findIndex((d) => d && d.handle === handle);
|
|
299
|
+
if (index > -1) {
|
|
300
|
+
callbacks[index].cancelled = true;
|
|
301
|
+
callbacks.splice(index, 1);
|
|
302
|
+
}
|
|
303
|
+
// If cancelAnimationFrame is called from within a frame callback, also check
|
|
304
|
+
// the remaining callbacks for the current frame:
|
|
305
|
+
callbacks = this[PRIVATE].currentFrameCallbacks;
|
|
306
|
+
if (callbacks) {
|
|
307
|
+
index = callbacks.findIndex((d) => d && d.handle === handle);
|
|
308
|
+
if (index > -1) {
|
|
309
|
+
callbacks[index].cancelled = true;
|
|
310
|
+
// Rely on cancelled flag only; don't mutate this array while it's being iterated
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
async end() {
|
|
315
|
+
return new Promise((resolve, reject) => {
|
|
316
|
+
if (this[PRIVATE].ended || this[PRIVATE].deviceFrameHandle === null) {
|
|
317
|
+
reject(new DOMException('XRSession has already ended.', 'InvalidStateError'));
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
globalThis.cancelAnimationFrame(this[PRIVATE].deviceFrameHandle);
|
|
321
|
+
this[PRIVATE].device[XRDEVICE_PRIVATE].onSessionEnd();
|
|
322
|
+
this.dispatchEvent(new XRSessionEvent('end', { session: this }));
|
|
323
|
+
resolve();
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
// events
|
|
328
|
+
get onend() {
|
|
329
|
+
var _a;
|
|
330
|
+
return (_a = this[PRIVATE].onend) !== null && _a !== void 0 ? _a : (() => { });
|
|
331
|
+
}
|
|
332
|
+
set onend(callback) {
|
|
333
|
+
if (this[PRIVATE].onend) {
|
|
334
|
+
this.removeEventListener('end', this[PRIVATE].onend);
|
|
335
|
+
}
|
|
336
|
+
this[PRIVATE].onend = callback;
|
|
337
|
+
if (callback) {
|
|
338
|
+
this.addEventListener('end', callback);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
get oninputsourceschange() {
|
|
342
|
+
var _a;
|
|
343
|
+
return (_a = this[PRIVATE].oninputsourceschange) !== null && _a !== void 0 ? _a : (() => { });
|
|
344
|
+
}
|
|
345
|
+
set oninputsourceschange(callback) {
|
|
346
|
+
if (this[PRIVATE].oninputsourceschange) {
|
|
347
|
+
this.removeEventListener('inputsourceschange', this[PRIVATE].oninputsourceschange);
|
|
348
|
+
}
|
|
349
|
+
this[PRIVATE].oninputsourceschange = callback;
|
|
350
|
+
if (callback) {
|
|
351
|
+
this.addEventListener('inputsourceschange', callback);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
get onselect() {
|
|
355
|
+
var _a;
|
|
356
|
+
return (_a = this[PRIVATE].onselect) !== null && _a !== void 0 ? _a : (() => { });
|
|
357
|
+
}
|
|
358
|
+
set onselect(callback) {
|
|
359
|
+
if (this[PRIVATE].onselect) {
|
|
360
|
+
this.removeEventListener('select', this[PRIVATE].onselect);
|
|
361
|
+
}
|
|
362
|
+
this[PRIVATE].onselect = callback;
|
|
363
|
+
if (callback) {
|
|
364
|
+
this.addEventListener('select', callback);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
get onselectstart() {
|
|
368
|
+
var _a;
|
|
369
|
+
return (_a = this[PRIVATE].onselectstart) !== null && _a !== void 0 ? _a : (() => { });
|
|
370
|
+
}
|
|
371
|
+
set onselectstart(callback) {
|
|
372
|
+
if (this[PRIVATE].onselectstart) {
|
|
373
|
+
this.removeEventListener('selectstart', this[PRIVATE].onselectstart);
|
|
374
|
+
}
|
|
375
|
+
this[PRIVATE].onselectstart = callback;
|
|
376
|
+
if (callback) {
|
|
377
|
+
this.addEventListener('selectstart', callback);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
get onselectend() {
|
|
381
|
+
var _a;
|
|
382
|
+
return (_a = this[PRIVATE].onselectend) !== null && _a !== void 0 ? _a : (() => { });
|
|
383
|
+
}
|
|
384
|
+
set onselectend(callback) {
|
|
385
|
+
if (this[PRIVATE].onselectend) {
|
|
386
|
+
this.removeEventListener('selectend', this[PRIVATE].onselectend);
|
|
387
|
+
}
|
|
388
|
+
this[PRIVATE].onselectend = callback;
|
|
389
|
+
if (callback) {
|
|
390
|
+
this.addEventListener('selectend', callback);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
get onsqueeze() {
|
|
394
|
+
var _a;
|
|
395
|
+
return (_a = this[PRIVATE].onsqueeze) !== null && _a !== void 0 ? _a : (() => { });
|
|
396
|
+
}
|
|
397
|
+
set onsqueeze(callback) {
|
|
398
|
+
if (this[PRIVATE].onsqueeze) {
|
|
399
|
+
this.removeEventListener('squeeze', this[PRIVATE].onsqueeze);
|
|
400
|
+
}
|
|
401
|
+
this[PRIVATE].onsqueeze = callback;
|
|
402
|
+
if (callback) {
|
|
403
|
+
this.addEventListener('squeeze', callback);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
get onsqueezestart() {
|
|
407
|
+
var _a;
|
|
408
|
+
return (_a = this[PRIVATE].onsqueezestart) !== null && _a !== void 0 ? _a : (() => { });
|
|
409
|
+
}
|
|
410
|
+
set onsqueezestart(callback) {
|
|
411
|
+
if (this[PRIVATE].onsqueezestart) {
|
|
412
|
+
this.removeEventListener('squeezestart', this[PRIVATE].onsqueezestart);
|
|
413
|
+
}
|
|
414
|
+
this[PRIVATE].onsqueezestart = callback;
|
|
415
|
+
if (callback) {
|
|
416
|
+
this.addEventListener('squeezestart', callback);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
get onsqueezeend() {
|
|
420
|
+
var _a;
|
|
421
|
+
return (_a = this[PRIVATE].onsqueezeend) !== null && _a !== void 0 ? _a : (() => { });
|
|
422
|
+
}
|
|
423
|
+
set onsqueezeend(callback) {
|
|
424
|
+
if (this[PRIVATE].onsqueezeend) {
|
|
425
|
+
this.removeEventListener('squeezeend', this[PRIVATE].onsqueezeend);
|
|
426
|
+
}
|
|
427
|
+
this[PRIVATE].onsqueezeend = callback;
|
|
428
|
+
if (callback) {
|
|
429
|
+
this.addEventListener('squeezeend', callback);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
get onvisibilitychange() {
|
|
433
|
+
var _a;
|
|
434
|
+
return (_a = this[PRIVATE].onvisibilitychange) !== null && _a !== void 0 ? _a : (() => { });
|
|
435
|
+
}
|
|
436
|
+
set onvisibilitychange(callback) {
|
|
437
|
+
if (this[PRIVATE].onvisibilitychange) {
|
|
438
|
+
this.removeEventListener('visibilitychange', this[PRIVATE].onvisibilitychange);
|
|
439
|
+
}
|
|
440
|
+
this[PRIVATE].onvisibilitychange = callback;
|
|
441
|
+
if (callback) {
|
|
442
|
+
this.addEventListener('visibilitychange', callback);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
get onframeratechange() {
|
|
446
|
+
var _a;
|
|
447
|
+
return (_a = this[PRIVATE].onframeratechange) !== null && _a !== void 0 ? _a : (() => { });
|
|
448
|
+
}
|
|
449
|
+
set onframeratechange(callback) {
|
|
450
|
+
if (this[PRIVATE].onframeratechange) {
|
|
451
|
+
this.removeEventListener('frameratechange', this[PRIVATE].onframeratechange);
|
|
452
|
+
}
|
|
453
|
+
this[PRIVATE].onframeratechange = callback;
|
|
454
|
+
if (callback) {
|
|
455
|
+
this.addEventListener('frameratechange', callback);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
//# sourceMappingURL=XRSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRSession.js","sourceRoot":"","sources":["../../src/session/XRSession.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { XRHandJoint } from '../input/XRHand';
|
|
2
|
+
import { XRSpace } from './XRSpace';
|
|
3
|
+
import { mat4 } from 'gl-matrix';
|
|
4
|
+
export declare const PRIVATE: unique symbol;
|
|
5
|
+
export declare class XRJointSpace extends XRSpace {
|
|
6
|
+
[PRIVATE]: {
|
|
7
|
+
jointName: XRHandJoint;
|
|
8
|
+
radius: number;
|
|
9
|
+
};
|
|
10
|
+
constructor(jointName: XRHandJoint, parentSpace?: XRSpace, offsetMatrix?: mat4);
|
|
11
|
+
get jointName(): XRHandJoint;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=XRJointSpace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRJointSpace.d.ts","sourceRoot":"","sources":["../../src/spaces/XRJointSpace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAO,MAAM,OAAO,eAEnB,CAAC;AAEF,qBAAa,YAAa,SAAQ,OAAO;IACxC,CAAC,OAAO,CAAC,EAAE;QACV,SAAS,EAAE,WAAW,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;gBAGD,SAAS,EAAE,WAAW,EACtB,WAAW,CAAC,EAAE,OAAO,EACrB,YAAY,CAAC,EAAE,IAAI;IAMpB,IAAI,SAAS,gBAEZ;CACD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { XRSpace } from './XRSpace';
|
|
2
|
+
export const PRIVATE = Symbol('@immersive-web-emulation-runtime/xr-joint-space');
|
|
3
|
+
export class XRJointSpace extends XRSpace {
|
|
4
|
+
constructor(jointName, parentSpace, offsetMatrix) {
|
|
5
|
+
super(parentSpace, offsetMatrix);
|
|
6
|
+
this[PRIVATE] = { jointName, radius: 0 };
|
|
7
|
+
}
|
|
8
|
+
get jointName() {
|
|
9
|
+
return this[PRIVATE].jointName;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=XRJointSpace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRJointSpace.js","sourceRoot":"","sources":["../../src/spaces/XRJointSpace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAC5B,iDAAiD,CACjD,CAAC;AAEF,MAAM,OAAO,YAAa,SAAQ,OAAO;IAMxC,YACC,SAAsB,EACtB,WAAqB,EACrB,YAAmB;QAEnB,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;IAChC,CAAC;CACD"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { XRReferenceSpaceEventHandler } from '../events/XRReferenceSpaceEvent';
|
|
2
|
+
import { XRSpace } from './XRSpace';
|
|
3
|
+
import { mat4 } from 'gl-matrix';
|
|
4
|
+
export declare const PRIVATE: unique symbol;
|
|
5
|
+
export declare enum XRReferenceSpaceType {
|
|
6
|
+
Viewer = "viewer",
|
|
7
|
+
Local = "local",
|
|
8
|
+
LocalFloor = "local-floor",
|
|
9
|
+
BoundedFloor = "bounded-floor",
|
|
10
|
+
Unbounded = "unbounded"
|
|
11
|
+
}
|
|
12
|
+
export declare class XRReferenceSpace extends XRSpace {
|
|
13
|
+
[PRIVATE]: {
|
|
14
|
+
type: XRReferenceSpaceType;
|
|
15
|
+
onreset: XRReferenceSpaceEventHandler | null;
|
|
16
|
+
};
|
|
17
|
+
constructor(type: XRReferenceSpaceType, parentSpace: XRSpace, offsetMatrix?: mat4);
|
|
18
|
+
get onreset(): XRReferenceSpaceEventHandler;
|
|
19
|
+
set onreset(callback: XRReferenceSpaceEventHandler);
|
|
20
|
+
getOffsetReferenceSpace(originOffset: mat4): XRReferenceSpace;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=XRReferenceSpace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRReferenceSpace.d.ts","sourceRoot":"","sources":["../../src/spaces/XRReferenceSpace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,eAAO,MAAM,OAAO,eAEnB,CAAC;AAEF,oBAAY,oBAAoB;IAC/B,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,UAAU,gBAAgB;IAC1B,YAAY,kBAAkB;IAC9B,SAAS,cAAc;CACvB;AAED,qBAAa,gBAAiB,SAAQ,OAAO;IAC5C,CAAC,OAAO,CAAC,EAAE;QACV,IAAI,EAAE,oBAAoB,CAAC;QAC3B,OAAO,EAAE,4BAA4B,GAAG,IAAI,CAAC;KAC7C,CAGC;gBAGD,IAAI,EAAE,oBAAoB,EAC1B,WAAW,EAAE,OAAO,EACpB,YAAY,CAAC,EAAE,IAAI;IAMpB,IAAI,OAAO,IAAI,4BAA4B,CAE1C;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,4BAA4B,EAQjD;IAGD,uBAAuB,CAAC,YAAY,EAAE,IAAI,GAAG,gBAAgB;CAK7D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var _a;
|
|
2
|
+
import { XRSpace } from './XRSpace';
|
|
3
|
+
export const PRIVATE = Symbol('@immersive-web-emulation-runtime/xr-reference-space');
|
|
4
|
+
export var XRReferenceSpaceType;
|
|
5
|
+
(function (XRReferenceSpaceType) {
|
|
6
|
+
XRReferenceSpaceType["Viewer"] = "viewer";
|
|
7
|
+
XRReferenceSpaceType["Local"] = "local";
|
|
8
|
+
XRReferenceSpaceType["LocalFloor"] = "local-floor";
|
|
9
|
+
XRReferenceSpaceType["BoundedFloor"] = "bounded-floor";
|
|
10
|
+
XRReferenceSpaceType["Unbounded"] = "unbounded";
|
|
11
|
+
})(XRReferenceSpaceType || (XRReferenceSpaceType = {}));
|
|
12
|
+
export class XRReferenceSpace extends XRSpace {
|
|
13
|
+
constructor(type, parentSpace, offsetMatrix) {
|
|
14
|
+
super(parentSpace, offsetMatrix);
|
|
15
|
+
this[_a] = {
|
|
16
|
+
type: null,
|
|
17
|
+
onreset: () => { },
|
|
18
|
+
};
|
|
19
|
+
this[PRIVATE].type = type;
|
|
20
|
+
}
|
|
21
|
+
get onreset() {
|
|
22
|
+
var _b;
|
|
23
|
+
return (_b = this[PRIVATE].onreset) !== null && _b !== void 0 ? _b : (() => { });
|
|
24
|
+
}
|
|
25
|
+
set onreset(callback) {
|
|
26
|
+
if (this[PRIVATE].onreset) {
|
|
27
|
+
this.removeEventListener('reset', this[PRIVATE].onreset);
|
|
28
|
+
}
|
|
29
|
+
this[PRIVATE].onreset = callback;
|
|
30
|
+
if (callback) {
|
|
31
|
+
this.addEventListener('reset', callback);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Create a new XRReferenceSpace with an offset from the current space
|
|
35
|
+
getOffsetReferenceSpace(originOffset) {
|
|
36
|
+
// Create a new XRReferenceSpace with the originOffset as its offsetMatrix
|
|
37
|
+
// The new space's parent is set to 'this' (the current XRReferenceSpace)
|
|
38
|
+
return new XRReferenceSpace(this[PRIVATE].type, this, originOffset);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
_a = PRIVATE;
|
|
42
|
+
//# sourceMappingURL=XRReferenceSpace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRReferenceSpace.js","sourceRoot":"","sources":["../../src/spaces/XRReferenceSpace.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAC5B,qDAAqD,CACrD,CAAC;AAEF,MAAM,CAAN,IAAY,oBAMX;AAND,WAAY,oBAAoB;IAC/B,yCAAiB,CAAA;IACjB,uCAAe,CAAA;IACf,kDAA0B,CAAA;IAC1B,sDAA8B,CAAA;IAC9B,+CAAuB,CAAA;AACxB,CAAC,EANW,oBAAoB,KAApB,oBAAoB,QAM/B;AAED,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IAS5C,YACC,IAA0B,EAC1B,WAAoB,EACpB,YAAmB;QAEnB,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAblC,QAAS,GAGL;YACH,IAAI,EAAE,IAAW;YACjB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;SACjB,CAAC;QAQD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO;;QACV,OAAO,MAAA,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,mCAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,CAAC,QAAsC;QACjD,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE;YAC1B,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,OAAwB,CAAC,CAAC;SAC1E;QACD,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC;QACjC,IAAI,QAAQ,EAAE;YACb,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,QAAyB,CAAC,CAAC;SAC1D;IACF,CAAC;IAED,sEAAsE;IACtE,uBAAuB,CAAC,YAAkB;QACzC,0EAA0E;QAC1E,yEAAyE;QACzE,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACrE,CAAC;CACD;KArCC,OAAO"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mat4, quat, vec3 } from 'gl-matrix';
|
|
2
|
+
export declare const PRIVATE: unique symbol;
|
|
3
|
+
export declare class XRSpace extends EventTarget {
|
|
4
|
+
[PRIVATE]: {
|
|
5
|
+
parentSpace: XRSpace | undefined;
|
|
6
|
+
offsetMatrix: mat4;
|
|
7
|
+
emulated: boolean;
|
|
8
|
+
};
|
|
9
|
+
constructor(parentSpace?: XRSpace, offsetMatrix?: mat4);
|
|
10
|
+
}
|
|
11
|
+
export declare class GlobalSpace extends XRSpace {
|
|
12
|
+
constructor();
|
|
13
|
+
}
|
|
14
|
+
export declare class XRSpaceUtils {
|
|
15
|
+
static updateOffsetPosition(space: XRSpace, position: vec3): void;
|
|
16
|
+
static updateOffsetQuaternion(space: XRSpace, quaternion: quat): void;
|
|
17
|
+
static updateOffsetMatrix(space: XRSpace, matrix: mat4): void;
|
|
18
|
+
static calculateGlobalOffsetMatrix(space: XRSpace, globalOffset?: mat4): mat4;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=XRSpace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRSpace.d.ts","sourceRoot":"","sources":["../../src/spaces/XRSpace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE7C,eAAO,MAAM,OAAO,eAAsD,CAAC;AAE3E,qBAAa,OAAQ,SAAQ,WAAW;IACvC,CAAC,OAAO,CAAC,EAAE;QACV,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC;QACjC,YAAY,EAAE,IAAI,CAAC;QACnB,QAAQ,EAAE,OAAO,CAAC;KAClB,CAAC;gBAEU,WAAW,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,IAAI;CAQtD;AAED,qBAAa,WAAY,SAAQ,OAAO;;CAIvC;AAED,qBAAa,YAAY;IAExB,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI;IAMjE,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,GAAG,IAAI;IAQrE,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI;IAM7D,MAAM,CAAC,2BAA2B,CACjC,KAAK,EAAE,OAAO,EACd,YAAY,GAAE,IAAoB,GAChC,IAAI;CAQP"}
|