blob: 50d3abaceca71289038523bb1acf65be3a1afac8 [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.
#include "third_party/blink/renderer/modules/vr/vr_pose.h"
#include "device/vr/public/mojom/vr_service.mojom-blink.h"
namespace blink {
namespace {
DOMFloat32Array* QuaternionToFloat32Array(
const base::Optional<gfx::Quaternion>& quat) {
if (!quat)
return nullptr;
auto* dom_array = DOMFloat32Array::Create(4);
float* data = dom_array->Data();
data[0] = quat->x();
data[1] = quat->y();
data[2] = quat->z();
data[3] = quat->w();
return dom_array;
}
DOMFloat32Array* Vector3dFToFloat32Array(
const base::Optional<gfx::Vector3dF>& vec) {
if (!vec)
return nullptr;
auto* dom_array = DOMFloat32Array::Create(3);
float* data = dom_array->Data();
data[0] = vec->x();
data[1] = vec->y();
data[2] = vec->z();
return dom_array;
}
DOMFloat32Array* WebPoint3DToFloat32Array(
const base::Optional<WebFloatPoint3D>& p) {
if (!p)
return nullptr;
auto* dom_array = DOMFloat32Array::Create(3);
float* data = dom_array->Data();
data[0] = p->x;
data[1] = p->y;
data[2] = p->z;
return dom_array;
}
} // namespace
VRPose::VRPose() = default;
void VRPose::SetPose(const device::mojom::blink::VRPosePtr& state) {
if (state.is_null())
return;
orientation_ = QuaternionToFloat32Array(state->orientation);
position_ = WebPoint3DToFloat32Array(state->position);
angular_velocity_ = Vector3dFToFloat32Array(state->angular_velocity);
linear_velocity_ = Vector3dFToFloat32Array(state->linear_velocity);
angular_acceleration_ = Vector3dFToFloat32Array(state->angular_acceleration);
linear_acceleration_ = Vector3dFToFloat32Array(state->linear_acceleration);
}
void VRPose::Trace(blink::Visitor* visitor) {
visitor->Trace(orientation_);
visitor->Trace(position_);
visitor->Trace(angular_velocity_);
visitor->Trace(linear_velocity_);
visitor->Trace(angular_acceleration_);
visitor->Trace(linear_acceleration_);
ScriptWrappable::Trace(visitor);
}
} // namespace blink