webxr.d.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. /**
  2. * Available session modes
  3. */
  4. type XRSessionMode = "inline" | "immersive-vr" | "immersive-ar";
  5. /**
  6. * Reference space types
  7. */
  8. type XRReferenceSpaceType = "viewer" | "local" | "local-floor" | "bounded-floor" | "unbounded";
  9. type XREnvironmentBlendMode = "opaque" | "additive" | "alpha-blend";
  10. type XRVisibilityState = "visible" | "visible-blurred" | "hidden";
  11. /**
  12. * Handedness types
  13. */
  14. type XRHandedness = "none" | "left" | "right";
  15. /**
  16. * InputSource target ray modes
  17. */
  18. type XRTargetRayMode = "gaze" | "tracked-pointer" | "screen";
  19. /**
  20. * Eye types
  21. */
  22. type XREye = "none" | "left" | "right";
  23. /**
  24. * Type of XR events available
  25. */
  26. type XREventType = "devicechange" | "visibilitychange" | "end" | "inputsourceschange" | "select" | "selectstart" | "selectend" | "squeeze" | "squeezestart" | "squeezeend" | "reset";
  27. type XRFrameRequestCallback = (time: DOMHighResTimeStamp, frame: XRFrame) => void;
  28. type XRPlaneSet = Set<XRPlane>;
  29. type XRAnchorSet = Set<XRAnchor>;
  30. type XREventHandler = (callback: any) => void;
  31. interface XRLayer extends EventTarget {}
  32. interface XRSessionInit {
  33. optionalFeatures?: string[];
  34. requiredFeatures?: string[];
  35. }
  36. interface XRSessionEvent extends Event {
  37. readonly session: XRSession;
  38. }
  39. interface XRSystem {
  40. isSessionSupported: (sessionMode: XRSessionMode) => Promise<boolean>;
  41. requestSession: (sessionMode: XRSessionMode, sessionInit?: any) => Promise<XRSession>;
  42. }
  43. interface XRViewport {
  44. readonly x: number;
  45. readonly y: number;
  46. readonly width: number;
  47. readonly height: number;
  48. }
  49. interface XRWebGLLayerInit {
  50. antialias?: boolean;
  51. depth?: boolean;
  52. stencil?: boolean;
  53. alpha?: boolean;
  54. multiview?: boolean;
  55. framebufferScaleFactor?: number;
  56. }
  57. declare class XRWebGLLayer {
  58. static getNativeFramebufferScaleFactor(session: XRSession): number;
  59. constructor(session: XRSession, context: WebGLRenderingContext | WebGL2RenderingContext, layerInit?: XRWebGLLayerInit);
  60. readonly antialias: boolean;
  61. readonly framebuffer: WebGLFramebuffer;
  62. readonly framebufferWidth: number;
  63. readonly framebufferHeight: number;
  64. readonly ignoreDepthValues: boolean;
  65. getViewport: (view: XRView) => XRViewport;
  66. }
  67. // tslint:disable-next-line no-empty-interface
  68. interface XRSpace extends EventTarget {}
  69. interface XRRenderState {
  70. readonly baseLayer?: XRWebGLLayer;
  71. readonly depthFar: number;
  72. readonly depthNear: number;
  73. readonly inlineVerticalFieldOfView?: number;
  74. }
  75. interface XRRenderStateInit extends XRRenderState {
  76. baseLayer: XRWebGLLayer;
  77. depthFar: number;
  78. depthNear: number;
  79. inlineVerticalFieldOfView?: number;
  80. layers?: XRLayer[];
  81. }
  82. interface XRReferenceSpace extends XRSpace {
  83. getOffsetReferenceSpace(originOffset: XRRigidTransform): XRReferenceSpace;
  84. onreset: XREventHandler;
  85. }
  86. interface XRBoundedReferenceSpace extends XRSpace {
  87. readonly boundsGeometry: DOMPointReadOnly[];
  88. }
  89. interface XRInputSource {
  90. readonly handedness: XRHandedness;
  91. readonly targetRayMode: XRTargetRayMode;
  92. readonly targetRaySpace: XRSpace;
  93. readonly gripSpace?: XRSpace;
  94. readonly gamepad?: Gamepad;
  95. readonly profiles: Array<string>;
  96. readonly hand?: XRHand;
  97. }
  98. interface XRPose {
  99. readonly transform: XRRigidTransform;
  100. readonly emulatedPosition: boolean;
  101. }
  102. interface XRWorldInformation {
  103. detectedPlanes?: XRPlaneSet;
  104. }
  105. interface XRFrame {
  106. readonly session: XRSession;
  107. getPose(space: XRSpace, baseSpace: XRSpace): XRPose | undefined;
  108. getViewerPose(referenceSpace: XRReferenceSpace): XRViewerPose | undefined;
  109. // AR
  110. getHitTestResults(hitTestSource: XRHitTestSource): Array<XRHitTestResult>;
  111. getHitTestResultsForTransientInput(hitTestSource: XRTransientInputHitTestSource): Array<XRTransientInputHitTestResult>;
  112. // Anchors
  113. trackedAnchors?: XRAnchorSet;
  114. createAnchor?(pose: XRRigidTransform, space: XRSpace): Promise<XRAnchor>;
  115. // World geometries
  116. worldInformation?: XRWorldInformation;
  117. // Hand tracking
  118. getJointPose?(joint: XRJointSpace, baseSpace: XRSpace): XRJointPose;
  119. }
  120. interface XRInputSourceEvent extends Event {
  121. readonly frame: XRFrame;
  122. readonly inputSource: XRInputSource;
  123. }
  124. type XRInputSourceArray = XRInputSource[];
  125. interface XRSession {
  126. addEventListener(type: XREventType, listener: XREventHandler, options?: boolean | AddEventListenerOptions): void;
  127. removeEventListener(type: XREventType, listener: XREventHandler, options?: boolean | EventListenerOptions): void;
  128. /**
  129. * Returns a list of this session's XRInputSources, each representing an input device
  130. * used to control the camera and/or scene.
  131. */
  132. readonly inputSources: Array<XRInputSource>;
  133. /**
  134. * object which contains options affecting how the imagery is rendered.
  135. * This includes things such as the near and far clipping planes
  136. */
  137. readonly renderState: XRRenderState;
  138. readonly visibilityState: XRVisibilityState;
  139. /**
  140. * Removes a callback from the animation frame painting callback from
  141. * XRSession's set of animation frame rendering callbacks, given the
  142. * identifying handle returned by a previous call to requestAnimationFrame().
  143. */
  144. cancelAnimationFrame: (handle: number) => void;
  145. /**
  146. * Ends the WebXR session. Returns a promise which resolves when the
  147. * session has been shut down.
  148. */
  149. end(): Promise<void>;
  150. /**
  151. * Schedules the specified method to be called the next time the user agent
  152. * is working on rendering an animation frame for the WebXR device. Returns an
  153. * integer value which can be used to identify the request for the purposes of
  154. * canceling the callback using cancelAnimationFrame(). This method is comparable
  155. * to the Window.requestAnimationFrame() method.
  156. */
  157. requestAnimationFrame: XRFrameRequestCallback;
  158. /**
  159. * Requests that a new XRReferenceSpace of the specified type be created.
  160. * Returns a promise which resolves with the XRReferenceSpace or
  161. * XRBoundedReferenceSpace which was requested, or throws a NotSupportedError if
  162. * the requested space type isn't supported by the device.
  163. */
  164. requestReferenceSpace(type: XRReferenceSpaceType): Promise<XRReferenceSpace | XRBoundedReferenceSpace>;
  165. updateRenderState(XRRenderStateInit: XRRenderState): Promise<void>;
  166. onend: XREventHandler;
  167. oninputsourceschange: XREventHandler;
  168. onselect: XREventHandler;
  169. onselectstart: XREventHandler;
  170. onselectend: XREventHandler;
  171. onsqueeze: XREventHandler;
  172. onsqueezestart: XREventHandler;
  173. onsqueezeend: XREventHandler;
  174. onvisibilitychange: XREventHandler;
  175. // hit test
  176. requestHitTestSource?(options: XRHitTestOptionsInit): Promise<XRHitTestSource>;
  177. requestHitTestSourceForTransientInput?(options: XRTransientInputHitTestOptionsInit): Promise<XRTransientInputHitTestSource>;
  178. // legacy AR hit test
  179. requestHitTest?(ray: XRRay, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]>;
  180. // legacy plane detection
  181. updateWorldTrackingState?(options: { planeDetectionState?: { enabled: boolean } }): void;
  182. }
  183. interface XRViewerPose extends XRPose {
  184. readonly views: Array<XRView>;
  185. }
  186. declare class XRRigidTransform {
  187. constructor(position?: DOMPointInit, direction?: DOMPointInit);
  188. position: DOMPointReadOnly;
  189. orientation: DOMPointReadOnly;
  190. matrix: Float32Array;
  191. inverse: XRRigidTransform;
  192. }
  193. interface XRView {
  194. readonly eye: XREye;
  195. readonly projectionMatrix: Float32Array;
  196. readonly transform: XRRigidTransform;
  197. readonly recommendedViewportScale?: number;
  198. requestViewportScale(scale: number): void;
  199. }
  200. interface XRInputSourceChangeEvent extends Event {
  201. session: XRSession;
  202. removed: Array<XRInputSource>;
  203. added: Array<XRInputSource>;
  204. }
  205. // Experimental/Draft features
  206. declare class XRRay {
  207. constructor(transformOrOrigin: XRRigidTransform | DOMPointInit, direction?: DOMPointInit);
  208. origin: DOMPointReadOnly;
  209. direction: DOMPointReadOnly;
  210. matrix: Float32Array;
  211. }
  212. declare enum XRHitTestTrackableType {
  213. "point",
  214. "plane",
  215. "mesh",
  216. }
  217. interface XRHitResult {
  218. hitMatrix: Float32Array;
  219. }
  220. interface XRTransientInputHitTestResult {
  221. readonly inputSource: XRInputSource;
  222. readonly results: Array<XRHitTestResult>;
  223. }
  224. interface XRHitTestResult {
  225. getPose(baseSpace: XRSpace): XRPose | undefined;
  226. // When anchor system is enabled
  227. createAnchor?(pose: XRRigidTransform): Promise<XRAnchor>;
  228. }
  229. interface XRHitTestSource {
  230. cancel(): void;
  231. }
  232. interface XRTransientInputHitTestSource {
  233. cancel(): void;
  234. }
  235. interface XRHitTestOptionsInit {
  236. space: XRSpace;
  237. entityTypes?: Array<XRHitTestTrackableType>;
  238. offsetRay?: XRRay;
  239. }
  240. interface XRTransientInputHitTestOptionsInit {
  241. profile: string;
  242. entityTypes?: Array<XRHitTestTrackableType>;
  243. offsetRay?: XRRay;
  244. }
  245. interface XRAnchor {
  246. anchorSpace: XRSpace;
  247. delete(): void;
  248. }
  249. interface XRPlane {
  250. orientation: "Horizontal" | "Vertical";
  251. planeSpace: XRSpace;
  252. polygon: Array<DOMPointReadOnly>;
  253. lastChangedTime: number;
  254. }
  255. interface XRJointSpace extends XRSpace {}
  256. interface XRJointPose extends XRPose {
  257. radius: number | undefined;
  258. }
  259. interface XRHand extends Iterable<XRJointSpace> {
  260. readonly length: number;
  261. [index: number]: XRJointSpace;
  262. readonly WRIST: number;
  263. readonly THUMB_METACARPAL: number;
  264. readonly THUMB_PHALANX_PROXIMAL: number;
  265. readonly THUMB_PHALANX_DISTAL: number;
  266. readonly THUMB_PHALANX_TIP: number;
  267. readonly INDEX_METACARPAL: number;
  268. readonly INDEX_PHALANX_PROXIMAL: number;
  269. readonly INDEX_PHALANX_INTERMEDIATE: number;
  270. readonly INDEX_PHALANX_DISTAL: number;
  271. readonly INDEX_PHALANX_TIP: number;
  272. readonly MIDDLE_METACARPAL: number;
  273. readonly MIDDLE_PHALANX_PROXIMAL: number;
  274. readonly MIDDLE_PHALANX_INTERMEDIATE: number;
  275. readonly MIDDLE_PHALANX_DISTAL: number;
  276. readonly MIDDLE_PHALANX_TIP: number;
  277. readonly RING_METACARPAL: number;
  278. readonly RING_PHALANX_PROXIMAL: number;
  279. readonly RING_PHALANX_INTERMEDIATE: number;
  280. readonly RING_PHALANX_DISTAL: number;
  281. readonly RING_PHALANX_TIP: number;
  282. readonly LITTLE_METACARPAL: number;
  283. readonly LITTLE_PHALANX_PROXIMAL: number;
  284. readonly LITTLE_PHALANX_INTERMEDIATE: number;
  285. readonly LITTLE_PHALANX_DISTAL: number;
  286. readonly LITTLE_PHALANX_TIP: number;
  287. }