blob: fbff92028c1ef3709e0cb1327d66f277ec308511 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WebVR_h
#define WebVR_h
#include "WebCommon.h"
#if BLINK_IMPLEMENTATION
#include "wtf/Assertions.h"
#endif
namespace blink {
struct WebVRVector3 {
float x, y, z;
};
struct WebVRVector4 {
float x, y, z, w;
};
// A field of view, given by 4 degrees describing the view from a center point.
struct WebVRFieldOfView {
float upDegrees;
float downDegrees;
float leftDegrees;
float rightDegrees;
};
// Bit flags to indicate which fields of an WebHMDSensorState are valid.
enum WebVRSensorStateFlags {
WebVRSensorStateOrientation = 1 << 1,
WebVRSensorStatePosition = 1 << 2,
WebVRSensorStateAngularVelocity = 1 << 3,
WebVRSensorStateLinearVelocity = 1 << 4,
WebVRSensorStateAngularAcceleration = 1 << 5,
WebVRSensorStateLinearAcceleration = 1 << 6,
WebVRSensorStateComplete = (1 << 7) - 1 // All previous states combined.
};
// A bitfield of WebVRSensorStateFlags.
typedef int WebVRSensorStateMask;
// A sensor's position, orientation, velocity, and acceleration state at the
// given timestamp.
struct WebHMDSensorState {
double timestamp;
unsigned frameIndex;
WebVRSensorStateMask flags;
WebVRVector4 orientation;
WebVRVector3 position;
WebVRVector3 angularVelocity;
WebVRVector3 linearVelocity;
WebVRVector3 angularAcceleration;
WebVRVector3 linearAcceleration;
};
// Information about the optical properties for an eye in an HMD.
struct WebVREyeParameters {
WebVRFieldOfView minimumFieldOfView;
WebVRFieldOfView maximumFieldOfView;
WebVRFieldOfView recommendedFieldOfView;
WebVRVector3 eyeTranslation;
};
// Information pertaining to Head Mounted Displays.
struct WebVRHMDInfo {
WebVREyeParameters leftEye;
WebVREyeParameters rightEye;
};
// Bit flags to indicate what type of data a WebVRDevice describes.
enum WebVRDeviceTypeFlags {
WebVRDeviceTypePosition = 1 << 1,
WebVRDeviceTypeHMD = 1 << 2
};
// A bitfield of WebVRDeviceTypeFlags.
typedef int WebVRDeviceTypeMask;
// Describes a single VR hardware unit. May describe multiple capabilities,
// such as position sensors or head mounted display metrics.
class WebVRDevice {
public:
static const size_t deviceIdLengthCap = 128;
static const size_t deviceNameLengthCap = 128;
WebVRDevice()
: flags(0)
{
deviceId[0] = 0;
deviceName[0] = 0;
}
// Index for this hardware unit.
unsigned index;
// Device identifier (based on manufacturer, model, etc.).
WebUChar deviceId[deviceIdLengthCap];
// Friendly device name.
WebUChar deviceName[deviceNameLengthCap];
// Identifies the capabilities of this hardware unit.
WebVRDeviceTypeMask flags;
// Will only contain valid data if (flags & HasHMDDevice).
WebVRHMDInfo hmdInfo;
};
}
#endif // WebVR_h