#ifndef DEVICE_VR_OPENXR_WINDOWS_OPENXR_PLATFORM_HELPER_WINDOWS_H_
#define DEVICE_VR_OPENXR_WINDOWS_OPENXR_PLATFORM_HELPER_WINDOWS_H_
#include "device/vr/openxr/openxr_platform_helper.h"
#include "base/memory/weak_ptr.h"
#include "base/win/windows_types.h"
#include "device/vr/vr_export.h"
#include "third_party/openxr/src/include/openxr/openxr.h"
namespace device {
class OpenXrGraphicsBinding;
class DEVICE_VR_EXPORT OpenXrPlatformHelperWindows
: public OpenXrPlatformHelper {
public:
OpenXrPlatformHelperWindows();
~OpenXrPlatformHelperWindows() override;
std::unique_ptr<OpenXrGraphicsBinding> GetGraphicsBinding() override;
void GetPlatformCreateInfo(
const device::OpenXrCreateInfo& create_info,
PlatformCreateInfoReadyCallback result_callback,
PlatormInitiatedShutdownCallback shutdown_callback) override;
device::mojom::XRDeviceData GetXRDeviceData() override;
bool Initialize() override;
void PrepareForSessionShutdown(
base::OnceClosure shutdown_ready_callback) override;
XrResult CreateInstance(XrInstance* instance, void* create_info) override;
XrResult DestroyInstance(XrInstance& instance) override;
bool IsHardwareAvailable();
bool IsApiAvailable();
bool TryGetLuid(LUID* luid, XrSystemId system = XR_NULL_SYSTEM_ID);
private:
XrInstance GetOrCreateXrInstance();
PFN_xrGetD3D11GraphicsRequirementsKHR get_graphics_requirements_fn_ = nullptr;
base::WeakPtrFactory<OpenXrPlatformHelperWindows> weak_ptr_factory_{this};
};
}
#endif