64 lines
2.1 KiB
C++
64 lines
2.1 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_xrCreateFaceTracker2FB xrCreateEyeTracker2FB;
|
|
extern PFN_xrDestroyFaceTracker2FB xrDestroyEyeTracker2FB;
|
|
extern PFN_xrGetFaceExpressionWeights2FB xrGetFaceExpressionWeights2FB;
|
|
|
|
class FFaceTrackingXR : 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:
|
|
FFaceTrackingXR();
|
|
virtual ~FFaceTrackingXR();
|
|
void RegisterAsOpenXRExtension();
|
|
|
|
bool IsFaceTrackingSupported() const { return bExtFaceTrackingSupported; }
|
|
bool IsFaceTrackingEnabled() const { return FaceTracker != XR_NULL_HANDLE; }
|
|
bool IsFaceTrackingVisemesSupported() const { return bExtFaceTrackingVisemesSupported; }
|
|
bool IsFaceTrackingVisemesEnabled() const { return bVisemesEnabled; }
|
|
|
|
XrResult StartFaceTracking();
|
|
XrResult StopFaceTracking();
|
|
XrResult GetCachedFaceState(FOculusXRFaceState& OutState);
|
|
XrResult SetVisemesEnabled(bool enabled);
|
|
XrResult GetCachedVisemeState(FOculusXRFaceVisemesState& OutState);
|
|
|
|
private:
|
|
void InitOpenXRFunctions(XrInstance InInstance);
|
|
void Update_GameThread(XrSession InSession);
|
|
|
|
bool bExtFaceTrackingSupported;
|
|
bool bExtFaceTrackingVisemesSupported;
|
|
bool bVisemesEnabled;
|
|
|
|
FOpenXRHMD* OpenXRHMD;
|
|
FOculusXRFaceState CachedFaceState;
|
|
FOculusXRFaceVisemesState CachedVisemeState;
|
|
|
|
XrFaceTracker2FB FaceTracker = XR_NULL_HANDLE;
|
|
};
|
|
|
|
} // namespace XRMovement
|
|
|
|
#undef LOCTEXT_NAMESPACE
|