blob: 19915b9c8f69e7b2b146b14ac35a6b8419cd5d00 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef DEVICE_VR_OPENXR_OPENXR_VISIBILITY_MASK_HANDLER_H_
#define DEVICE_VR_OPENXR_OPENXR_VISIBILITY_MASK_HANDLER_H_
#include "base/memory/raw_ptr.h"
#include "device/vr/public/mojom/visibility_mask_id.h"
#include "device/vr/public/mojom/vr_service.mojom-forward.h"
#include "device/vr/public/mojom/vr_service.mojom.h"
#include "third_party/abseil-cpp/absl/container/flat_hash_map.h"
#include "third_party/openxr/src/include/openxr/openxr.h"
namespace device {
class OpenXrExtensionEnumeration;
class OpenXrExtensionHelper;
class OpenXrVisibilityMaskHandler {
public:
static const char* GetExtension();
static bool IsSupported(const OpenXrExtensionEnumeration& extension_enum);
OpenXrVisibilityMaskHandler(const OpenXrExtensionHelper& extension_helper,
XrSession session);
~OpenXrVisibilityMaskHandler();
void OnVisibilityMaskChanged(
const XrEventDataVisibilityMaskChangedKHR& event);
void UpdateVisibilityMaskData(XrViewConfigurationType type,
uint32_t view_index,
mojom::XRViewPtr& view);
private:
struct CachedMask {
CachedMask();
~CachedMask();
CachedMask(CachedMask&&);
CachedMask& operator=(CachedMask&&);
mojom::XRVisibilityMaskPtr mask;
XrVisibilityMaskId id;
};
using ViewIndexMap = absl::flat_hash_map<uint32_t, CachedMask>;
void UpdateVisibilityMask(XrViewConfigurationType type,
uint32_t view_index,
CachedMask& visibility_mask);
raw_ref<const OpenXrExtensionHelper> extension_helper_;
XrSession session_;
XrVisibilityMaskId::Generator visibility_mask_id_generator_;
absl::flat_hash_map<XrViewConfigurationType, ViewIndexMap> visibility_masks_;
};
} // namespace device
#endif // DEVICE_VR_OPENXR_OPENXR_VISIBILITY_MASK_HANDLER_H_