VRTowerDef/Plugins/MetaXR/Source/OculusXRHMD/Private/OculusXRHMDModule.h

122 lines
4.5 KiB
C
Raw Normal View History

2024-05-29 08:53:41 +00:00
// @lint-ignore-every LICENSELINT
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "OculusXRHMDPrivate.h"
#include "IHeadMountedDisplay.h"
#include "OculusXRFunctionLibrary.h"
#include "OculusXRHMD_VulkanExtensions.h"
#include "OculusXRPluginWrapper.h"
//-------------------------------------------------------------------------------------------------
// FOculusXRHMDModule
//-------------------------------------------------------------------------------------------------
class FOculusXRHMDModule : public IOculusXRHMDModule
{
public:
FOculusXRHMDModule();
static inline FOculusXRHMDModule& Get()
{
return FModuleManager::LoadModuleChecked<FOculusXRHMDModule>("OculusXRHMD");
}
// IModuleInterface
virtual void StartupModule() override;
virtual void ShutdownModule() override;
// IHeadMountedDisplayModule
virtual FString GetModuleKeyName() const override;
virtual void GetModuleAliases(TArray<FString>& AliasesOut) const override;
virtual bool PreInit() override;
virtual bool IsHMDConnected() override;
virtual uint64 GetGraphicsAdapterLuid() override;
virtual FString GetAudioInputDevice() override;
virtual FString GetAudioOutputDevice() override;
virtual FString GetDeviceSystemName() override;
virtual TSharedPtr<class IXRTrackingSystem, ESPMode::ThreadSafe> CreateTrackingSystem() override;
virtual TSharedPtr<IHeadMountedDisplayVulkanExtensions, ESPMode::ThreadSafe> GetVulkanExtensions() override;
virtual bool IsStandaloneStereoOnlyDevice() override;
// IOculusXRHMDModule
virtual void GetPose(FRotator& DeviceRotation, FVector& DevicePosition, FVector& NeckPosition, bool bUseOrienationForPlayerCamera = false, bool bUsePositionForPlayerCamera = false, const FVector PositionScale = FVector::ZeroVector) override
{
UOculusXRFunctionLibrary::GetPose(DeviceRotation, DevicePosition, NeckPosition, bUseOrienationForPlayerCamera, bUsePositionForPlayerCamera, PositionScale);
}
virtual void GetRawSensorData(FVector& AngularAcceleration, FVector& LinearAcceleration, FVector& AngularVelocity, FVector& LinearVelocity, float& TimeInSeconds) override
{
UOculusXRFunctionLibrary::GetRawSensorData(AngularAcceleration, LinearAcceleration, AngularVelocity, LinearVelocity, TimeInSeconds, EOculusXRTrackedDeviceType::HMD);
}
virtual bool GetUserProfile(struct FOculusXRHmdUserProfile& Profile) override
{
return UOculusXRFunctionLibrary::GetUserProfile(Profile);
}
virtual void SetBaseRotationAndBaseOffsetInMeters(FRotator Rotation, FVector BaseOffsetInMeters, EOrientPositionSelector::Type Options) override
{
UOculusXRFunctionLibrary::SetBaseRotationAndBaseOffsetInMeters(Rotation, BaseOffsetInMeters, Options);
}
virtual void GetBaseRotationAndBaseOffsetInMeters(FRotator& OutRotation, FVector& OutBaseOffsetInMeters) override
{
UOculusXRFunctionLibrary::GetBaseRotationAndBaseOffsetInMeters(OutRotation, OutBaseOffsetInMeters);
}
virtual void SetBaseRotationAndPositionOffset(FRotator BaseRot, FVector PosOffset, EOrientPositionSelector::Type Options) override
{
UOculusXRFunctionLibrary::SetBaseRotationAndPositionOffset(BaseRot, PosOffset, Options);
}
virtual void GetBaseRotationAndPositionOffset(FRotator& OutRot, FVector& OutPosOffset) override
{
UOculusXRFunctionLibrary::GetBaseRotationAndPositionOffset(OutRot, OutPosOffset);
}
virtual class IStereoLayers* GetStereoLayers() override
{
return UOculusXRFunctionLibrary::GetStereoLayers();
}
bool IsOVRPluginAvailable() const
{
#if OCULUS_HMD_SUPPORTED_PLATFORMS
return OVRPluginHandle != nullptr;
#else
return false;
#endif
}
// FMetaXRSimulator
OCULUSXRHMD_API static bool IsSimulatorActivated();
OCULUSXRHMD_API static void ToggleOpenXRRuntime();
// FMetaXRSES
OCULUSXRHMD_API static void LaunchEnvironment(FString EnvironmentName);
OCULUSXRHMD_API static void StopServer();
#if OCULUS_HMD_SUPPORTED_PLATFORMS
OCULUSXRHMD_API static void* GetOVRPluginHandle();
OCULUSXRHMD_API static OculusPluginWrapper& GetPluginWrapper();
virtual bool PoseToOrientationAndPosition(const FQuat& InOrientation, const FVector& InPosition, FQuat& OutOrientation, FVector& OutPosition) const override;
protected:
void SetGraphicsAdapterLuid(uint64 InLuid);
static OculusPluginWrapper PluginWrapper;
bool bPreInit;
bool bPreInitCalled;
void* OVRPluginHandle;
uint64 GraphicsAdapterLuid;
TWeakPtr<IHeadMountedDisplay, ESPMode::ThreadSafe> HeadMountedDisplay;
TSharedPtr<IHeadMountedDisplayVulkanExtensions, ESPMode::ThreadSafe> VulkanExtensions;
friend class ::OculusXRHMD::FOculusXRHMD;
#endif // OCULUS_HMD_SUPPORTED_PLATFORMS
};