56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
|
|
#pragma once
|
|
|
|
#include "OculusXRMovementXRIncludes.h"
|
|
#include "IOpenXRExtensionPlugin.h"
|
|
#include "OculusXRMovementTypes.h"
|
|
|
|
#define LOCTEXT_NAMESPACE "OculusXRMovement"
|
|
|
|
class FOpenXRHMD;
|
|
|
|
namespace XRMovement
|
|
{
|
|
extern PFN_xrCreateEyeTrackerFB xrCreateEyeTrackerFB;
|
|
extern PFN_xrDestroyEyeTrackerFB xrDestroyEyeTrackerFB;
|
|
extern PFN_xrGetEyeGazesFB xrGetEyeGazesFB;
|
|
|
|
class FEyeTrackingXR : public IOpenXRExtensionPlugin
|
|
{
|
|
public:
|
|
// IOculusXROpenXRHMDPlugin
|
|
virtual bool GetRequiredExtensions(TArray<const ANSICHAR*>& OutExtensions) override;
|
|
virtual bool GetOptionalExtensions(TArray<const ANSICHAR*>& OutExtensions) override;
|
|
virtual const void* OnCreateInstance(class IOpenXRHMDModule* InModule, const void* InNext) override;
|
|
virtual const void* OnCreateSession(XrInstance InInstance, XrSystemId InSystem, const void* InNext) override;
|
|
virtual void OnDestroySession(XrSession InSession) override;
|
|
virtual void* OnWaitFrame(XrSession InSession, void* InNext) override;
|
|
|
|
public:
|
|
FEyeTrackingXR();
|
|
virtual ~FEyeTrackingXR();
|
|
void RegisterAsOpenXRExtension();
|
|
|
|
bool IsEyeTrackingSupported() const { return bExtEyeTrackingEnabled; }
|
|
bool IsEyeTrackingEnabled() const { return EyeTracker != XR_NULL_HANDLE; }
|
|
|
|
XrResult StartEyeTracking();
|
|
XrResult StopEyeTracking();
|
|
XrResult GetCachedEyeState(FOculusXREyeGazesState& OutState);
|
|
|
|
private:
|
|
void InitOpenXRFunctions(XrInstance InInstance);
|
|
void Update_GameThread(XrSession InSession);
|
|
|
|
bool bExtEyeTrackingEnabled;
|
|
|
|
FOpenXRHMD* OpenXRHMD;
|
|
FOculusXREyeGazesState CachedEyeState;
|
|
XrEyeTrackerFB EyeTracker = XR_NULL_HANDLE;
|
|
};
|
|
|
|
} // namespace XRMovement
|
|
|
|
#undef LOCTEXT_NAMESPACE
|