UNPKG

@babylonjs/core

Version:

Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.

1,501 lines (1,234 loc) 56.2 kB
export * from "./engine.pure.js"; import "./Extensions/engine.alpha.js"; import "./Extensions/engine.rawTexture.js"; import "./Extensions/engine.readTexture.js"; import "./Extensions/engine.dynamicBuffer.js"; import "./Extensions/engine.cubeTexture.js"; import "./Extensions/engine.renderTarget.js"; import "./Extensions/engine.renderTargetTexture.js"; import "./Extensions/engine.renderTargetCube.js"; import "./Extensions/engine.prefilteredCubeTexture.js"; import "./Extensions/engine.uniformBuffer.js"; import "./AbstractEngine/abstractEngine.loadingScreen.js"; import "./AbstractEngine/abstractEngine.dom.js"; import "./AbstractEngine/abstractEngine.states.js"; import "./AbstractEngine/abstractEngine.stencil.js"; import "./AbstractEngine/abstractEngine.renderPass.js"; import "./AbstractEngine/abstractEngine.texture.js"; import "./AbstractEngine/abstractEngine.loadFile.js"; import "./AbstractEngine/abstractEngine.textureLoaders.js"; // Mixins declare global{ /* eslint-disable @typescript-eslint/naming-convention */ // This file contains native only extensions for WebXR. These APIs are not supported in the browser yet. // They are intended for use with either Babylon Native https://github.com/BabylonJS/BabylonNative or // Babylon React Native: https://github.com/BabylonJS/BabylonReactNative type XRSceneObjectType = "unknown" | "background" | "wall" | "floor" | "ceiling" | "platform" | "inferred" | "world"; interface XRSceneObject { type: XRSceneObjectType; } interface XRFieldOfView { angleLeft: number; angleRight: number; angleUp: number; angleDown: number; } interface XRFrustum { position: DOMPointReadOnly; orientation: DOMPointReadOnly; fieldOfView: XRFieldOfView; farDistance: number; } interface XRPlane { parentSceneObject?: XRSceneObject; } // extending the webxr XRMesh with babylon native properties interface XRMesh { normals?: Float32Array; parentSceneObject?: XRSceneObject; positions: Float32Array; // Babylon native! } interface XRFrustumDetectionBoundary { type: "frustum"; frustum: XRFrustum; } interface XRSphereDetectionBoundary { type: "sphere"; radius: number; } interface XRBoxDetectionBoundary { type: "box"; extent: DOMPointReadOnly; } type XRDetectionBoundary = XRFrustumDetectionBoundary | XRSphereDetectionBoundary | XRBoxDetectionBoundary; interface XRGeometryDetectorOptions { detectionBoundary?: XRDetectionBoundary; updateInterval?: number; } interface XRSession { trySetFeaturePointCloudEnabled(enabled: boolean): boolean; trySetPreferredPlaneDetectorOptions(preferredOptions: XRGeometryDetectorOptions): boolean; trySetMeshDetectorEnabled(enabled: boolean): boolean; trySetPreferredMeshDetectorOptions(preferredOptions: XRGeometryDetectorOptions): boolean; } interface XRFrame { featurePointCloud?: Array<number> | undefined; } interface XRWorldInformation { detectedMeshes?: XRMeshSet; } /* eslint-disable @typescript-eslint/naming-convention */ // Type definitions for non-npm package webxr 0.5 // Project: https://www.w3.org/TR/webxr/ // Definitions by: Rob Rohan <https://github.com/robrohan> // Raanan Weber <https://github.com/RaananW> // Sean T. McBeth <https://github.com/capnmidnight> // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // Minimum TypeScript Version: 3.7 // Most of this was hand written and... more or less copied from the following // sites: // https://www.w3.org/TR/webxr/ // https://developer.mozilla.org/en-US/docs/Web/API/WebXR_Device_API // https://www.w3.org/immersive-web/ // https://github.com/immersive-web // /** * ref: https://immersive-web.github.io/webxr/#navigator-xr-attribute */ interface Navigator { /** * An XRSystem object is the entry point to the API, used to query for XR features * available to the user agent and initiate communication with XR hardware via the * creation of XRSessions. */ xr?: XRSystem | undefined; } /** * WebGL Context Compatability * * ref: https://immersive-web.github.io/webxr/#contextcompatibility */ interface WebGLContextAttributes { xrCompatible?: boolean | undefined; } interface WebGLRenderingContextBase { makeXRCompatible(): Promise<void>; } /** * Available session modes * * ref: https://immersive-web.github.io/webxr/#xrsessionmode-enum */ type XRSessionMode = "inline" | "immersive-vr" | "immersive-ar"; /** * Reference space types */ type XRReferenceSpaceType = "viewer" | "local" | "local-floor" | "bounded-floor" | "unbounded"; type XREnvironmentBlendMode = "opaque" | "additive" | "alpha-blend"; /** * ref: https://immersive-web.github.io/webxr/#xrsession-interface */ type XRVisibilityState = "visible" | "visible-blurred" | "hidden"; /** * Handedness types */ type XRHandedness = "none" | "left" | "right"; /** * InputSource target ray modes */ type XRTargetRayMode = "gaze" | "tracked-pointer" | "screen" | "transient-pointer"; /** * Eye types */ type XREye = "none" | "left" | "right"; type XRFrameRequestCallback = (time: DOMHighResTimeStamp, frame: XRFrame) => void; interface XRSystemDeviceChangeEvent extends Event { type: "devicechange"; } interface XRSystemDeviceChangeEventHandler { (event: XRSystemDeviceChangeEvent): any; } interface XRSystemEventMap { devicechange: XRSystemDeviceChangeEvent; } /** * An XRSystem object is the entry point to the API, used to query for XR features available * to the user agent and initiate communication with XR hardware via the creation of * XRSessions. * * ref: https://immersive-web.github.io/webxr/#xrsystem-interface */ interface XRSystem extends EventTarget { /** * Attempts to initialize an XRSession for the given mode if possible, entering immersive * mode if necessary. * @param mode * @param options */ requestSession(mode: XRSessionMode, options?: XRSessionInit): Promise<XRSession>; /** * Queries if a given mode may be supported by the user agent and device capabilities. * @param mode */ isSessionSupported(mode: XRSessionMode): Promise<boolean>; ondevicechange: XRSystemDeviceChangeEventHandler | null; addEventListener<K extends keyof XRSystemEventMap>(type: K, listener: (this: XRSystem, ev: XRSystemEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener<K extends keyof XRSystemEventMap>(type: K, listener: (this: XRSystem, ev: XRSystemEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } abstract class XRSystem implements XRSystem {} /** * Describes a viewport, or rectangular region, of a graphics surface. * * ref: https://immersive-web.github.io/webxr/#xrviewport-interface */ interface XRViewport { readonly x: number; readonly y: number; readonly width: number; readonly height: number; } abstract class XRViewport implements XRViewport {} /** * Represents a virtual coordinate system with an origin that corresponds to a physical location. * Spatial data that is requested from the API or given to the API is always expressed in relation * to a specific XRSpace at the time of a specific XRFrame. Numeric values such as pose positions * are coordinates in that space relative to its origin. The interface is intentionally opaque. * * ref: https://immersive-web.github.io/webxr/#xrspace-interface */ // tslint:disable-next-line no-empty-interface interface XRSpace extends EventTarget {} abstract class XRSpace implements XRSpace {} interface XRRenderStateInit { baseLayer?: XRWebGLLayer | undefined; depthFar?: number | undefined; depthNear?: number | undefined; inlineVerticalFieldOfView?: number | undefined; } interface XRRenderState { readonly baseLayer?: XRWebGLLayer | undefined; readonly depthFar: number; readonly depthNear: number; readonly inlineVerticalFieldOfView?: number | undefined; } abstract class XRRenderState implements XRRenderState {} interface XRReferenceSpaceEventInit extends EventInit { referenceSpace?: XRReferenceSpace | undefined; transform?: XRRigidTransform | undefined; } /** * XRReferenceSpaceEvents are fired to indicate changes to the state of an XRReferenceSpace. * * ref: https://immersive-web.github.io/webxr/#xrreferencespaceevent-interface */ interface XRReferenceSpaceEvent extends Event { readonly type: "reset"; readonly referenceSpace: XRReferenceSpace; readonly transform?: XRRigidTransform | undefined; } // tslint:disable-next-line no-unnecessary-class class XRReferenceSpaceEvent implements XRReferenceSpaceEvent { constructor(type: "reset", eventInitDict?: XRReferenceSpaceEventInit); } interface XRReferenceSpaceEventHandler { (event: XRReferenceSpaceEvent): any; } interface XRReferenceSpaceEventMap { reset: XRReferenceSpaceEvent; } /** * One of several common XRSpaces that applications can use to establish a spatial relationship * with the user's physical environment. * * ref: https://immersive-web.github.io/webxr/#xrreferencespace-interface */ interface XRReferenceSpace extends XRSpace { getOffsetReferenceSpace(originOffset: XRRigidTransform): XRReferenceSpace; onreset: XRReferenceSpaceEventHandler; addEventListener<K extends keyof XRReferenceSpaceEventMap>( type: K, listener: (this: XRReferenceSpace, ev: XRReferenceSpaceEventMap[K]) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener<K extends keyof XRReferenceSpaceEventMap>( type: K, listener: (this: XRReferenceSpace, ev: XRReferenceSpaceEventMap[K]) => any, options?: boolean | EventListenerOptions ): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } abstract class XRReferenceSpace implements XRReferenceSpace {} /** * Extends XRReferenceSpace to include boundsGeometry, indicating the pre-configured boundaries * of the user's space. * * ref: https://immersive-web.github.io/webxr/#xrboundedreferencespace-interface */ interface XRBoundedReferenceSpace extends XRReferenceSpace { readonly boundsGeometry: DOMPointReadOnly[]; } abstract class XRBoundedReferenceSpace implements XRBoundedReferenceSpace {} /** * Represents an XR input source, which is any input mechanism which allows the user to perform * targeted actions in the same virtual space as the viewer. Example XR input sources include, * but are not limited to, handheld controllers, optically tracked hands, and gaze-based input * methods that operate on the viewer's pose. Input mechanisms which are not explicitly associated * with the XR device, such as traditional gamepads, mice, or keyboards SHOULD NOT be considered * XR input sources. * ref: https://immersive-web.github.io/webxr/#xrinputsource-interface */ interface XRInputSource { readonly handedness: XRHandedness; readonly targetRayMode: XRTargetRayMode; readonly targetRaySpace: XRSpace; readonly gripSpace?: XRSpace | undefined; readonly gamepad?: Gamepad | undefined; readonly profiles: string[]; readonly hand?: XRHand; } abstract class XRInputSource implements XRInputSource {} /** * Represents a list of XRInputSources. It is used in favor of a frozen array type when the contents * of the list are expected to change over time, such as with the XRSession inputSources attribute. * ref: https://immersive-web.github.io/webxr/#xrinputsourcearray-interface */ interface XRInputSourceArray { [Symbol.iterator](): IterableIterator<XRInputSource>; [n: number]: XRInputSource; length: number; entries(): IterableIterator<[number, XRInputSource]>; keys(): IterableIterator<number>; values(): IterableIterator<XRInputSource>; forEach(callbackfn: (value: XRInputSource, index: number, array: XRInputSource[]) => void, thisArg?: any): void; } abstract class XRInputSourceArray implements XRInputSourceArray {} /** * Describes a position and orientation in space relative to an XRSpace. * * ref: https://immersive-web.github.io/webxr/#xrpose-interface */ interface XRPose { readonly transform: XRRigidTransform; readonly emulatedPosition: boolean; } abstract class XRPose implements XRPose {} /** * Represents a snapshot of the state of all of the tracked objects for an XRSession. Applications * can acquire an XRFrame by calling requestAnimationFrame() on an XRSession with an * XRFrameRequestCallback. When the callback is called it will be passed an XRFrame. * Events which need to communicate tracking state, such as the select event, will also provide an * XRFrame. * * ref: https://immersive-web.github.io/webxr/#xrframe-interface */ interface XRFrame { readonly session: XRSession; // BABYLON CHANGE - switched to optional readonly predictedDisplayTime?: DOMHighResTimeStamp; /** * Provides the pose of space relative to baseSpace as an XRPose, at the time represented by * the XRFrame. * * @param space * @param baseSpace */ getPose(space: XRSpace, baseSpace: XRSpace): XRPose | undefined; /** * Provides the pose of the viewer relative to referenceSpace as an XRViewerPose, at the * XRFrame's time. * * @param referenceSpace */ getViewerPose(referenceSpace: XRReferenceSpace): XRViewerPose | undefined; } abstract class XRFrame implements XRFrame {} /** * Type of XR events available */ type XRInputSourceEventType = "select" | "selectend" | "selectstart" | "squeeze" | "squeezeend" | "squeezestart"; interface XRInputSourceEventInit extends EventInit { frame?: XRFrame | undefined; inputSource?: XRInputSource | undefined; } /** * XRInputSourceEvents are fired to indicate changes to the state of an XRInputSource. * ref: https://immersive-web.github.io/webxr/#xrinputsourceevent-interface */ class XRInputSourceEvent extends Event { readonly type: XRInputSourceEventType; readonly frame: XRFrame; readonly inputSource: XRInputSource; constructor(type: XRInputSourceEventType, eventInitDict?: XRInputSourceEventInit); } interface XRInputSourceEventHandler { (evt: XRInputSourceEvent): any; } type XRSessionEventType = "end" | "visibilitychange" | "frameratechange"; interface XRSessionEventInit extends EventInit { session: XRSession; } /** * XRSessionEvents are fired to indicate changes to the state of an XRSession. * ref: https://immersive-web.github.io/webxr/#xrsessionevent-interface */ class XRSessionEvent extends Event { readonly session: XRSession; constructor(type: XRSessionEventType, eventInitDict?: XRSessionEventInit); } interface XRSessionEventHandler { (evt: XRSessionEvent): any; } /** * ref: https://immersive-web.github.io/webxr/#feature-dependencies */ interface XRSessionInit { optionalFeatures?: string[] | undefined; requiredFeatures?: string[] | undefined; } interface XRSessionEventMap { inputsourceschange: XRInputSourceChangeEvent; end: XRSessionEvent; visibilitychange: XRSessionEvent; frameratechange: XRSessionEvent; select: XRInputSourceEvent; selectstart: XRInputSourceEvent; selectend: XRInputSourceEvent; squeeze: XRInputSourceEvent; squeezestart: XRInputSourceEvent; squeezeend: XRInputSourceEvent; eyetrackingstart: XREyeTrackingSourceEvent; eyetrackingend: XREyeTrackingSourceEvent; } /** * Any interaction with XR hardware is done via an XRSession object, which can only be * retrieved by calling requestSession() on the XRSystem object. Once a session has been * successfully acquired, it can be used to poll the viewer pose, query information about * the user's environment, and present imagery to the user. * * ref: https://immersive-web.github.io/webxr/#xrsession-interface */ interface XRSession extends EventTarget { /** * Returns a list of this session's XRInputSources, each representing an input device * used to control the camera and/or scene. */ readonly inputSources: XRInputSourceArray; /** * object which contains options affecting how the imagery is rendered. * This includes things such as the near and far clipping planes */ readonly renderState: XRRenderState; readonly environmentBlendMode: XREnvironmentBlendMode; readonly visibilityState: XRVisibilityState; readonly frameRate?: number | undefined; readonly supportedFrameRates?: Float32Array | undefined; /** * Removes a callback from the animation frame painting callback from * XRSession's set of animation frame rendering callbacks, given the * identifying handle returned by a previous call to requestAnimationFrame(). */ cancelAnimationFrame(id: number): void; /** * Ends the WebXR session. Returns a promise which resolves when the * session has been shut down. */ end(): Promise<void>; /** * Schedules the specified method to be called the next time the user agent * is working on rendering an animation frame for the WebXR device. Returns an * integer value which can be used to identify the request for the purposes of * canceling the callback using cancelAnimationFrame(). This method is comparable * to the Window.requestAnimationFrame() method. */ requestAnimationFrame(callback: XRFrameRequestCallback): number; /** * Requests that a new XRReferenceSpace of the specified type be created. * Returns a promise which resolves with the XRReferenceSpace or * XRBoundedReferenceSpace which was requested, or throws a NotSupportedError if * the requested space type isn't supported by the device. */ requestReferenceSpace(type: XRReferenceSpaceType): Promise<XRReferenceSpace | XRBoundedReferenceSpace>; updateRenderState(renderStateInit?: XRRenderStateInit): Promise<void>; updateTargetFrameRate(rate: number): Promise<void>; onend: XRSessionEventHandler; oninputsourceschange: XRInputSourceChangeEventHandler; onselect: XRInputSourceEventHandler; onselectstart: XRInputSourceEventHandler; onselectend: XRInputSourceEventHandler; onsqueeze: XRInputSourceEventHandler; onsqueezestart: XRInputSourceEventHandler; onsqueezeend: XRInputSourceEventHandler; onvisibilitychange: XRSessionEventHandler; onframeratechange: XRSessionEventHandler; addEventListener<K extends keyof XRSessionEventMap>(type: K, listener: (this: XRSession, ev: XRSessionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener<K extends keyof XRSessionEventMap>(type: K, listener: (this: XRSession, ev: XRSessionEventMap[K]) => any, options?: boolean | EventListenerOptions): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } abstract class XRSession implements XRSession {} /** * An XRPose describing the state of a viewer of the XR scene as tracked by the XR * device. A viewer may represent a tracked piece of hardware, the observed position * of a user's head relative to the hardware, or some other means of computing a series * of viewpoints into the XR scene. XRViewerPoses can only be queried relative to an * XRReferenceSpace. It provides, in addition to the XRPose values, an array of views * which include rigid transforms to indicate the viewpoint and projection matrices. * These values should be used by the application when rendering a frame of an XR scene. * * ref: https://immersive-web.github.io/webxr/#xrviewerpose-interface */ interface XRViewerPose extends XRPose { readonly views: ReadonlyArray<XRView>; } abstract class XRViewerPose implements XRViewerPose {} /** * A transform described by a position and orientation. When interpreting an * XRRigidTransform the orientation is always applied prior to the position. * * ref: https://immersive-web.github.io/webxr/#xrrigidtransform-interface */ class XRRigidTransform { readonly position: DOMPointReadOnly; readonly orientation: DOMPointReadOnly; readonly matrix: Float32Array; readonly inverse: XRRigidTransform; constructor(position?: DOMPointInit, direction?: DOMPointInit); } /** * Describes a single view into an XR scene for a given frame. * * ref: https://immersive-web.github.io/webxr/#xrview-interface */ interface XRView { readonly eye: XREye; readonly projectionMatrix: Float32Array; readonly transform: XRRigidTransform; readonly recommendedViewportScale?: number | undefined; requestViewportScale(scale: number): void; } abstract class XRView implements XRView {} /** * XRInputSourcesChangeEvents are fired to indicate changes to the XRInputSources that are * available to an XRSession. * ref: https://immersive-web.github.io/webxr/#xrinputsourceschangeevent-interface */ interface XRInputSourceChangeEvent extends XRSessionEvent { readonly removed: ReadonlyArray<XRInputSource>; readonly added: ReadonlyArray<XRInputSource>; } interface XRInputSourceChangeEventHandler { (evt: XRInputSourceChangeEvent): any; } // Experimental/Draft features // Anchors type XRAnchorSet = Set<XRAnchor>; interface XRAnchor { anchorSpace: XRSpace; delete(): void; } abstract class XRAnchor implements XRAnchor {} interface XRFrame { trackedAnchors?: XRAnchorSet | undefined; createAnchor?: (pose: XRRigidTransform, space: XRSpace) => Promise<XRAnchor>; } // AR Hit testing class XRRay { readonly origin: DOMPointReadOnly; readonly direction: DOMPointReadOnly; readonly matrix: Float32Array; constructor(transformOrOrigin?: XRRigidTransform | DOMPointInit, direction?: DOMPointInit); } type XRHitTestTrackableType = "point" | "plane" | "mesh"; interface XRTransientInputHitTestResult { readonly inputSource: XRInputSource; readonly results: ReadonlyArray<XRHitTestResult>; } class XRTransientInputHitTestResult { prototype: XRTransientInputHitTestResult; } interface XRHitTestResult { getPose(baseSpace: XRSpace): XRPose | undefined; // When anchor system is enabled createAnchor?: (pose: XRRigidTransform) => Promise<XRAnchor> | undefined; } abstract class XRHitTestResult implements XRHitTestResult {} interface XRHitTestSource { cancel(): void; } abstract class XRHitTestSource implements XRHitTestSource {} interface XRTransientInputHitTestSource { cancel(): void; } abstract class XRTransientInputHitTestSource implements XRTransientInputHitTestSource {} interface XRHitTestOptionsInit { space: XRSpace; entityTypes?: XRHitTestTrackableType[] | undefined; offsetRay?: XRRay | undefined; } interface XRTransientInputHitTestOptionsInit { profile: string; entityTypes?: XRHitTestTrackableType[] | undefined; offsetRay?: XRRay | undefined; } interface XRSession { requestHitTestSource?: (options: XRHitTestOptionsInit) => Promise<XRHitTestSource>; requestHitTestSourceForTransientInput?: (options: XRTransientInputHitTestOptionsInit) => Promise<XRTransientInputHitTestSource>; // Legacy requestHitTest?: (ray: XRRay, referenceSpace: XRReferenceSpace) => Promise<XRHitResult[]>; } interface XRFrame { getHitTestResults(hitTestSource: XRHitTestSource): XRHitTestResult[]; getHitTestResultsForTransientInput(hitTestSource: XRTransientInputHitTestSource): XRTransientInputHitTestResult[]; } // Legacy interface XRHitResult { hitMatrix: Float32Array; } // Plane detection type XRPlaneSet = Set<XRPlane>; type XRPlaneOrientation = "horizontal" | "vertical"; interface XRPlane { orientation: XRPlaneOrientation; planeSpace: XRSpace; polygon: DOMPointReadOnly[]; lastChangedTime: number; } abstract class XRPlane implements XRPlane {} interface XRSession { // Legacy updateWorldTrackingState?: (options: { planeDetectionState?: { enabled: boolean } | undefined }) => void | undefined; } // interface XRFrame { // worldInformation?: // | { // detectedPlanes?: XRPlaneSet | undefined; // } // | undefined; // } // Hand Tracking type XRHandJoint = | "wrist" | "thumb-metacarpal" | "thumb-phalanx-proximal" | "thumb-phalanx-distal" | "thumb-tip" | "index-finger-metacarpal" | "index-finger-phalanx-proximal" | "index-finger-phalanx-intermediate" | "index-finger-phalanx-distal" | "index-finger-tip" | "middle-finger-metacarpal" | "middle-finger-phalanx-proximal" | "middle-finger-phalanx-intermediate" | "middle-finger-phalanx-distal" | "middle-finger-tip" | "ring-finger-metacarpal" | "ring-finger-phalanx-proximal" | "ring-finger-phalanx-intermediate" | "ring-finger-phalanx-distal" | "ring-finger-tip" | "pinky-finger-metacarpal" | "pinky-finger-phalanx-proximal" | "pinky-finger-phalanx-intermediate" | "pinky-finger-phalanx-distal" | "pinky-finger-tip"; interface XRJointSpace extends XRSpace { readonly jointName: XRHandJoint; } abstract class XRJointSpace implements XRJointSpace {} interface XRJointPose extends XRPose { readonly radius: number | undefined; } abstract class XRJointPose implements XRJointPose {} interface XRHand extends Map<XRHandJoint, XRJointSpace> { readonly WRIST: number; readonly THUMB_METACARPAL: number; readonly THUMB_PHALANX_PROXIMAL: number; readonly THUMB_PHALANX_DISTAL: number; readonly THUMB_PHALANX_TIP: number; readonly INDEX_METACARPAL: number; readonly INDEX_PHALANX_PROXIMAL: number; readonly INDEX_PHALANX_INTERMEDIATE: number; readonly INDEX_PHALANX_DISTAL: number; readonly INDEX_PHALANX_TIP: number; readonly MIDDLE_METACARPAL: number; readonly MIDDLE_PHALANX_PROXIMAL: number; readonly MIDDLE_PHALANX_INTERMEDIATE: number; readonly MIDDLE_PHALANX_DISTAL: number; readonly MIDDLE_PHALANX_TIP: number; readonly RING_METACARPAL: number; readonly RING_PHALANX_PROXIMAL: number; readonly RING_PHALANX_INTERMEDIATE: number; readonly RING_PHALANX_DISTAL: number; readonly RING_PHALANX_TIP: number; readonly LITTLE_METACARPAL: number; readonly LITTLE_PHALANX_PROXIMAL: number; readonly LITTLE_PHALANX_INTERMEDIATE: number; readonly LITTLE_PHALANX_DISTAL: number; readonly LITTLE_PHALANX_TIP: number; } abstract class XRHand extends Map<XRHandJoint, XRJointSpace> implements XRHand {} // WebXR Layers /** * The base class for XRWebGLLayer and other layer types introduced by future extensions. * ref: https://immersive-web.github.io/webxr/#xrlayer-interface */ // tslint:disable-next-line no-empty-interface interface XRLayer extends EventTarget {} abstract class XRLayer implements XRLayer {} interface XRWebGLLayerInit { antialias?: boolean | undefined; depth?: boolean | undefined; stencil?: boolean | undefined; alpha?: boolean | undefined; ignoreDepthValues?: boolean | undefined; framebufferScaleFactor?: number | undefined; } /** * A layer which provides a WebGL framebuffer to render into, enabling hardware accelerated * rendering of 3D graphics to be presented on the XR device. * * ref: https://immersive-web.github.io/webxr/#xrwebgllayer-interface */ class XRWebGLLayer extends XRLayer { static getNativeFramebufferScaleFactor(session: XRSession): number; constructor(session: XRSession, context: WebGLRenderingContext | WebGL2RenderingContext, layerInit?: XRWebGLLayerInit); readonly antialias: boolean; readonly ignoreDepthValues: boolean; fixedFoveation?: number | undefined; readonly framebuffer: WebGLFramebuffer; readonly framebufferWidth: number; readonly framebufferHeight: number; getViewport(view: XRView): XRViewport | undefined; } interface XRRenderStateInit { layers?: XRLayer[] | undefined; } interface XRRenderState { readonly layers?: XRLayer[] | undefined; } type XRLayerEventType = "redraw"; interface XRLayerEvent extends Event { readonly type: XRLayerEventType; readonly layer: XRLayer; } interface XRCompositionLayerEventMap { redraw: XRLayerEvent; } interface XRCompositionLayer extends XRLayer { readonly layout: XRLayerLayout; blendTextureSourceAlpha: boolean; chromaticAberrationCorrection?: boolean | undefined; readonly mipLevels: number; readonly needsRedraw: boolean; destroy(): void; space: XRSpace; // Events onredraw: (evt: XRCompositionLayerEventMap["redraw"]) => any; addEventListener<K extends keyof XRCompositionLayerEventMap>( this: XRCompositionLayer, type: K, callback: (evt: XRCompositionLayerEventMap[K]) => any, options?: boolean | AddEventListenerOptions ): void; addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; removeEventListener<K extends keyof XRCompositionLayerEventMap>(this: XRCompositionLayer, type: K, callback: (evt: XRCompositionLayerEventMap[K]) => any): void; removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; } abstract class XRCompositionLayer implements XRCompositionLayer {} type XRTextureType = "texture" | "texture-array"; type XRLayerLayout = "default" | "mono" | "stereo" | "stereo-left-right" | "stereo-top-bottom"; interface XRProjectionLayerInit { scaleFactor?: number | undefined; textureType?: XRTextureType | undefined; colorFormat?: GLenum | undefined; depthFormat?: GLenum | undefined; clearOnAccess?: boolean | undefined; } interface XRProjectionLayer extends XRCompositionLayer { readonly textureWidth: number; readonly textureHeight: number; readonly textureArrayLength: number; readonly ignoreDepthValues: number; fixedFoveation: number; } abstract class XRProjectionLayer implements XRProjectionLayer {} interface XRLayerInit { mipLevels?: number | undefined; viewPixelWidth: number; viewPixelHeight: number; isStatic?: boolean | undefined; colorFormat?: GLenum | undefined; depthFormat?: GLenum | undefined; space: XRSpace; layout?: XRLayerLayout | undefined; clearOnAccess?: boolean | undefined; } interface XRMediaLayerInit { invertStereo?: boolean | undefined; space: XRSpace; layout?: XRLayerLayout | undefined; } interface XRCylinderLayerInit extends XRLayerInit { textureType?: XRTextureType | undefined; transform: XRRigidTransform; radius?: number | undefined; centralAngle?: number | undefined; aspectRatio?: number | undefined; } interface XRMediaCylinderLayerInit extends XRMediaLayerInit { transform?: XRRigidTransform | undefined; radius?: number | undefined; centralAngle?: number | undefined; aspectRatio?: number | undefined; } interface XRCylinderLayer extends XRCompositionLayer { transform: XRRigidTransform; radius: number; centralAngle: number; aspectRatio: number; } abstract class XRCylinderLayer implements XRCylinderLayer {} interface XRQuadLayerInit extends XRLayerInit { textureType?: XRTextureType | undefined; transform?: XRRigidTransform | undefined; width?: number | undefined; height?: number | undefined; } interface XRMediaQuadLayerInit extends XRMediaLayerInit { transform?: XRRigidTransform | undefined; width?: number | undefined; height?: number | undefined; } interface XRQuadLayer extends XRCompositionLayer { transform: XRRigidTransform; width: number; height: number; } abstract class XRQuadLayer implements XRQuadLayer {} interface XREquirectLayerInit extends XRLayerInit { textureType?: XRTextureType | undefined; transform?: XRRigidTransform | undefined; radius?: number | undefined; centralHorizontalAngle?: number | undefined; upperVerticalAngle?: number | undefined; lowerVerticalAngle?: number | undefined; } interface XRMediaEquirectLayerInit extends XRMediaLayerInit { transform?: XRRigidTransform | undefined; radius?: number | undefined; centralHorizontalAngle?: number | undefined; upperVerticalAngle?: number | undefined; lowerVerticalAngle?: number | undefined; } interface XREquirectLayer extends XRCompositionLayer { transform: XRRigidTransform; radius: number; centralHorizontalAngle: number; upperVerticalAngle: number; lowerVerticalAngle: number; } abstract class XREquirectLayer implements XREquirectLayer {} interface XRCubeLayerInit extends XRLayerInit { orientation?: DOMPointReadOnly | undefined; } interface XRCubeLayer extends XRCompositionLayer { orientation: DOMPointReadOnly; } abstract class XRCubeLayer implements XRCubeLayer {} interface XRSubImage { readonly viewport: XRViewport; } abstract class XRSubImage implements XRSubImage {} interface XRWebGLSubImage extends XRSubImage { readonly colorTexture: WebGLTexture; readonly depthStencilTexture?: WebGLTexture; readonly motionVectorTexture?: WebGLTexture; readonly imageIndex: number; readonly textureWidth: number; readonly textureHeight: number; readonly colorTextureWidth?: number; readonly colorTextureHeight?: number; readonly depthStencilTextureWidth?: number; readonly depthStencilTextureHeight?: number; readonly motionVectorTextureWidth?: number; readonly motionVectorTextureHeight?: number; } abstract class XRWebGLSubImage implements XRWebGLSubImage {} class XRWebGLBinding { readonly nativeProjectionScaleFactor: number; constructor(session: XRSession, context: WebGLRenderingContext); createProjectionLayer(init?: XRProjectionLayerInit): XRProjectionLayer; createQuadLayer(init?: XRQuadLayerInit): XRQuadLayer; createCylinderLayer(init?: XRCylinderLayerInit): XRCylinderLayer; createEquirectLayer(init?: XREquirectLayerInit): XREquirectLayer; createCubeLayer(init?: XRCubeLayerInit): XRCubeLayer; getSubImage(layer: XRCompositionLayer, frame: XRFrame, eye?: XREye): XRWebGLSubImage; getViewSubImage(layer: XRProjectionLayer, view: XRView): XRWebGLSubImage; // BABYLON addition getReflectionCubeMap: (lightProbe: XRLightProbe) => WebGLTexture; } class XRMediaBinding { constructor(sesion: XRSession); createQuadLayer(video: HTMLVideoElement, init?: XRMediaQuadLayerInit): XRQuadLayer; createCylinderLayer(video: HTMLVideoElement, init?: XRMediaCylinderLayerInit): XRCylinderLayer; createEquirectLayer(video: HTMLVideoElement, init?: XRMediaEquirectLayerInit): XREquirectLayer; } // WebGL extensions interface WebGLRenderingContextBase { getExtension(extensionName: "OCULUS_multiview"): OCULUS_multiview | null; } enum XOVR_multiview2 { FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR = 0x9630, FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR = 0x9632, MAX_VIEWS_OVR = 0x9631, FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR = 0x9633, } // Oculus extensions interface XRSessionGrant { mode: XRSessionMode; } interface XRSystemSessionGrantedEvent extends Event { type: "sessiongranted"; session: XRSessionGrant; } interface XRSystemSessionGrantedEventHandler { (event: XRSystemSessionGrantedEvent): any; } interface XRSystemEventMap { // Session Grant events are an Meta Oculus Browser extension sessiongranted: XRSystemSessionGrantedEvent; } interface XRSystem { onsessiongranted: XRSystemSessionGrantedEventHandler | null; } interface OCULUS_multiview extends OVR_multiview2 { framebufferTextureMultisampleMultiviewOVR( target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, samples: GLsizei, baseViewIndex: GLint, numViews: GLsizei ): void; } abstract class OCULUS_multiview implements OCULUS_multiview {} /** * BEGIN: WebXR DOM Overlays Module * https://immersive-web.github.io/dom-overlays/ */ interface GlobalEventHandlersEventMap { beforexrselect: XRSessionEvent; } interface GlobalEventHandlers { /** * An XRSessionEvent of type beforexrselect is dispatched on the DOM overlay * element before generating a WebXR selectstart input event if the -Z axis * of the input source's targetRaySpace intersects the DOM overlay element * at the time the input device's primary action is triggered. */ onbeforexrselect: ((this: GlobalEventHandlers, ev: XRSessionEvent) => any) | null; } interface XRDOMOverlayInit { root: Element; } interface XRSessionInit { domOverlay?: XRDOMOverlayInit | undefined; } type XRDOMOverlayType = "screen" | "floating" | "head-locked"; interface XRDOMOverlayState { type: XRDOMOverlayType; } interface XRSession { readonly domOverlayState?: XRDOMOverlayState | undefined; } /// BABYLON EDITS interface XREyeTrackingSourceEvent extends XRSessionEvent { readonly gazeSpace: XRSpace; } interface XRFrame { fillPoses?(spaces: XRSpace[], baseSpace: XRSpace, transforms: Float32Array): boolean; // Anchors trackedAnchors?: XRAnchorSet; // World geometries. DEPRECATED worldInformation?: XRWorldInformation | undefined; detectedPlanes?: XRPlaneSet | undefined; // Hand tracking getJointPose?(joint: XRJointSpace, baseSpace: XRSpace): XRJointPose; fillJointRadii?(jointSpaces: XRJointSpace[], radii: Float32Array): boolean; // Image tracking getImageTrackingResults?(): Array<XRImageTrackingResult>; getLightEstimate(xrLightProbe: XRLightProbe): XRLightEstimate; } // Plane detection interface XRSession { initiateRoomCapture?(): Promise<void>; } type XREventType = keyof XRSessionEventMap; type XRImageTrackingState = "tracked" | "emulated"; type XRImageTrackingScore = "untrackable" | "trackable"; interface XRTrackedImageInit { image: ImageBitmap; widthInMeters: number; } interface XRImageTrackingResult { readonly imageSpace: XRSpace; readonly index: number; readonly trackingState: XRImageTrackingState; readonly measuredWidthInMeters: number; } interface XRPose { readonly linearVelocity?: DOMPointReadOnly; readonly angularVelocity?: DOMPointReadOnly; } type XRLightProbeInit = { reflectionFormat: XRReflectionFormat; }; type XRReflectionFormat = "srgba8" | "rgba16f"; interface XRSession { readonly preferredReflectionFormat?: XRReflectionFormat; /** * The XRSession interface is extended with the ability to create new XRLightProbe instances. * XRLightProbe instances have a session object, which is the XRSession that created this XRLightProbe. * * Can reject with with a "NotSupportedError" DOMException */ requestLightProbe(options?: XRLightProbeInit): Promise<XRLightProbe>; getTrackedImageScores?(): Promise<XRImageTrackingScore[]>; } interface XRWorldInformation { detectedPlanes?: XRPlaneSet; } interface XRSessionInit { trackedImages?: XRTrackedImageInit[]; } interface XRLightEstimate { readonly sphericalHarmonicsCoefficients: Float32Array; readonly primaryLightDirection: DOMPointReadOnly; readonly primaryLightIntensity: DOMPointReadOnly; } interface XREventHandler { (evt: Event): any; } interface XRLightProbe extends EventTarget { readonly probeSpace: XRSpace; onreflectionchange: XREventHandler; } /** * END: WebXR DOM Overlays Module * https://immersive-web.github.io/dom-overlays/ */ /** * BEGIN: WebXR Depth Sensing Moudle * https://www.w3.org/TR/webxr-depth-sensing-1/ */ type XRDepthUsage = "cpu-optimized" | "gpu-optimized"; type XRDepthDataFormat = "luminance-alpha" | "float32" | "unsigned-short"; type XRDepthStateInit = { readonly usagePreference: XRDepthUsage[]; readonly dataFormatPreference: XRDepthDataFormat[]; }; interface XRSessionInit { depthSensing?: XRDepthStateInit; } interface XRSession { readonly depthUsage: XRDepthUsage; readonly depthDataFormat: XRDepthDataFormat; } interface XRDepthInformation { readonly width: number; readonly height: number; readonly normDepthBufferFromNormView: XRRigidTransform; readonly rawValueToMeters: number; } interface XRCPUDepthInformation extends XRDepthInformation { readonly data: ArrayBuffer; getDepthInMeters(x: number, y: number): number; } interface XRFrame { getDepthInformation(view: XRView): XRCPUDepthInformation | undefined; } interface XRWebGLDepthInformation extends XRDepthInformation { readonly texture: WebGLTexture; readonly textureType: XRTextureType; readonly imageIndex?: number | undefined; } interface XRWebGLBinding { getDepthInformation(view: XRView): XRWebGLDepthInformation | undefined; } // enabledFeatures interface XRSession { enabledFeatures: string[]; } // Raw camera access interface XRView { readonly camera: XRCamera | undefined; } interface XRCamera { readonly width: number; readonly height: number; } interface XRWebGLBinding { getCameraImage(camera: XRCamera): WebGLTexture | undefined; } // Mesh Detection interface XRMesh { meshSpace: XRSpace; vertices: Float32Array; indices: Uint32Array; lastChangedTime: DOMHighResTimeStamp; } type XRMeshSet = Set<XRMesh>; interface XRFrame { detectedMeshes?: XRMeshSet; } /* eslint-disable babylonjs/available */ /* eslint-disable @typescript-eslint/naming-convention */ // WebGPU type augmentations for APIs not yet in TypeScript's lib.dom.d.ts. // Do NOT re-types, interfaces, or classes already in lib.dom.d.ts, // as duplicate declarations cause errors with TypeScript 6.0+ which natively // includes WebGPU types. // String indexer and extra supported limits not yet in lib.dom.d.ts interface GPUSupportedLimits { [name: string]: number; readonly maxStorageBuffersInVertexStage: number; readonly maxStorageBuffersInFragmentStage: number; readonly maxStorageTexturesInVertexStage: number; readonly maxStorageTexturesInFragmentStage: number; } // Extra adapter request options not yet in lib.dom.d.ts interface GPURequestAdapterOptions { featureLevel?: string; xrCompatible?: boolean; } // Extra texture properties not yet in lib.dom.d.ts interface GPUTexture { readonly textureBindingViewDimension: GPUTextureViewDimension | undefined; } interface GPUTextureDescriptor { textureBindingViewDimension?: GPUTextureViewDimension; } // Extra view descriptor property not yet in lib.dom.d.ts interface GPUTextureViewDescriptor { swizzle?: string; } // Shader compilation hints not yet in lib.dom.d.ts interface GPUShaderModuleDescriptor { compilationHints?: GPUShaderModuleCompilationHint[]; } interface GPUShaderModuleCompilationHint { entryPoint: string; layout?: GPUPipelineLayout | GPUAutoLayoutMode; } // Empty mixin not in lib.dom.d.ts, used for type compatibility interface GPUCommandsMixin {} /* eslint-disable no-var */ /* eslint-disable @typescript-eslint/naming-convention */ // Type definitions for WebGL 2 extended with Babylon specific types interface WebGL2RenderingContext extends WebGL2RenderingContextBase { HALF_FLOAT_OES: number; RGBA16F: typeof WebGL2RenderingContext.RGBA16F; RGBA32F: typeof WebGL2RenderingContext.RGBA32F; DEPTH24_STENCIL8: typeof WebGL2RenderingContext.DEPTH24_STENCIL8; COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: number; COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: number; COMPRESSED_SRGB_S3TC_DXT1_EXT: number; COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: number; COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: number; COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT: number; COMPRESSED_SRGB8_ETC2: number; COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: number; DRAW_FRAMEBUFFER: typeof WebGL2RenderingContext.DRAW_FRAMEBUFFER; UNSIGNED_INT_24_8: typeof WebGL2RenderingContext.UNSIGNED_INT_24_8; MIN: typeof WebGL2RenderingContext.MIN; MAX: typeof WebGL2RenderingContext.MAX; R16_EXT: number; RG16_EXT: number; RGB16_EXT: number; RGBA16_EXT: number; R16_SNORM_EXT: number; RG16_SNORM_EXT: number; RGB16_SNORM_EXT: number; RGBA16_SNORM_EXT: number; // OES_draw_buffers_indexed extension methods blendEquationSeparateIndexed(buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum): void; blendEquationIndexed(buf: GLuint, mode: GLenum): void; blendFuncSeparateIndexed(buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void; blendFuncIndexed(buf: GLuint, src: GLenum, dst: GLenum): void; colorMaskIndexed(buf: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean): void; disableIndexed(target: GLenum, index: GLuint): void; enableIndexed(target: GLenum, index: GLuint): void; } interface EXT_disjoint_timer_query { QUERY_COUNTER_BITS_EXT: number; TIME_ELAPSED_EXT: number; TIMESTAMP_EXT: number; GPU_DISJOINT_EXT: number; QUERY_RESULT_EXT: number; QUERY_RESULT_AVAILABLE_EXT: number; queryCounterEXT(query: WebGLQuery, target: number): void; createQueryEXT(): WebGLQuery; beginQueryEXT(target: number, query: WebGLQuery): void; endQueryEXT(target: number): void; getQueryObjectEXT(query: WebGLQuery, target: number): any; deleteQueryEXT(query: WebGLQuery): void; } interface WebGLProgram { __SPECTOR_rebuildProgram?: | ((vertexSourceCode: string, fragmentSourceCode: string, onCompiled: (program: WebGLProgram) => void, onError: (message: string) => void) => void) | null; } interface WebGLUniformLocation { _currentState: any; } /** * TODO: remove this file when we upgrade to TypeScript 5.0 */ /* eslint-disable no-var */ /* eslint-disable @typescript-eslint/naming-convention */ interface OffscreenCanvasEventMap { contextlost: Event; contextrestored: Event; } interface ImageEncodeOptions { quality?: number; type?: string; } // These types are only needed for older versions of typescript. // The BJS addition is only needed because otherwise it is a type duplicate definition type OffscreenRenderingContextIdBJS = "2d" | "bitmaprenderer" | "webgl" | "webgl2" | "webgpu"; type OffscreenRenderingContextBJS = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext; interface OffscreenCanvas extends EventTarget { /** * These attributes return the dimensions of the OffscreenCanvas object's bitmap. * * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it). */ height: number; oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null; oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null; /** * These attributes return the dimensions of the OffscreenCanvas object's bitmap. * * They can be set, to replace the bitmap with a new, transparent black bitmap of the specified dimensions (effectively resizing it). */ width: number; /** * Returns a promise that will fulfill with a new Blob object representing a file containing the image in the OffscreenCanvas object. * * The argument, if provided, is a dictionary that controls the encoding options of the image file to be created. The type field specifies the file forma