blob: 982e893b95ad5295fc4d17ea176f31c064f0c05b [file] [log] [blame]
// Copyright 2020 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/xr/xr_image_tracking_result.h"
#include "third_party/blink/renderer/core/html/html_image_element.h"
#include "third_party/blink/renderer/modules/xr/xr_object_space.h"
#include "third_party/blink/renderer/modules/xr/xr_pose.h"
#include "third_party/blink/renderer/modules/xr/xr_session.h"
#include "third_party/blink/renderer/modules/xr/xr_space.h"
#include "third_party/blink/renderer/platform/transforms/transformation_matrix.h"
namespace blink {
class XRImageSpace : public XRObjectSpace<XRImageTrackingResult> {
public:
XRImageSpace(XRSession* session, const XRImageTrackingResult* object)
: XRObjectSpace<XRImageTrackingResult>(session, object) {}
bool IsStationary() const override { return false; }
};
XRImageTrackingResult::XRImageTrackingResult(
XRSession* session,
const device::mojom::blink::XRTrackedImageData& result)
: session_(session),
index_(result.index),
mojo_from_this_(result.mojo_from_image),
width_in_meters_(result.width_in_meters) {
DVLOG(2) << __func__ << ": image index=" << index_;
if (result.actively_tracked) {
tracking_state_string_ = "tracked";
} else {
tracking_state_string_ = "emulated";
}
}
base::Optional<TransformationMatrix> XRImageTrackingResult::MojoFromObject()
const {
if (!mojo_from_this_) {
return base::nullopt;
}
return TransformationMatrix(mojo_from_this_->ToTransform().matrix());
}
XRSpace* XRImageTrackingResult::imageSpace() const {
if (!image_space_) {
image_space_ = MakeGarbageCollected<XRImageSpace>(session_, this);
}
return image_space_;
}
void XRImageTrackingResult::Trace(Visitor* visitor) const {
visitor->Trace(session_);
visitor->Trace(image_space_);
ScriptWrappable::Trace(visitor);
}
} // namespace blink