From 2fd9b4a62ace0014cad2b8f518a945022c69ab8b Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Tue, 3 Jun 2025 12:28:17 +0200 Subject: [PATCH] Fix loading models with no meshes --- Source/Editor/Windows/Assets/ModelBaseWindow.cs | 3 ++- Source/Engine/Content/Assets/Model.cpp | 4 ++-- Source/Engine/Content/Assets/SkinnedModel.cpp | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Source/Editor/Windows/Assets/ModelBaseWindow.cs b/Source/Editor/Windows/Assets/ModelBaseWindow.cs index 1214e9427..14344ef71 100644 --- a/Source/Editor/Windows/Assets/ModelBaseWindow.cs +++ b/Source/Editor/Windows/Assets/ModelBaseWindow.cs @@ -254,7 +254,8 @@ namespace FlaxEditor.Windows.Assets if (lodIndex >= countLODs - loadedLODs) { var mesh = lod.GetMesh(0); - vertexLayout = mesh.VertexLayout; + if (mesh != null) + vertexLayout = mesh.VertexLayout; if (vertexLayout != null && vertexLayout.Elements.Length != 0) break; vertexLayout = null; diff --git a/Source/Engine/Content/Assets/Model.cpp b/Source/Engine/Content/Assets/Model.cpp index 1f5768e6c..246bee3b4 100644 --- a/Source/Engine/Content/Assets/Model.cpp +++ b/Source/Engine/Content/Assets/Model.cpp @@ -324,7 +324,7 @@ bool Model::Init(const Span& meshesCountPerLod) lod.Link(this, lodIndex); lod.ScreenSize = 1.0f; const int32 meshesCount = meshesCountPerLod[lodIndex]; - if (meshesCount <= 0 || meshesCount > MODEL_MAX_MESHES) + if (meshesCount < 0 || meshesCount > MODEL_MAX_MESHES) return true; lod.Meshes.Resize(meshesCount); @@ -362,7 +362,7 @@ bool Model::LoadHeader(ReadStream& stream, byte& headerVersion) // Meshes uint16 meshesCount; stream.ReadUint16(&meshesCount); - if (meshesCount == 0 || meshesCount > MODEL_MAX_MESHES) + if (meshesCount > MODEL_MAX_MESHES) return true; ASSERT(lodIndex == 0 || LODs[0].Meshes.Count() >= meshesCount); lod.Meshes.Resize(meshesCount, false); diff --git a/Source/Engine/Content/Assets/SkinnedModel.cpp b/Source/Engine/Content/Assets/SkinnedModel.cpp index 5271df723..9ca530a53 100644 --- a/Source/Engine/Content/Assets/SkinnedModel.cpp +++ b/Source/Engine/Content/Assets/SkinnedModel.cpp @@ -476,7 +476,7 @@ bool SkinnedModel::Init(const Span& meshesCountPerLod) lod._lodIndex = lodIndex; lod.ScreenSize = 1.0f; const int32 meshesCount = meshesCountPerLod[lodIndex]; - if (meshesCount <= 0 || meshesCount > MODEL_MAX_MESHES) + if (meshesCount < 0 || meshesCount > MODEL_MAX_MESHES) return true; lod.Meshes.Resize(meshesCount);