Files
UnrealEngine/Engine/Source/Runtime/RenderCore/Public/IRenderCaptureProvider.h
2025-05-18 13:04:45 +08:00

90 lines
3.0 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Features/IModularFeatures.h"
class FRHICommandListImmediate;
class FViewport;
class IRenderCaptureProvider : public IModularFeature
{
public:
/**
* Get the feature name used for module resolution.
*
* @return The feature name.
*/
static FName GetModularFeatureName()
{
static FName FeatureName = FName(TEXT("RenderCaptureProvider"));
return FeatureName;
}
/**
* Checks to see if the specified feature is available.
*
* @return True if the feature is available right now and it is safe to call Get().
*/
static inline bool IsAvailable()
{
// This function is accessible from the render and RHI threads, so lock the list of modular features before calling GetModularFeature
IModularFeatures::FScopedLockModularFeatureList ScopedLockModularFeatureList;
return IModularFeatures::Get().IsModularFeatureAvailable(GetModularFeatureName());
}
/**
* Gets the first registered implementation of this feature. Will assert or crash
* if the specified feature is not available! You should call IsAvailable() first!
*
* @return The feature.
*/
static inline IRenderCaptureProvider& Get()
{
// This function is accessible from the render and RHI threads, so lock the list of modular features before calling GetModularFeature
IModularFeatures::FScopedLockModularFeatureList ScopedLockModularFeatureList;
return IModularFeatures::Get().GetModularFeature<IRenderCaptureProvider>(GetModularFeatureName());
}
/** Derived classes return false if they cannot support an RHI submission thread. */
virtual bool CanSupportSubmissionThread() const { return true; }
/**
* Flags to pass to capture API.
*/
enum ECaptureFlags
{
// Set to launch the capture viewing application. Whether this is supported depends on the underlying capture tool.
ECaptureFlags_Launch = 1,
};
/**
* Capture the next full frame of rendering information.
* Currently any capture details (number of frames etc.) must be set up by CVars exposed in the underlying capture tool.
* Call from main thread only.
*
* @param Viewport The specific viewport to capture. (Optional).
* @param bLaunch
* @param DestFileName The destination file name for saving the capture. (Optional).
*
*/
virtual void CaptureFrame(FViewport* InViewport = nullptr, uint32 InFlags = 0, FString const& InDestFileName = FString()) = 0;
/**
* Start capturing rendering information.
* Call from render thread only.
*
* @param RHICommandList The command list to capture on.
* @param DestFileName The destination file name for saving the capture. (Optional).
*/
virtual void BeginCapture(FRHICommandListImmediate* InRHICommandList, uint32 InFlags = 0, FString const& InDestFileName = FString()) = 0;
/**
* Stop capturing rendering information and save the captured data.
* Call from render thread only.
*
* @param RHICommandList The command list to capture on.
*/
virtual void EndCapture(FRHICommandListImmediate* InRHICommandList) = 0;
};