forked from mirrors/gecko-dev
<!-- Please describe your changes on the following line: --> Servo WebVR implementation started when WebVR spec 1.2 was about to be released. 1.2 API included some minor breaking changes from spec 1.1 in order to improve the support of the API in WebWorkers. But eventually the WebVR committee decided not to release 1.2 and make it a major version number with a lot more changes. WebVR API 2.0 is still under heavy churn. This PR removes the WebVR changes that non-released 1.2 version introduced to support full WebVR 1.1 spec. I pushed some GC fixes in a separate commit. See https://github.com/servo/servo/issues/17076 and https://github.com/servo/rust-mozjs/issues/351 --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [x] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> Source-Repo: https://github.com/servo/servo Source-Revision: ddd3a15b50213931ad7c90312112275ae958d4a0 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 14a624d4b94d52fbea42e8eec2cc239cc7b3d271
131 lines
4.4 KiB
Text
131 lines
4.4 KiB
Text
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
enum VREye {
|
|
"left",
|
|
"right"
|
|
};
|
|
|
|
|
|
// https://w3c.github.io/webvr/#interface-vrdisplay
|
|
[Pref="dom.webvr.enabled"]
|
|
interface VRDisplay : EventTarget {
|
|
readonly attribute boolean isConnected;
|
|
readonly attribute boolean isPresenting;
|
|
|
|
/**
|
|
* Dictionary of capabilities describing the VRDisplay.
|
|
*/
|
|
[SameObject] readonly attribute VRDisplayCapabilities capabilities;
|
|
|
|
/**
|
|
* If this VRDisplay supports room-scale experiences, the optional
|
|
* stage attribute contains details on the room-scale parameters.
|
|
* The stageParameters attribute can not change between null
|
|
* and non-null once the VRDisplay is enumerated; however,
|
|
* the values within VRStageParameters may change after
|
|
* any call to VRDisplay.submitFrame as the user may re-configure
|
|
* their environment at any time.
|
|
*/
|
|
readonly attribute VRStageParameters? stageParameters;
|
|
|
|
/**
|
|
* Return the current VREyeParameters for the given eye.
|
|
*/
|
|
VREyeParameters getEyeParameters(VREye whichEye);
|
|
|
|
/**
|
|
* An identifier for this distinct VRDisplay. Used as an
|
|
* association point in the Gamepad API.
|
|
*/
|
|
readonly attribute unsigned long displayId;
|
|
|
|
/**
|
|
* A display name, a user-readable name identifying it.
|
|
*/
|
|
readonly attribute DOMString displayName;
|
|
|
|
/**
|
|
* Populates the passed VRFrameData with the information required to render
|
|
* the current frame.
|
|
*/
|
|
boolean getFrameData(VRFrameData frameData);
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
[NewObject] VRPose getPose();
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
void resetPose();
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
attribute double depthNear;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
attribute double depthFar;
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
unsigned long requestAnimationFrame(FrameRequestCallback callback);
|
|
|
|
/**
|
|
* Passing the value returned by `requestAnimationFrame` to
|
|
* `cancelAnimationFrame` will unregister the callback.
|
|
*/
|
|
void cancelAnimationFrame(unsigned long handle);
|
|
|
|
/**
|
|
* 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.
|
|
* If the number of values in the leftBounds/rightBounds arrays is not 0 or 4 for
|
|
* any of the passed layers the promise is rejected.
|
|
* If the source of any of the layers is not present (null), the promise is rejected.
|
|
*/
|
|
Promise<void> requestPresent(sequence<VRLayer> layers);
|
|
|
|
/**
|
|
* Stops presenting to the VRDisplay.
|
|
*/
|
|
Promise<void> exitPresent();
|
|
|
|
/**
|
|
* Get the layers currently being presented.
|
|
*/
|
|
sequence<VRLayer> getLayers();
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
void submitFrame();
|
|
};
|