如何在 C++ 中更新 UTextureRenderTarget2D?

How do you update a UTextureRenderTarget2D in C++?

我被引用了@J。 Rehbein 的询问。 How do you update a UTextureRenderTarget2D dynamically in C++?

并使用public个模块(“Core”、“CoreUObject”、“Engine”、“InputCore”、“UMG”、“GameplayTasks”、“Landscape”、“RHI”、“RenderCore”) .

为什么打印断言失败日志?

如何解决断言失败的问题?

请各位老师

void AWorldCreator::BeginPlay()
{
 Super::BeginPlay();
 if (RenderTarget != nullptr) {
   RenderTarget->InitCustomFormat(Width, Height, PF_B8G8R8A8, true);

   auto region = FUpdateTextureRegion2D(0, 0, 0, 0, Width, Height);

   FTexture2DRHIRef TextureRHI = RenderTarget->GameThread_GetRenderTargetResource()->GetRenderTargetTexture();

   ENQUEUE_RENDER_COMMAND(UpdateTextureRegionsData)(
   [=](FRHICommandListImmediate& RHICmdList)
     {
       check(TextureRHI.IsValid());  // Assertion failed line
     });
 }

}

Texture->UpdateResource();
Texture->UpdateResourceImmediate(false);

我想更改 URenderTargetTexture2D 的纹理。我试过如何使用 2_DrawMaterial。 我对如何将 UMaterialInstanceDynamic 转换为 UMaterialInterface 感到困难。 所以,接下来尝试了如何使用ENQUEUE_RENDER_COMMAND。又被挡住了。 所以我发布了一个问题。 抱歉并感谢大家阅读我尴尬(奇怪?)的问题。

...

我在没有 ENQUEUE_RENDER_COMMAND 的情况下成功更新了 URenderTargetTexture2D。 我将 UMaterialInstanceDynamic 转换为 UMaterialInterface,想到了 UStaticMeshComponent。 我使用 UStaticMeshComponent 的函数(GetMaterial、SetMaterial)。

UMaterialInstanceDynamic* DynamicMaterial = UMaterialInstanceDynamic::Create(Material, GetWorld());
...
StaticMeshComponent->SetMaterial(0, DynamicMaterial);
...
canvas->K2_DrawMaterial(StaticMeshComponent->GetMaterial(0), Position, Size, CoordinatePosition);

谢谢。