Your function does not make sense. It looks like a chatGPT slop.
You need to pass your renderer target as a pointer.
Your PlayerImage also should be a pointer.
There is no System::IsValid function just IsValid
header
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "MyUserWidget.generated.h"
class UImage;
/**
*
*/
UCLASS()
class YOUR_API UMyUserWidget : public UUserWidget
{
GENERATED_BODY()
UPROPERTY(meta = (BindWidget))
UImage* PlayerImage;
UFUNCTION(BlueprintCallable)
void SetImageFromRenderTarget(UTextureRenderTarget2D* RenderTarget);
UFUNCTION()
void SafeApplyFallback();
};
.cpp
#include "MyUserWidget.h"
#include "Engine/TextureRenderTarget2D.h"
#include "Components/Image.h"
#include "Materials/MaterialInstanceDynamic.h"
void UMyUserWidget::SafeApplyFallback()
{
// do fallback;
}
void UMyUserWidget::SetImageFromRenderTarget(UTextureRenderTarget2D* RenderTarget)
{
if (PlayerImage == nullptr || !IsValid(PlayerImage)) return;
UMaterialInstanceDynamic* Mat = PlayerImage->GetDynamicMaterial();
if (Mat == nullptr || !IsValid(Mat)) return;
if (RenderTarget == nullptr || !IsValid(RenderTarget))
{
SafeApplyFallback(); return;
}
Mat->SetTextureParameterValue("PlayerImageTex", RenderTarget);
}
Thank you for your reply. I’m using AngelScript, and the issue I’m encountering is that when switching graphics quality settings, a uniform buffer update occurs. During the update, it detects that my RenderTarget is invalid, and I suspect that the RenderTarget has been garbage collected (GC’d).