Add async SDF generation for all meshes in the scene

This commit is contained in:
Wojtek Figat
2024-05-29 14:54:28 +02:00
parent 9258c234f2
commit 33d1c8c68c

View File

@@ -7,6 +7,7 @@ using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Runtime.InteropServices.Marshalling; using System.Runtime.InteropServices.Marshalling;
using System.Threading.Tasks;
using FlaxEditor.Content; using FlaxEditor.Content;
using FlaxEditor.Content.Settings; using FlaxEditor.Content.Settings;
using FlaxEditor.Content.Thumbnails; using FlaxEditor.Content.Thumbnails;
@@ -1338,20 +1339,33 @@ namespace FlaxEditor
/// </summary> /// </summary>
public void BuildAllMeshesSDF() public void BuildAllMeshesSDF()
{ {
// TODO: async maybe with progress reporting? var models = new List<Model>();
Scene.ExecuteOnGraph(node => Scene.ExecuteOnGraph(node =>
{ {
if (node is StaticModelNode staticModelNode && staticModelNode.Actor is StaticModel staticModel) if (node is StaticModelNode staticModelNode && staticModelNode.Actor is StaticModel staticModel)
{ {
if (staticModel.DrawModes.HasFlag(DrawPass.GlobalSDF) && staticModel.Model != null && !staticModel.Model.IsVirtual && staticModel.Model.SDF.Texture == null) var model = staticModel.Model;
if (staticModel.DrawModes.HasFlag(DrawPass.GlobalSDF) &&
model != null &&
!models.Contains(model) &&
!model.IsVirtual &&
model.SDF.Texture == null)
{ {
Log("Generating SDF for " + staticModel.Model); models.Add(model);
if (!staticModel.Model.GenerateSDF())
staticModel.Model.Save();
} }
} }
return true; return true;
}); });
Task.Run(() =>
{
for (int i = 0; i < models.Count; i++)
{
var model = models[i];
Log($"[{i}/{models.Count}] Generating SDF for {model}");
if (!model.GenerateSDF())
model.Save();
}
});
} }
#endregion #endregion