blob: 2510d26028b40bb9badd2a7f6a81a2eff77328ce [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.
#ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_DEPTH_MANAGER_H_
#define THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_DEPTH_MANAGER_H_
#include "base/types/pass_key.h"
#include "device/vr/public/mojom/vr_service.mojom-blink.h"
#include "third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/heap/member.h"
namespace blink {
class ExceptionState;
class XRCPUDepthInformation;
class XRWebGLDepthInformation;
class XRFrame;
class XRSession;
// Helper class, used to separate the code related to depth buffer processing
// out of XRSession.
class XRDepthManager : public GarbageCollected<XRDepthManager> {
public:
explicit XRDepthManager(
base::PassKey<XRSession> pass_key,
XRSession* session,
const device::mojom::blink::XRDepthConfig& device_configuration);
virtual ~XRDepthManager();
void ProcessDepthInformation(device::mojom::blink::XRDepthDataPtr depth_data);
const String& depthUsage() const { return usage_str_; }
const String& depthDataFormat() const { return data_format_str_; }
XRCPUDepthInformation* GetCpuDepthInformation(
const XRFrame* xr_frame,
ExceptionState& exception_state);
XRWebGLDepthInformation* GetWebGLDepthInformation(
const XRFrame* xr_frame,
ExceptionState& exception_state);
void Trace(Visitor* visitor) const;
private:
Member<XRSession> session_;
const device::mojom::XRDepthUsage usage_;
const device::mojom::XRDepthDataFormat data_format_;
const String usage_str_;
const String data_format_str_;
// Current depth data buffer.
device::mojom::blink::XRDepthDataUpdatedPtr depth_data_;
// Cached version of the depth buffer data. If not null, contains the same
// information as |depth_data_.pixel_data| buffer.
Member<DOMArrayBuffer> data_;
void EnsureData();
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_MODULES_XR_XR_DEPTH_MANAGER_H_