void UCanvasRenderTarget2D::UpdateResource() { // Call parent implementation Super::UpdateResource(); // Don't allocate canvas object for CRT2D CDO if(IsTemplate()) { return; } // Create or find the canvas object to use to render onto the texture. Multiple canvas render target textures can share the same canvas. static const FName CanvasName( TEXT( "CanvasRenderTarget2DCanvas" ) ); UCanvas* Canvas = (UCanvas*)StaticFindObjectFast(UCanvas::StaticClass(), GetTransientPackage(), CanvasName ); if (Canvas == nullptr) { Canvas = ConstructObject<UCanvas>(UCanvas::StaticClass(), GetTransientPackage(), CanvasName ); Canvas->AddToRoot(); } Canvas->Init(GetSurfaceWidth(), GetSurfaceHeight(), nullptr); Canvas->Update(); // Update the resource immediately to remove it from the deferred resource update list. This prevents the texture // from being cleared each frame. UpdateResourceImmediate(); // Enqueue the rendering command to set up the rendering canvas. ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER ( CanvasRenderTargetMakeCurrentCommand, FTextureRenderTarget2DResource*, TextureRenderTarget, (FTextureRenderTarget2DResource*)GameThread_GetRenderTargetResource(), { SetRenderTarget(RHICmdList, TextureRenderTarget->GetRenderTargetTexture(), FTexture2DRHIRef()); RHICmdList.SetViewport(0, 0, 0.0f, TextureRenderTarget->GetSizeXY().X, TextureRenderTarget->GetSizeXY().Y, 1.0f); }
FString UMediaTexture::GetDesc() { return FString::Printf(TEXT("%dx%d [%s]"), GetSurfaceWidth(), GetSurfaceHeight(), GPixelFormats[PF_B8G8R8A8].Name); }