forked from DefinitelyTyped/DefinitelyTyped
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webvr-api.d.ts
187 lines (152 loc) · 5.19 KB
/
webvr-api.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
// Type definitions for WebVR API
// Project: https://w3c.github.io/webvr/
// Definitions by: six a <https://github.com/lostfictions>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
declare class VRDisplay extends EventTarget {
isConnected: boolean;
isPresenting: boolean;
/**
* Dictionary of capabilities describing the VRDisplay.
*/
capabilities: VRDisplayCapabilities;
/**
* If this VRDisplay supports room-scale experiences, the optional
* stage attribute contains details on the room-scale parameters.
*/
stageParameters: VRStageParameters;
/* Return the current VREyeParameters for the given eye. */
getEyeParameters(whichEye: VREye): VREyeParameters;
/**
* An identifier for this distinct VRDisplay. Used as an
* association point in the Gamepad API.
*/
displayId: number;
/**
* A display name, a user-readable name identifying it.
*/
displayName: string;
/**
* Return a VRPose containing the future predicted pose of the VRDisplay
* when the current frame will be presented. The value returned will not
* change until JavaScript has returned control to the browser.
*
* The VRPose will contain the position, orientation, velocity,
* and acceleration of each of these properties.
*/
getPose() : VRPose;
/**
* Return the current instantaneous pose of the VRDisplay, with no
* prediction applied.
*/
getImmediatePose(): VRPose;
/**
* Reset the pose for this display, treating its current position and
* orientation as the "origin/zero" values. VRPose.position,
* VRPose.orientation, and VRStageParameters.sittingToStandingTransform may be
* updated when calling resetPose(). This should be called in only
* sitting-space experiences.
*/
resetPose(): void;
/**
* z-depth defining the near plane of the eye view frustum
* enables mapping of values in the render target depth
* attachment to scene coordinates. Initially set to 0.01.
*/
depthNear: number;
/**
* z-depth defining the far plane of the eye view frustum
* enables mapping of values in the render target depth
* attachment to scene coordinates. Initially set to 10000.0.
*/
depthFar: number;
/**
* The callback passed to `requestAnimationFrame` will be called
* any time a new frame should be rendered. When the VRDisplay is
* presenting the callback will be called at the native refresh
* rate of the HMD. When not presenting this function acts
* identically to how window.requestAnimationFrame acts. Content should
* make no assumptions of frame rate or vsync behavior as the HMD runs
* asynchronously from other displays and at differing refresh rates.
*/
requestAnimationFrame(callback: FrameRequestCallback): number;
/**
* Passing the value returned by `requestAnimationFrame` to
* `cancelAnimationFrame` will unregister the callback.
*/
cancelAnimationFrame(handle: number): void;
/**
* Begin presenting to the VRDisplay. Must be called in response to a user gesture.
* Repeat calls while already presenting will update the VRLayers being displayed.
*/
requestPresent(layers: Array<VRLayer>): Promise<void>;
/**
* Stops presenting to the VRDisplay.
*/
exitPresent(): Promise<void>;
/**
* Get the layers currently being presented.
*/
getLayers(): Array<VRLayer>;
/**
* The VRLayer provided to the VRDisplay will be captured and presented
* in the HMD. Calling this function has the same effect on the source
* canvas as any other operation that uses its source image, and canvases
* created without preserveDrawingBuffer set to true will be cleared.
*/
submitFrame(pose?: VRPose): void;
}
type VRSource = HTMLCanvasElement;
type VRLayer = {
source?: VRSource;
leftBounds?: Array<number>;
rightBounds?: Array<number>;
};
interface VRDisplayCapabilities {
hasPosition: boolean;
hasOrientation: boolean;
hasExternalDisplay: boolean;
canPresent: boolean;
maxLayers: number;
}
type VREye = "left" | "right";
interface VRFieldOfView {
upDegrees: number;
rightDegrees: number;
downDegrees: number;
leftDegrees: number;
}
interface VRPose {
timestamp: number;
position: Float32Array;
linearVelocity: Float32Array;
linearAcceleration: Float32Array;
orientation: Float32Array;
angularVelocity: Float32Array;
angularAcceleration: Float32Array;
}
interface VREyeParameters {
offset: Float32Array;
fieldOfView: VRFieldOfView;
renderWidth: number;
renderHeight: number;
}
interface VRStageParameters {
sittingToStandingTransform: Float32Array;
sizeX: number;
sizeZ: number;
}
interface Navigator {
getVRDisplays(): Promise<Array<VRDisplay>>;
activeVRDisplays: Array<VRDisplay>;
}
interface Window {
onvrdisplayconnected: (ev: Event) => any;
onvrdisplaydisconnected: (ev: Event) => any;
onvrdisplaypresentchange: (ev: Event) => any;
addEventListener(type: "vrdisplayconnected", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "vrdisplaydisconnected", listener: (ev: Event) => any, useCapture?: boolean): void;
addEventListener(type: "vrdisplaypresentchange", listener: (ev: Event) => any, useCapture?: boolean): void;
}
interface Gamepad {
displayId: number;
}