お世話になっております。
テクスチャーに関して質問があります。
以下の場合動的にテクスチャーを入れ替えてもDefaultで設定しているテクスチャーがメモリ上に残っています。
・Material Instance側のDefaultで設定したテクスチャー
・UMGのEditorでDefaultで設定したテクスチャー
テクスチャーの入れ替えは以下の関数を利用しております。
「UImage::SetBrushFromTexture」
例1)
・UMG Editorで日本版のテクスチャーをDefaultで設定。
・それをソースコード上で「UImage::SetBrushFromTexture」を利用して英語版のテクスチャーに入れ替える。
・Development パッケージでMemReport -Fullを利用してテクスチャーを確認。
・Defaultで設定したテクスチャーがまだ残っている。
例2)
・Material Instanceを作成してDefaultでテクスチャーを設定する。
・それをソースコード上で「UImage::SetBrushFromTexture」を利用して英語版のテクスチャーに入れ替える。
・Development パッケージでMemReport -Fullを利用してテクスチャーを確認。
・Defaultで設定したテクスチャーがまだ残っている。
テクスチャーを入れ替えて時Defaultの物がメモリ上に残らないようにする方法ってありますでしょうか?
以上となります。
よろしくお願いいたします。
お世話になっております。
こちらの件、問題の切り分けのためにいくつか確認させてください。
まず現在、動的に変更を行っているとのことですが、
これはランタイム上でテクスチャの変更を行っている状況でしょうか?
また、どのようなタイミングでSetBrushFromTextureを行っているか教えて頂けますと幸いです。
お手数をおかけしますが、よろしくお願いいたします。
ご返答ありがとうございます。
質問に関しては以下の返答になります。
これはランタイム上でテクスチャの変更を行っている状況でしょうか?
→ はい、そうです。
また、どのようなタイミングでSetBrushFromTextureを行っているか教えて頂けますと幸いです。
→ WidgetをAddViewportしたタイミングで行っています。
よろしくお願いいたします。
お世話になっております。
こちらの件に関しまして確認したところメモリ上に載せないように
変更することは仕様により難しい状況です。
Material Instanceの仕様としてMaterialの参照を持っており、
MaterialがDefaultのテクスチャの参照を持っている状況の場合、
参照を持っているものに関して事前にロードを行ってしまうことから、
差し替えたとしてもロードが行われている挙動かと思われます。
(ソフトリファレンスのように動的にロードを管理できる仕組みが無いため難しいです。)
そのため回避策としましては、Defaultで設定していただくテクスチャのサイズを
1×1のように小さくする、といった方法になります。
お手数おかけしますが、よろしくお願いいたします。