summaryrefslogtreecommitdiff
path: root/dom/webidl/VRDevice.webidl
blob: 459083818042bf1c2488ead2c80f26b5245ed513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* -*- 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"]
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
   */
  [Pure] 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.
   */
  [Pure] readonly attribute DOMString deviceId;

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

[Pref="dom.vr.enabled",
 HeaderFile="mozilla/dom/VRDevice.h"]
interface HMDVRDevice : VRDevice {
  /* The translation that should be applied to the view matrix for rendering each eye */
  DOMPoint getEyeTranslation(VREye whichEye);

  // the FOV that the HMD was configured with
  [NewObject]
  VRFieldOfView getCurrentEyeFieldOfView(VREye whichEye);

  // the recommended FOV, per eye.
  [NewObject]
  VRFieldOfView getRecommendedEyeFieldOfView(VREye whichEye);

  // the maximum FOV, per eye.  Above this, rendering will look broken.
  [NewObject]
  VRFieldOfView getMaximumEyeFieldOfView(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);

  // return a recommended rect for this eye.  Only useful for Canvas rendering,
  // the x/y coordinates will be the location in the canvas where this eye should
  // begin, and the width/height are the dimensions.  Any canvas in the appropriate
  // ratio will work.
  DOMRect getRecommendedEyeRenderRect(VREye whichEye);

  // hack for testing
  void xxxToggleElementVR(Element element);
};

[Pref="dom.vr.enabled" ,
 HeaderFile="mozilla/dom/VRDevice.h"]
interface PositionSensorVRDevice : VRDevice {
  /*
   * Return a VRPositionState dictionary containing the state of this position sensor,
   * at an optional past time or predicted for a future time if timeOffset is != 0.
   *
   * 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(optional double timeOffset = 0.0);

  /* Zero this sensor, treating its current position and orientation
   * as the "origin/zero" values.
   */
  void zeroSensor();
};