October3d55/Matain/ViveOpenXR/Source/ViveOpenXRDisplayRefreshRate/Private/ViveOpenXRDisplayRefreshRat...

51 lines
1.7 KiB
C++
Raw Normal View History

2025-03-10 09:43:27 +08:00
// Copyright HTC Corporation. All Rights Reserved.
#include "ViveOpenXRDisplayRefreshRateFunctionLibrary.h"
#include "ViveOpenXRDisplayRefreshRateModule.h"
#include "OpenXRHMD.h"
static FViveOpenXRDisplayRefreshRate* FViveOpenXRDisplayRefreshRatePtr = nullptr;
FViveOpenXRDisplayRefreshRate* GetViveOpenXRDisplayRefreshRateModulePtr()
{
if (FViveOpenXRDisplayRefreshRatePtr != nullptr)
{
return FViveOpenXRDisplayRefreshRatePtr;
}
else
{
if (GEngine->XRSystem.IsValid())
{
auto HMD = static_cast<FOpenXRHMD*>(GEngine->XRSystem->GetHMDDevice());
for (IOpenXRExtensionPlugin* Module : HMD->GetExtensionPlugins())
{
if (Module->GetDisplayName() == TEXT("ViveOpenXRDisplayRefreshRate"))
{
FViveOpenXRDisplayRefreshRatePtr = static_cast<FViveOpenXRDisplayRefreshRate*>(Module);
break;
}
}
}
return FViveOpenXRDisplayRefreshRatePtr;
}
}
bool UViveOpenXRDisplayRefreshRateFunctionLibrary::EnumerateDisplayRefreshRates(TArray<float>& OutDisplayRefreshRates)
{
if (!GetViveOpenXRDisplayRefreshRateModulePtr()) return false;
return GetViveOpenXRDisplayRefreshRateModulePtr()->EnumerateDisplayRefreshRates(OutDisplayRefreshRates);
}
bool UViveOpenXRDisplayRefreshRateFunctionLibrary::GetDisplayRefreshRate(float& OutDisplayRefreshRate)
{
if (!GetViveOpenXRDisplayRefreshRateModulePtr()) return false;
return GetViveOpenXRDisplayRefreshRateModulePtr()->GetDisplayRefreshRate(OutDisplayRefreshRate);
}
bool UViveOpenXRDisplayRefreshRateFunctionLibrary::RequestDisplayRefreshRate(float InDisplayRefreshRate)
{
if (!GetViveOpenXRDisplayRefreshRateModulePtr()) return false;
return GetViveOpenXRDisplayRefreshRateModulePtr()->RequestDisplayRefreshRate(InDisplayRefreshRate);
}