// 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 { public: FDisplayClusterWarpEye(const TSharedPtr& 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 ViewportWeakPtr; const uint32 ContextNum; FDisplayClusterWarpViewPoint ViewPoint; // Current scene additional settings float WorldScale = 1.f; // DCRA world2local FTransform World2LocalTransform; // Warp policy TSharedPtr WarpPolicy; // (optional) this a view target point. By default used AABB center. TOptional OverrideViewTarget; // (Optional) is the view direction (when this value is used, it also overrides the OverrideViewTarget parameter). TOptional OverrideViewDirection; };