SRetainerBox 的 bNeedsPrepass 一直是 true 导致每帧 FSlateInvalidationRoot 全量失效

您好

SRetainerWidget::CustomPrepass 的 NeedsPrepass() 永远为 true,导致有 SRetainerBox 的界面 FSlateInvalidationRoot::SetNeedsSlowPath​ 每帧被调用。导致 FSlateInvalidationRoot::ClearAllFastPathData 每帧都会被调用。导致整个界面中的所有 SWidget 失效。​

我们这里 SRetainerBox 只针对下图中“机械启元”四个字的图片进行使用了。是否不满足 RetainerBox 的设计初衷?

[Image Removed]

RetainerBox 是不是就是覆盖整个场景,每帧全场景 Invalidate?这是 RetainerBox 的设计初衷吗?还是我理解的不对?还是有实现上的问题?​

重现步骤

RetainerBox 从机制上说就是把稳定的画面渲染到一张贴图上,然后在之后的渲染里跳过控件的OnPaint直接渲染这张RenderTarget,但是这要求在Retainer Box里的控件不能有材质或者位置的变化,Retainer Box的Parents里也不能有坐标的变化,否则就会失效。不知道您这边是否存在这两种情况。如果是父控件中有坐标变化的情况,可以考虑把这个Retainer Box重新锚定到稳定的父控件上。