RealtimeStyleTransferRuntime/Plugins/PocketWorlds/Source/Public/PocketCapture.h

124 lines
3.2 KiB
C
Raw Permalink Normal View History

2022-05-23 18:41:30 +00:00
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
2022-09-13 07:18:28 +00:00
#include "Containers/Array.h"
#include "CoreTypes.h"
2022-05-23 18:41:30 +00:00
#include "Engine/EngineTypes.h"
2022-09-13 07:18:28 +00:00
#include "GameFramework/Actor.h"
#include "Misc/AssertionMacros.h"
#include "UObject/Object.h"
#include "UObject/UObjectGlobals.h"
#include "UObject/WeakObjectPtr.h"
#include "UObject/WeakObjectPtrTemplates.h"
2022-05-23 18:41:30 +00:00
#include "PocketCapture.generated.h"
class UMaterialInterface;
class UPocketCaptureSubsystem;
2022-09-13 07:18:28 +00:00
class UPrimitiveComponent;
class USceneCaptureComponent2D;
class UTextureRenderTarget2D;
class UWorld;
struct FFrame;
2022-05-23 18:41:30 +00:00
UCLASS(Abstract, Within=PocketCaptureSubsystem, BlueprintType, Blueprintable)
class POCKETWORLDS_API UPocketCapture : public UObject
{
GENERATED_BODY()
public:
UPocketCapture();
virtual void Initialize(UWorld* InWorld, int32 RendererIndex);
virtual void Deinitialize();
virtual void BeginDestroy() override;
UFUNCTION(BlueprintCallable)
void SetRenderTargetSize(int32 Width, int32 Height);
UFUNCTION(BlueprintCallable)
UTextureRenderTarget2D* GetOrCreateDiffuseRenderTarget();
UFUNCTION(BlueprintCallable)
UTextureRenderTarget2D* GetOrCreateAlphaMaskRenderTarget();
UFUNCTION(BlueprintCallable)
UTextureRenderTarget2D* GetOrCreateEffectsRenderTarget();
UFUNCTION(BlueprintCallable)
void SetCaptureTarget(AActor* InCaptureTarget);
UFUNCTION(BlueprintCallable)
void SetAlphaMaskedActors(const TArray<AActor*>& InCaptureTarget);
UFUNCTION(BlueprintCallable)
void CaptureDiffuse();
UFUNCTION(BlueprintCallable)
void CaptureAlphaMask();
UFUNCTION(BlueprintCallable)
void CaptureEffects();
UFUNCTION(BlueprintCallable)
virtual void ReleaseResources();
UFUNCTION(BlueprintCallable)
virtual void ReclaimResources();
UFUNCTION(BlueprintCallable)
int32 GetRendererIndex() const;
protected:
AActor* GetCaptureTarget() const { return CaptureTargetPtr.Get(); }
virtual void OnCaptureTargetChanged(AActor* InCaptureTarget) {}
bool CaptureScene(UTextureRenderTarget2D* InRenderTarget, const TArray<AActor*>& InCaptureActors, ESceneCaptureSource CaptureSource, UMaterialInterface* OverrideMaterial);
protected:
TArray<UPrimitiveComponent*> GatherPrimitivesForCapture(const TArray<AActor*>& InCaptureActors) const;
UPocketCaptureSubsystem* GetThumbnailSystem() const;
protected:
UPROPERTY(EditDefaultsOnly)
2022-09-13 07:18:28 +00:00
TObjectPtr<UMaterialInterface> AlphaMaskMaterial;
2022-05-23 18:41:30 +00:00
UPROPERTY(EditDefaultsOnly)
2022-09-13 07:18:28 +00:00
TObjectPtr<UMaterialInterface> EffectMaskMaterial;
2022-05-23 18:41:30 +00:00
protected:
UPROPERTY(Transient)
2022-09-13 07:18:28 +00:00
TObjectPtr<UWorld> PrivateWorld;
2022-05-23 18:41:30 +00:00
UPROPERTY(Transient)
int32 RendererIndex = INDEX_NONE;
UPROPERTY(VisibleAnywhere)
int32 SurfaceWidth = 1;
UPROPERTY(VisibleAnywhere)
int32 SurfaceHeight = 1;
UPROPERTY(VisibleAnywhere)
2022-09-13 07:18:28 +00:00
TObjectPtr<UTextureRenderTarget2D> DiffuseRT;
2022-05-23 18:41:30 +00:00
UPROPERTY(VisibleAnywhere)
2022-09-13 07:18:28 +00:00
TObjectPtr<UTextureRenderTarget2D> AlphaMaskRT;
2022-05-23 18:41:30 +00:00
UPROPERTY(VisibleAnywhere)
2022-09-13 07:18:28 +00:00
TObjectPtr<UTextureRenderTarget2D> EffectsRT;
2022-05-23 18:41:30 +00:00
UPROPERTY(VisibleAnywhere)
2022-09-13 07:18:28 +00:00
TObjectPtr<USceneCaptureComponent2D> CaptureComponent;
2022-05-23 18:41:30 +00:00
UPROPERTY(VisibleAnywhere)
TWeakObjectPtr<AActor> CaptureTargetPtr;
UPROPERTY(VisibleAnywhere)
TArray<TWeakObjectPtr<AActor>> AlphaMaskActorPtrs;
};