GetRenderTargetTexture() on GameViewport works in editor mode, but returns 0 in standalone

Ok, i made it work SOMEHOW.

.h file:


#pragma once

#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "UnrealClient.h"
#include "RQ_GameViewportClient.generated.h"

/**
 * 
 */
UCLASS()
class SCENARIOSYSTEM_API URQ_GameViewportClient : public UGameViewportClient
{
	GENERATED_BODY()

public:
	
	virtual void Draw(FViewport* InViewport, FCanvas* Canvas) override;

	void CopyViewportToRenderTarget(UTextureRenderTarget2D* RenderTarget);

	UPROPERTY()
	UTextureRenderTarget2D* MyRenderTarget;
	
	bool PendingCopyViewportToRenderTarget;


	void CopyTextureRHI(FRenderTarget* MyViewRenderTarget, UTextureRenderTarget2D* DestRenderTarget);
};

and .cpp file:

#include "Core/RQ_GameViewportClient.h"
#include "Engine/TextureRenderTarget2D.h"
#include "Slate/SceneViewport.h"


void URQ_GameViewportClient::Draw(FViewport* InViewport, FCanvas* Canvas)
{
	Super::Draw(Viewport, Canvas);
	
	if (InViewport && PendingCopyViewportToRenderTarget)
	{
		CopyTextureRHI(InViewport, MyRenderTarget);
	}
	
}

void URQ_GameViewportClient::CopyViewportToRenderTarget(UTextureRenderTarget2D* RenderTarget)
{
	MyRenderTarget = RenderTarget;
	PendingCopyViewportToRenderTarget = true;
}

void URQ_GameViewportClient::CopyTextureRHI(FRenderTarget* MyViewRenderTarget, UTextureRenderTarget2D* DestRenderTarget)
{
	

	ENQUEUE_RENDER_COMMAND(CopyToResolveTarget)(
		[MyViewRenderTarget, DestRenderTarget](FRHICommandListImmediate& RHICmdList)
		{
			FTexture2DRHIRef destTexture = DestRenderTarget->GetRenderTargetResource()->GetRenderTargetTexture();
			FResolveParams ResolveParams;
			RHICmdList.CopyToResolveTarget(MyViewRenderTarget->GetRenderTargetTexture(), destTexture, ResolveParams);
		});
	FlushRenderingCommands();
}

This this custom viewoirt client, so don’t forget to tell UE5 to use it in DefaultEngine.ini:

[/Script/Engine.Engine]
GameViewportClientClassName=/Script/ScenarioSystem.RQ_GameViewportClient

RenderTarget2D is using RTF_RGB10A2 pixel format

2 Likes