Files
UnrealEngine/Engine/Plugins/Runtime/nDisplay/Source/DisplayClusterWarp/Public/Containers/DisplayClusterWarpEye.h
2025-05-18 13:04:45 +08:00

58 lines
1.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/DisplayClusterWarpContainers.h"
#include "Render/Warp/IDisplayClusterWarpPolicy.h"
#include "Templates/SharedPointer.h"
class IDisplayClusterViewport;
/**
* WarpBlend eye data
*/
class FDisplayClusterWarpEye
: public TSharedFromThis<FDisplayClusterWarpEye, ESPMode::ThreadSafe>
{
public:
FDisplayClusterWarpEye(const TSharedPtr<IDisplayClusterViewport, ESPMode::ThreadSafe>& InViewport, const uint32 InContextNum)
: ViewportWeakPtr(InViewport)
, ContextNum(InContextNum)
{ }
inline bool IsEqual(const FDisplayClusterWarpEye& InEye, float Precision) const
{
if (FMath::IsNearlyEqual(WorldScale, InEye.WorldScale))
{
return ViewPoint.IsEqual(InEye.ViewPoint, Precision);
}
return false;
}
inline IDisplayClusterViewport* GetViewport() const
{
return ViewportWeakPtr.IsValid() ? ViewportWeakPtr.Pin().Get() : nullptr;
}
public:
const TWeakPtr<IDisplayClusterViewport, ESPMode::ThreadSafe> ViewportWeakPtr;
const uint32 ContextNum;
FDisplayClusterWarpViewPoint ViewPoint;
// Current scene additional settings
float WorldScale = 1.f;
// DCRA world2local
FTransform World2LocalTransform;
// Warp policy
TSharedPtr<IDisplayClusterWarpPolicy, ESPMode::ThreadSafe> WarpPolicy;
// (optional) this a view target point. By default used AABB center.
TOptional<FVector> OverrideViewTarget;
// (Optional) is the view direction (when this value is used, it also overrides the OverrideViewTarget parameter).
TOptional<FVector> OverrideViewDirection;
};