diff --git a/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp b/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp index 464e5d6c..9a2a7c9b 100644 --- a/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp +++ b/src/ObjLoading/Game/T6/XModel/JsonXModelLoader.cpp @@ -469,14 +469,27 @@ namespace lodInfo.surfIndex = static_cast(m_surfaces.size()); lodInfo.numsurfs = static_cast(common->m_objects.size()); + std::vector materialAssets; + materialAssets.reserve(common->m_materials.size()); + for (const auto& commonMaterial : common->m_materials) + { + auto* assetInfo = m_manager.LoadDependency(commonMaterial.name); + if (!assetInfo) + return false; + + m_dependencies.emplace(assetInfo); + materialAssets.push_back(assetInfo->Asset()); + } + return std::ranges::all_of(common->m_objects, - [this, &common](const XModelObject& commonObject) + [this, &common, &materialAssets](const XModelObject& commonObject) { XSurface surface{}; if (!CreateXSurface(surface, commonObject, *common)) return false; m_surfaces.emplace_back(surface); + m_materials.push_back(materialAssets[commonObject.materialIndex]); return true; }); } @@ -521,7 +534,9 @@ namespace xmodel.numsurfs = static_cast(m_surfaces.size()); xmodel.surfs = m_memory.Alloc(xmodel.numsurfs); + xmodel.materialHandles = m_memory.Alloc(xmodel.numsurfs); memcpy(xmodel.surfs, m_surfaces.data(), sizeof(XSurface) * xmodel.numsurfs); + memcpy(xmodel.materialHandles, m_materials.data(), sizeof(Material*) * xmodel.numsurfs); CalculateModelBounds(xmodel); @@ -579,6 +594,7 @@ namespace } std::vector m_surfaces; + std::vector m_materials; std::istream& m_stream; MemoryManager& m_memory;