お世話になっております。
特定プラットフォームにおいて、
UE5.6.1 で 以下のようなフォントキャッシュフラッシュのログ
LogSlate: Warning: FontCache flush requested. Reason: Large atlases out of space; 2/1 Textures; frames since last flush: 1541
LogSlate: InvalidateAllWidgets triggered. All widgets were invalidated
LogSlate: Slate font cache was flushed
が確認された際に、非常に低い確率ではありますがGPUクラッシュが発生しており、
発生時は Slate のフォント描画するバッチの中の一部で
フォント部分に該当するところがNULLになっておりました。
また、クラッシュする直前に一部UI上のフォントが消えているような動作も確認されています
Global Invalidationを有効にしており、
更新が必要ないウィジェットの更新処理は毎フレーム実行されないという認識ですが、
このフォントキャッシュのフラッシュによるテクスチャ状況の変化する処理に対して
フォントが使われている箇所の再構成はGlobal Invalidationが有効であっても正しくされるでしょうか?
とりあえず、Slate.MaxFontAtlasPagesBeforeFlushの値を増やすことでクラッシュ自体は回避できてはおります。
ただプレイを続けることで超過などしないかなども心配しており、
安全にロード画面時などにフラッシュする方法などがあれば知りたいです。
[Attachment Removed]
こちら訂正します キャッシュを増やしてフォントキャッシュフラッシュを起きなくしても、
新しく大きなフォントが投入された再に すでに表示されていた文字が壊れてクラッシュすることがありました。
(クラッシュするケースは同様にフォントにあたるテクスチャが不正な内容となっていました)
[Attachment Removed]
お世話になっております。
本件確認させていただいておりますが、現状頂いている情報から関連が考えられる問題としましては以下スレッドがございました。
こちらLoading画面等によるSlate、Task ThreadからのFont Cacheのアクセスが懸念されていますが直接解決には至っていない状況でして、クラッシュ時のコールスタック等がありましたらご提示頂けますと幸いです。
[Content removed]
またFont Cache FlushとGlobal Invalidationの組み合わせによる問題に関しても現状は確認できておりませんが、FlushCacheが行われるとFontCacheとWidgetのInvalidationによるヒッチの原因にもなってしまうため、理想としてはFlushしないように不必要なものがないか見直して頂く、または既にお試し頂いているようなSlate.MaxFontAtlasPagesBeforeFlush設定によってFlushを防いで頂く事が望ましいかと思われます。
※エディタのWidget Reflector->Font Atlas VisualizerやSlate.DumpFontCacheStats 1の出力で利用状況が確認できます。
意図したアトラスのリセットについては、Slate.FlushFontCache 1が用意されておりますが、こちらデフォルトではUE_BUILD_SHIPPING以外の動作となっているため、エンジン修正を行い対応頂くか、FSlateFontCache::RequestFlushCache(const FString& FlushReason)を直接呼び出して頂く形になるかと思います。
お手数おかけしますが、クラッシュ時のコールスタック及びフォントアトラスの利用状況をご確認頂けますと幸いです。
よろしくお願いいたします。
[Attachment Removed]