// Copyright Voulz 2021-2025. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "SceneViewExtension.h" class UArchVisCineCameraComponent; class UArchVisSubsystem; /** * A hack class used by ArchVisMoviePipelineDeferredPass to force a specific scene should not be rendered for this view */ struct FArchVisSceneViewExtensionContextDisableOnce : public FSceneViewExtensionContext { private: //~ FSceneViewExtensionContext Interface virtual FName GetRTTI() const override { return TEXT("FArchVisSceneViewExtensionContext"); } public: FArchVisSceneViewExtensionContextDisableOnce() { } FArchVisSceneViewExtensionContextDisableOnce(FSceneInterface* InScene) : FSceneViewExtensionContext(InScene) { } }; class ARCHVISTOOLS_API FArchVisSceneViewExtension : public FSceneViewExtensionBase { public: FArchVisSceneViewExtension(const FAutoRegister& AutoRegister, UArchVisSubsystem* InArchVisSubsystem); //~ Begin FSceneViewExtensionBase Interface virtual void SetupViewFamily(FSceneViewFamily& InViewFamily) override; virtual void SetupView(FSceneViewFamily& InViewFamily, FSceneView& InView) override; virtual void BeginRenderViewFamily(FSceneViewFamily& InViewFamily) override {}; virtual void PrePostProcessPass_RenderThread(FRDGBuilder& GraphBuilder, const FSceneView& View, const FPostProcessingInputs& Inputs) override {}; //~ End FSceneViewExtensionBase Interface static FMinimalViewInfo GetCorrectedViewInfo(const UWorld* World, UArchVisCineCameraComponent* ArchVisComponent, const FIntPoint& UnconstrainedViewSize, const FMinimalViewInfo& CurrentViewInfo); // Adjustment of FViewport::CalculateViewExtents to remove the need from the FViewport static FIntRect CalculateViewExtents(float AspectRatio, const FIntRect& ViewRect); protected: // Disable the View Extension in MRQ virtual bool IsActiveThisFrame_Internal(const FSceneViewExtensionContext& Context) const override; private: UArchVisSubsystem* ArchVisSubsystem = nullptr; };