Add Nahida model import and preview pipeline

This commit is contained in:
2026-04-11 20:16:49 +08:00
parent 8f71f99de4
commit 030230eb1f
87 changed files with 7245 additions and 117 deletions

View File

@@ -193,6 +193,32 @@ void MeshRendererComponent::SetMaterialPath(size_t index, const std::string& mat
}
}
void MeshRendererComponent::SetMaterialAssetRef(size_t index, const Resources::AssetRef& materialRef) {
EnsureMaterialSlot(index);
m_pendingMaterialLoads[index].reset();
m_asyncMaterialLoadRequested[index] = false;
m_materials[index].Reset();
m_materialPaths[index].clear();
m_materialRefs[index] = materialRef;
if (!m_materialRefs[index].IsValid()) {
return;
}
Containers::String resolvedPath;
if (Resources::ResourceManager::Get().TryResolveAssetPath(m_materialRefs[index], resolvedPath)) {
m_materialPaths[index] = ToStdString(resolvedPath);
}
if (Resources::ResourceManager::Get().IsDeferredSceneLoadEnabled()) {
return;
}
m_materials[index] = Resources::ResourceManager::Get().Load<Resources::Material>(m_materialRefs[index]);
if (m_materials[index].Get() != nullptr && m_materialPaths[index].empty()) {
m_materialPaths[index] = MaterialPathFromHandle(m_materials[index]);
}
}
void MeshRendererComponent::SetMaterial(size_t index, const Resources::ResourceHandle<Resources::Material>& material) {
EnsureMaterialSlot(index);
m_pendingMaterialLoads[index].reset();
@@ -445,7 +471,8 @@ void MeshRendererComponent::ResolvePendingMaterials() {
}
m_materialPaths[index] = MaterialPathFromHandle(m_materials[index]);
if (!Resources::ResourceManager::Get().TryGetAssetRef(m_materialPaths[index].c_str(),
if (!m_materialRefs[index].IsValid() &&
!Resources::ResourceManager::Get().TryGetAssetRef(m_materialPaths[index].c_str(),
Resources::ResourceType::Material,
m_materialRefs[index])) {
m_materialRefs[index].Reset();