-1

我被引用@J。Rehbein 的问题。 如何在 C++ 中动态更新 UTextureRenderTarget2D?

并使用公共模块(“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
     });
 }

}

4

2 回答 2

0
Texture->UpdateResource();
Texture->UpdateResourceImmediate(false);
于 2021-09-30T09:48:10.330 回答
0

我想改变 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);

谢谢你。

于 2021-10-09T16:02:04.287 回答