4.25 TextRenderActor Assert on Load

In 4.25, having textrenderactors in levels causes asserts while loading

One of the task graph threads gets this assert
FMICReentranceGuard(const UMaterialInstance* InMaterial)
{
Material = const_cast<UMaterialInstance*>(InMaterial);

	check(IsInRenderingThread() || IsInGameThread() || IsAsyncLoading() || GIsSavingPackage);

For our workaround, we deleted the text renderers in the levels

Here is the full callstack

FMICReentranceGuard::FMICReentranceGuard(const UMaterialInstance * InMaterial) Line 39
UMaterialInstance::GetMaterial() Line 657
FTextRenderSceneProxy::FTextRenderSceneProxy(UTextRenderComponent * Component) Line 660
UTextRenderComponent::CreateSceneProxy() Line 1096
UE4Editor-Renderer-Win64-Debug.dll!FScene::AddPrimitive(UPrimitiveComponent * Primitive) Line 1291
FRegisterComponentContext::Process::__l2::(int Index) Line 92
UE4Function_Private::TFunctionRefCaller(int),void __cdecl(int)>::Call(void * Obj, int & ) Line 549
ParallelForImpl::TParallelForData>::Process(int TasksToSpawn, TSharedRef>,1> & Data, bool bMaster) Line 172
ParallelForImpl::TParallelForTask>::DoTask(ENamedThreads::Type CurrentThread, const TRefCountPtr & MyCompletionGraphEvent) Line 126
TGraphTask>>::ExecuteTask(TArray> & NewTasks, ENamedThreads::Type CurrentThread) Line 849
FTaskThreadAnyThread::ProcessTasks() Line 1039
FTaskThreadAnyThread::ProcessTasksUntilQuit(int QueueIndex) Line 863
FTaskThreadBase::Run() Line 529
FTaskThreadAnyThread::Run() Line 941
FRunnableThreadWin::Run() Line 84
FRunnableThreadWin::GuardedRun() Line 27
FRunnableThreadWin::_ThreadProc(void * pThis) Line 36

Please advise:
Is this a clear bug that has a good chance of getting fixed soon?
Is there another workaround we should consider?

Seeing the same thing (4.25.1) when I launch a Standalone Game, or server travel to a level in a packaged build - happens if a TextRenderComponent has a material instance (rather than a material) set as its text material. I filed an issue.

For a temp fix, in FRegisterComponentContext::Process() change !FApp::ShouldUseThreadingForPerformance() to true to prevent moving this work to a worker thread seems to fix it… not sure if there will be any undesirable side effects

I assumed we got the answer on UDN, but it was the other way around. Thanks Eric!

From Epic’s response on UDN, they aren’t prioritizing supporting TextRenderActors:

Sorry for the delay, but I’m glad you got an answer that was helpful! If their solution works for you, I’ll write it down as a possible fix for these issues in the future.

A suggestion I would also add is whether utilizing a UMG widget with text boxes would better fit your needs. You can find some tutorials for them here: UMG UI Designer - How To | Unreal Engine Documentation. While widgets have a little more overhead than TextRenderActors, they are much more stable and flexible. Currently changes to TextRenderActors is considered low priority, as widgets can accomplish much of the same functionality on a more consistent basis.

Thank you for taking the time to report this issue, and let us know if either of these solutions fail to fix your problem.

Thanks for the info. Also found this Unreal Engine Issues and Bug Tracker (UE-42454) which sounds like the same underlying issue, it looks like a fix is targeted for 4.26.