blob: c290782820a64cab8f8d9bdd4e447d2672d45343 [file] [log] [blame]
// Copyright 2019 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 DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_
#define DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_
#include <stdint.h>
#include <memory>
#include "base/callback.h"
#include "base/macros.h"
#include "device/vr/windows/compositor_base.h"
#include "third_party/openxr/src/include/openxr/openxr.h"
struct XrView;
namespace device {
class OpenXrApiWrapper;
class OpenXRInputHelper;
class OpenXrRenderLoop : public XRCompositorCommon {
public:
OpenXrRenderLoop(base::RepeatingCallback<void(mojom::VRDisplayInfoPtr)>
on_display_info_changed);
~OpenXrRenderLoop() override;
private:
// XRDeviceAbstraction:
mojom::XRFrameDataPtr GetNextFrameData() override;
bool StartRuntime() override;
void StopRuntime() override;
void OnSessionStart() override;
bool PreComposite() override;
bool HasSessionEnded() override;
bool SubmitCompositedFrame() override;
void InitializeDisplayInfo();
bool UpdateEyeParameters();
bool UpdateEye(const XrView& view_head,
const gfx::Size& view_size,
mojom::VREyeParametersPtr* eye) const;
bool UpdateStageParameters();
std::unique_ptr<OpenXrApiWrapper> openxr_;
std::unique_ptr<OpenXRInputHelper> input_helper_;
XrExtent2Df current_stage_bounds_;
base::RepeatingCallback<void(mojom::VRDisplayInfoPtr)>
on_display_info_changed_;
mojom::VRDisplayInfoPtr current_display_info_;
// This must be the last member
base::WeakPtrFactory<OpenXrRenderLoop> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(OpenXrRenderLoop);
};
} // namespace device
#endif // DEVICE_VR_OPENXR_OPENXR_RENDER_LOOP_H_