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.InteropServices;
using System.Runtime.InteropServices.Marshalling;
using System.Threading.Tasks;
using FlaxEditor.Content;
using FlaxEditor.Content.Settings;
using FlaxEditor.Content.Thumbnails;
@@ -1338,20 +1339,33 @@ namespace FlaxEditor
/// </summary>
public void BuildAllMeshesSDF()
{
// TODO: async maybe with progress reporting?
var models = new List<Model>();
Scene.ExecuteOnGraph(node =>
{
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);
if (!staticModel.Model.GenerateSDF())
staticModel.Model.Save();
models.Add(model);
}
}
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