blob: 916f0e9c6dcd3f687f6001854252026aab17cf68 [file]
// Copyright 2019 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_INPUT_HELPER_H_
#define DEVICE_VR_OPENXR_OPENXR_INPUT_HELPER_H_
#include <array>
#include <memory>
#include <vector>
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "device/vr/openxr/openxr_controller.h"
#include "device/vr/openxr/openxr_interaction_profiles.h"
#include "device/vr/openxr/openxr_util.h"
namespace device {
class OpenXRInputHelper {
public:
static XrResult CreateOpenXRInputHelper(
XrInstance instance,
XrSystemId system,
const OpenXrExtensionHelper& extension_helper,
XrSession session,
XrSpace local_space,
std::unique_ptr<OpenXRInputHelper>* helper);
OpenXRInputHelper(XrSession session, XrSpace local_space);
OpenXRInputHelper(const OpenXRInputHelper&) = delete;
OpenXRInputHelper& operator=(const OpenXRInputHelper&) = delete;
~OpenXRInputHelper();
std::vector<mojom::XRInputSourceStatePtr> GetInputState(
bool hand_input_enabled,
XrTime predicted_display_time);
XrResult OnInteractionProfileChanged();
private:
absl::optional<Gamepad> GetWebXRGamepad(const OpenXrController& controller);
XrResult Initialize(XrInstance instance,
XrSystemId system,
const OpenXrExtensionHelper& extension_helper);
XrResult SyncActions(XrTime predicted_display_time);
XrSpace GetMojomSpace() const {
return local_space_; // Mojom space is currently defined as local space
}
XrSession session_;
XrSpace local_space_;
struct OpenXrControllerState {
OpenXrController controller;
bool primary_button_pressed;
bool squeeze_button_pressed;
};
std::array<OpenXrControllerState,
static_cast<size_t>(OpenXrHandednessType::kCount)>
controller_states_;
std::unique_ptr<OpenXRPathHelper> path_helper_;
};
} // namespace device
#endif // DEVICE_VR_OPENXR_OPENXR_INPUT_HELPER_H_