blob: 6e4a4ff11c89285b5213cc488f006dab5c1601d3 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// 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_layer.h"
#include "third_party/blink/renderer/modules/event_target_modules.h"
#include "third_party/blink/renderer/modules/xr/xr_layer_shared_image_manager.h"
#include "third_party/blink/renderer/modules/xr/xr_session.h"
namespace blink {
XRLayer::XRLayer(XRSession* session)
: session_(session), layer_id_(session->GetNextLayerId()) {}
ExecutionContext* XRLayer::GetExecutionContext() const {
return session_->GetExecutionContext();
}
const AtomicString& XRLayer::InterfaceName() const {
return event_target_names::kXRLayer;
}
const XRSharedImageData& XRLayer::SharedImage() const {
return session_->LayerSharedImageManager().LayerSharedImage(layer_id_);
}
bool XRLayer::HasSharedImage() const {
return session_->LayerSharedImageManager().HasLayerSharedImage(layer_id_);
}
void XRLayer::SetModified(bool is_modified) {
is_modified_ = is_modified;
}
bool XRLayer::IsModified() const {
return is_modified_;
}
void XRLayer::CreateLayerBackend() {
if (auto* layer_manager = session()->LayerManager(); layer_manager) {
layer_manager->CreateCompositionLayer(
CreateLayerData(),
BindOnce(&XRLayer::OnBackendLayerCreated, WrapWeakPersistent(this)));
}
}
void XRLayer::OnBackendLayerCreated(
device::mojom::blink::CreateCompositionLayerResult result) {
is_backend_active_ =
result == device::mojom::blink::CreateCompositionLayerResult::SUCCESS;
}
bool XRLayer::IsBackendActive() const {
return is_backend_active_;
}
void XRLayer::DestroyBackend() {
if (auto* layer_manager = session()->LayerManager(); layer_manager) {
layer_manager->DestroyCompositionLayer(layer_id_);
}
}
void XRLayer::Trace(Visitor* visitor) const {
visitor->Trace(session_);
EventTarget::Trace(visitor);
}
} // namespace blink