mirror of
https://github.com/servo/servo.git
synced 2025-06-23 16:44:33 +01:00
240 lines
7.1 KiB
HTML
240 lines
7.1 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset=utf-8>
|
|
<title>WebVR IDL test</title>
|
|
<link rel="help" href="https://w3c.github.io/webvr/">
|
|
|
|
<script src=/resources/testharness.js></script>
|
|
<script src=/resources/testharnessreport.js></script>
|
|
<script src=/resources/WebIDLParser.js></script>
|
|
<script src=/resources/idlharness.js></script>
|
|
<script id="webvr_idl" type=text/plain>
|
|
// Archived version of the WebVR spec from
|
|
// https://w3c.github.io/webvr/archive/prerelease/1.1/index.html
|
|
|
|
interface VRDisplay : EventTarget {
|
|
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);
|
|
|
|
/**
|
|
* 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.
|
|
*/
|
|
long requestAnimationFrame(FrameRequestCallback callback);
|
|
|
|
/**
|
|
* Passing the value returned by `requestAnimationFrame` to
|
|
* `cancelAnimationFrame` will unregister the callback.
|
|
*/
|
|
void cancelAnimationFrame(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();
|
|
};
|
|
|
|
typedef (HTMLCanvasElement or
|
|
OffscreenCanvas) VRSource;
|
|
|
|
dictionary VRLayer {
|
|
VRSource? source = null;
|
|
|
|
sequence<float> leftBounds = [];
|
|
sequence<float> rightBounds = [];
|
|
};
|
|
|
|
interface VRDisplayCapabilities {
|
|
readonly attribute boolean hasPosition;
|
|
readonly attribute boolean hasExternalDisplay;
|
|
readonly attribute boolean canPresent;
|
|
readonly attribute unsigned long maxLayers;
|
|
};
|
|
|
|
enum VREye {
|
|
"left",
|
|
"right"
|
|
};
|
|
|
|
interface VRPose {
|
|
readonly attribute Float32Array? position;
|
|
readonly attribute Float32Array? linearVelocity;
|
|
readonly attribute Float32Array? linearAcceleration;
|
|
|
|
readonly attribute Float32Array? orientation;
|
|
readonly attribute Float32Array? angularVelocity;
|
|
readonly attribute Float32Array? angularAcceleration;
|
|
};
|
|
|
|
[Constructor]
|
|
interface VRFrameData {
|
|
readonly attribute Float32Array leftProjectionMatrix;
|
|
readonly attribute Float32Array leftViewMatrix;
|
|
|
|
readonly attribute Float32Array rightProjectionMatrix;
|
|
readonly attribute Float32Array rightViewMatrix;
|
|
|
|
readonly attribute VRPose pose;
|
|
};
|
|
|
|
interface VREyeParameters {
|
|
readonly attribute Float32Array offset;
|
|
|
|
readonly attribute unsigned long renderWidth;
|
|
readonly attribute unsigned long renderHeight;
|
|
};
|
|
|
|
interface VRStageParameters {
|
|
readonly attribute Float32Array sittingToStandingTransform;
|
|
|
|
readonly attribute float sizeX;
|
|
readonly attribute float sizeZ;
|
|
};
|
|
|
|
partial interface Navigator {
|
|
Promise<sequence<VRDisplay>> getVRDisplays();
|
|
readonly attribute FrozenArray<VRDisplay> activeVRDisplays;
|
|
readonly attribute boolean vrEnabled;
|
|
};
|
|
|
|
enum VRDisplayEventReason {
|
|
"mounted",
|
|
"navigation",
|
|
"requested",
|
|
"unmounted"
|
|
};
|
|
|
|
[Constructor(DOMString type, VRDisplayEventInit eventInitDict)]
|
|
interface VRDisplayEvent : Event {
|
|
readonly attribute VRDisplay display;
|
|
readonly attribute VRDisplayEventReason? reason;
|
|
};
|
|
|
|
dictionary VRDisplayEventInit : EventInit {
|
|
required VRDisplay display;
|
|
VRDisplayEventReason reason;
|
|
};
|
|
|
|
partial interface Window {
|
|
attribute EventHandler onvrdisplayconnect;
|
|
attribute EventHandler onvrdisplaydisconnect;
|
|
attribute EventHandler onvrdisplayactivate;
|
|
attribute EventHandler onvrdisplaydeactivate;
|
|
attribute EventHandler onvrdisplayblur;
|
|
attribute EventHandler onvrdisplayfocus;
|
|
attribute EventHandler onvrdisplaypresentchange;
|
|
};
|
|
|
|
partial interface HTMLIFrameElement {
|
|
attribute boolean allowvr;
|
|
};
|
|
|
|
partial interface Gamepad {
|
|
readonly attribute unsigned long displayId;
|
|
};
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<h1 class="instructions">Description</h1>
|
|
<p class="instructions">
|
|
This test verifies that implementations of the WebVR API match its WebIDL definition.
|
|
</p>
|
|
|
|
<div id='log'></div>
|
|
|
|
<script>
|
|
setup( () => {
|
|
var idl_array = new IdlArray();
|
|
idl_array.add_untested_idls("[PrimaryGlobal] interface Window {};");
|
|
idl_array.add_untested_idls("interface Navigator {};");
|
|
idl_array.add_untested_idls("interface Event {};");
|
|
idl_array.add_untested_idls("interface EventTarget {};");
|
|
idl_array.add_untested_idls("interface HTMLIFrameElement {};");
|
|
idl_array.add_untested_idls("interface Gamepad {};");
|
|
|
|
idl_array.add_idls(document.getElementById("webvr_idl").textContent);
|
|
|
|
idl_array.test();
|
|
done();
|
|
}, {explicit_done: true});
|
|
</script>
|
|
</body>
|
|
</html>
|