1/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2/* 3 * WebXR Device API 4 * W3C Working Draft, 10 October 2019 5 * The origin of this IDL file is: 6 * https://www.w3.org/TR/2019/WD-webxr-20191010/ 7 */ 8 9partial interface Navigator { 10 [SecureContext, SameObject] readonly attribute XR xr; 11}; 12 13[SecureContext, Exposed=Window] interface XR : EventTarget { 14 // Methods 15 Promise<boolean> isSessionSupported(XRSessionMode mode); 16 [NewObject] Promise<XRSession> requestSession(XRSessionMode mode, optional XRSessionInit options = {}); 17 18 // Events 19 attribute EventHandler ondevicechange; 20}; 21 22enum XRSessionMode { 23 "inline", 24 "immersive-vr" 25}; 26 27dictionary XRSessionInit { 28 sequence<any> requiredFeatures; 29 sequence<any> optionalFeatures; 30}; 31 32enum XRVisibilityState { 33 "visible", 34 "visible-blurred", 35 "hidden", 36}; 37 38[SecureContext, Exposed=Window] interface XRSession : EventTarget { 39 // Attributes 40 readonly attribute XRVisibilityState visibilityState; 41 [SameObject] readonly attribute XRRenderState renderState; 42 [SameObject] readonly attribute XRInputSourceArray inputSources; 43 44 // Methods 45 undefined updateRenderState(optional XRRenderStateInit state = {}); 46 [NewObject] Promise<XRReferenceSpace> requestReferenceSpace(XRReferenceSpaceType type); 47 48 long requestAnimationFrame(XRFrameRequestCallback callback); 49 undefined cancelAnimationFrame(long handle); 50 51 Promise<undefined> end(); 52 53 // Events 54 attribute EventHandler onend; 55 attribute EventHandler onselect; 56 attribute EventHandler oninputsourceschange; 57 attribute EventHandler onselectstart; 58 attribute EventHandler onselectend; 59 attribute EventHandler onvisibilitychange; 60}; 61 62dictionary XRRenderStateInit { 63 double depthNear; 64 double depthFar; 65 double inlineVerticalFieldOfView; 66 XRWebGLLayer? baseLayer; 67}; 68 69[SecureContext, Exposed=Window] interface XRRenderState { 70 readonly attribute double depthNear; 71 readonly attribute double depthFar; 72 readonly attribute double? inlineVerticalFieldOfView; 73 readonly attribute XRWebGLLayer? baseLayer; 74}; 75 76callback XRFrameRequestCallback = undefined (DOMHighResTimeStamp time, XRFrame frame); 77 78[SecureContext, Exposed=Window] interface XRFrame { 79 [SameObject] readonly attribute XRSession session; 80 81 XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace); 82 XRPose? getPose(XRSpace space, XRSpace baseSpace); 83}; 84 85[SecureContext, Exposed=Window] interface XRSpace : EventTarget { 86 87}; 88 89enum XRReferenceSpaceType { 90 "viewer", 91 "local", 92 "local-floor", 93 "bounded-floor", 94 "unbounded" 95}; 96 97[SecureContext, Exposed=Window] 98interface XRReferenceSpace : XRSpace { 99 [NewObject] XRReferenceSpace getOffsetReferenceSpace(XRRigidTransform originOffset); 100 101 attribute EventHandler onreset; 102}; 103 104[SecureContext, Exposed=Window] 105interface XRBoundedReferenceSpace : XRReferenceSpace { 106 // TODO: Re-enable FrozenArray when supported. See https://bugzilla.mozilla.org/show_bug.cgi?id=1236777 107 //readonly attribute FrozenArray<DOMPointReadOnly> boundsGeometry; 108 [Frozen, Cached, Pure] 109 readonly attribute sequence<DOMPointReadOnly> boundsGeometry; 110}; 111 112enum XREye { 113 "none", 114 "left", 115 "right" 116}; 117 118[SecureContext, Exposed=Window] interface XRView { 119 readonly attribute XREye eye; 120 readonly attribute Float32Array projectionMatrix; 121 [SameObject] readonly attribute XRRigidTransform transform; 122}; 123 124[SecureContext, Exposed=Window] interface XRViewport { 125 readonly attribute long x; 126 readonly attribute long y; 127 readonly attribute long width; 128 readonly attribute long height; 129}; 130 131[SecureContext, Exposed=Window] 132interface XRRigidTransform { 133 constructor(optional DOMPointInit position = {}, optional DOMPointInit orientation = {}); 134 [SameObject] readonly attribute DOMPointReadOnly position; 135 [SameObject] readonly attribute DOMPointReadOnly orientation; 136 readonly attribute Float32Array matrix; 137 [SameObject] readonly attribute XRRigidTransform inverse; 138}; 139 140[SecureContext, Exposed=Window] interface XRPose { 141 [SameObject] readonly attribute XRRigidTransform transform; 142 readonly attribute boolean emulatedPosition; 143}; 144 145[SecureContext, Exposed=Window] interface XRViewerPose : XRPose { 146 // TODO: Re-enable FrozenArray when supported. See https://bugzilla.mozilla.org/show_bug.cgi?id=1236777 147 //[SameObject] readonly attribute FrozenArray<XRView> views; 148 [SameObject, Frozen, Cached, Pure] 149 readonly attribute sequence<XRView> views; 150}; 151 152enum XRHandedness { 153 "none", 154 "left", 155 "right" 156}; 157 158enum XRTargetRayMode { 159 "gaze", 160 "tracked-pointer", 161 "screen" 162}; 163 164[SecureContext, Exposed=Window] 165interface XRInputSource { 166 readonly attribute XRHandedness handedness; 167 readonly attribute XRTargetRayMode targetRayMode; 168 [SameObject] readonly attribute XRSpace targetRaySpace; 169 [SameObject] readonly attribute XRSpace? gripSpace; 170 // TODO: Re-enable FrozenArray when supported. See https://bugzilla.mozilla.org/show_bug.cgi?id=1236777 171 //[SameObject] readonly attribute FrozenArray<DOMString> profiles; 172 [SameObject, Frozen, Cached, Pure] 173 readonly attribute sequence<DOMString> profiles; 174}; 175 176[SecureContext, Exposed=Window] 177interface XRInputSourceArray { 178 iterable<XRInputSource>; 179 readonly attribute unsigned long length; 180 getter XRInputSource(unsigned long index); 181}; 182 183typedef (WebGLRenderingContext or 184 WebGL2RenderingContext) XRWebGLRenderingContext; 185 186dictionary XRWebGLLayerInit { 187 boolean antialias = true; 188 boolean depth = true; 189 boolean stencil = false; 190 boolean alpha = true; 191 boolean ignoreDepthValues = false; 192 double framebufferScaleFactor = 1.0; 193}; 194 195// TODO: Change constructor back to original webidl 196// [SecureContext, Exposed=Window] 197[SecureContext, Exposed=Window, Constructor(XRSession session, XRWebGLRenderingContext context, optional XRWebGLLayerInit layerInit = {})] 198interface XRWebGLLayer { 199 //constructor(XRSession session, 200 // XRWebGLRenderingContext context, 201 // optional XRWebGLLayerInit layerInit = {}); 202 203 // Attributes 204 readonly attribute boolean antialias; 205 readonly attribute boolean ignoreDepthValues; 206 207 [SameObject] readonly attribute WebGLFramebuffer framebuffer; 208 readonly attribute unsigned long framebufferWidth; 209 readonly attribute unsigned long framebufferHeight; 210 211 // Methods 212 XRViewport? getViewport(XRView view); 213 214 // Static Methods 215 static double getNativeFramebufferScaleFactor(XRSession session); 216}; 217 218partial dictionary WebGLContextAttributes { 219 boolean xrCompatible = null; 220}; 221 222partial interface mixin WebGLRenderingContextBase { 223 Promise<undefined> makeXRCompatible(); 224}; 225 226[SecureContext, Exposed=Window] 227interface XRSessionEvent : Event { 228 constructor(DOMString type, XRSessionEventInit eventInitDict); 229 [SameObject] readonly attribute XRSession session; 230}; 231 232dictionary XRSessionEventInit : EventInit { 233 required XRSession session; 234}; 235 236[SecureContext, Exposed=Window] 237interface XRInputSourceEvent : Event { 238 constructor(DOMString type, XRInputSourceEventInit eventInitDict); 239 [SameObject] readonly attribute XRFrame frame; 240 [SameObject] readonly attribute XRInputSource inputSource; 241}; 242 243dictionary XRInputSourceEventInit : EventInit { 244 required XRFrame frame; 245 required XRInputSource inputSource; 246}; 247 248[SecureContext, Exposed=Window] 249interface XRInputSourcesChangeEvent : Event { 250 constructor(DOMString type, XRInputSourcesChangeEventInit eventInitDict); 251 [SameObject] readonly attribute XRSession session; 252 // TODO: Re-enable FrozenArray when supported. See https://bugzilla.mozilla.org/show_bug.cgi?id=1236777 253 //[SameObject] readonly attribute FrozenArray<XRInputSource> added; 254 [SameObject, Frozen, Cached, Pure] 255 readonly attribute sequence<XRInputSource> added; 256 //[SameObject] readonly attribute FrozenArray<XRInputSource> removed; 257 [SameObject, Frozen, Cached, Pure] 258 readonly attribute sequence<XRInputSource> removed; 259}; 260 261dictionary XRInputSourcesChangeEventInit : EventInit { 262 required XRSession session; 263 // TODO: Re-enable FrozenArray when supported. See https://bugzilla.mozilla.org/show_bug.cgi?id=1236777 264 //required FrozenArray<XRInputSource> added; 265 [Frozen, Cached, Pure] 266 required sequence<XRInputSource> added; 267 //required FrozenArray<XRInputSource> removed; 268 [Frozen, Cached, Pure] 269 required sequence<XRInputSource> removed; 270 271}; 272 273[SecureContext, Exposed=Window] 274interface XRReferenceSpaceEvent : Event { 275 constructor(DOMString type, XRReferenceSpaceEventInit eventInitDict); 276 [SameObject] readonly attribute XRReferenceSpace referenceSpace; 277 [SameObject] readonly attribute XRRigidTransform? transform; 278}; 279 280dictionary XRReferenceSpaceEventInit : EventInit { 281 required XRReferenceSpace referenceSpace; 282 XRRigidTransform transform; 283}; 284