Raw File
VRDevice.webidl
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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"
};

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h"]
interface VRFieldOfViewReadOnly {
  readonly attribute double upDegrees;
  readonly attribute double rightDegrees;
  readonly attribute double downDegrees;
  readonly attribute double leftDegrees;
};

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h",
 Constructor(optional VRFieldOfViewInit fov),
 Constructor(double upDegrees, double rightDegrees, double downDegrees, double leftDegrees)]
interface VRFieldOfView : VRFieldOfViewReadOnly {
  inherit attribute double upDegrees;
  inherit attribute double rightDegrees;
  inherit attribute double downDegrees;
  inherit attribute double leftDegrees;
};

dictionary VRFieldOfViewInit {
  double upDegrees = 0.0;
  double rightDegrees = 0.0;
  double downDegrees = 0.0;
  double leftDegrees = 0.0;
};

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h"]
interface VRPositionState {
  readonly attribute double timeStamp;

  readonly attribute boolean hasPosition;
  readonly attribute DOMPoint? position;
  readonly attribute DOMPoint? linearVelocity;
  readonly attribute DOMPoint? linearAcceleration;

  readonly attribute boolean hasOrientation;
  // XXX should be DOMQuaternion as soon as we add that
  readonly attribute DOMPoint? orientation;
  readonly attribute DOMPoint? angularVelocity;
  readonly attribute DOMPoint? angularAcceleration;
};

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h"]
interface VREyeParameters {
  /* These values are expected to be static per-device/per-user */
  [Constant, Cached] readonly attribute VRFieldOfView minimumFieldOfView;
  [Constant, Cached] readonly attribute VRFieldOfView maximumFieldOfView;
  [Constant, Cached] readonly attribute VRFieldOfView recommendedFieldOfView;
  [Constant, Cached] readonly attribute DOMPoint eyeTranslation;

  /* These values will vary after a FOV has been set */
  [Constant, Cached] readonly attribute VRFieldOfView currentFieldOfView;
  [Constant, Cached] readonly attribute DOMRect renderRect;
};

[Pref="dom.vr.enabled"]
interface VRDevice {
  /**
   * An identifier for the distinct hardware unit that this
   * VR Device is a part of.  All VRDevice/Sensors that come
   * from the same hardware will have the same hardwareId
   */
  [Constant] readonly attribute DOMString hardwareUnitId;

  /**
   * An identifier for this distinct sensor/device on a physical
   * hardware device.  This shouldn't change across browser
   * restrats, allowing configuration data to be saved based on it.
   */
  [Constant] readonly attribute DOMString deviceId;

  /**
   * a device name, a user-readable name identifying it
   */
  [Constant] readonly attribute DOMString deviceName;
};

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h"]
interface HMDVRDevice : VRDevice {
  // Return the current VREyeParameters for the given eye
  VREyeParameters getEyeParameters(VREye whichEye);

  // Set a field of view.  If either of the fields of view is null,
  // or if their values are all zeros, then the recommended field of view
  // for that eye will be used.
  void setFieldOfView(optional VRFieldOfViewInit leftFOV,
                      optional VRFieldOfViewInit rightFOV,
                      optional double zNear = 0.01,
                      optional double zFar = 10000.0);
};

[Pref="dom.vr.enabled" ,
 HeaderFile="mozilla/dom/VRDevice.h"]
interface PositionSensorVRDevice : VRDevice {
  /*
   * Return a VRPositionState dictionary containing the state of this position sensor
   * for the current frame if within a requestAnimationFrame callback, or for the
   * previous frame if not.
   *
   * The VRPositionState will contain the position, orientation, and velocity
   * and acceleration of each of these properties.  Use "hasPosition" and "hasOrientation"
   * to check if the associated members are valid; if these are false, those members
   * will be null.
   */
  [NewObject] VRPositionState getState();

  /*
   * Return the current instantaneous sensor state.
   */
  [NewObject] VRPositionState getImmediateState();

  /* Reset this sensor, treating its current position and orientation
   * as the "origin/zero" values.
   */
  void resetSensor();
};
back to top