Added missing texture

This commit is contained in:
antopilo
2025-01-18 18:49:13 -05:00
parent 89ebc5d012
commit 745c6a1f32
2 changed files with 30 additions and 24 deletions

View File

@@ -55,7 +55,7 @@ namespace Nuake
Ref<Material> material = ResourceManager::GetResource<Material>(MaterialResource.ID);
if (!material)
{
assert(false && "material not found");
//assert(false && "material not found");
}
return material;

View File

@@ -178,32 +178,38 @@ void VkSceneRenderer::BeginScene(RenderContext inContext)
for (auto& m : modelResource->GetMeshes())
{
// TODO: Avoid duplicated materials
if (Ref<Material> material = m->GetMaterial(); material)
Ref<Material> material = m->GetMaterial();
if (!material)
{
auto missingTextureID = TextureManager::Get()->GetTexture2("missing_texture")->GetID();
MaterialBufferStruct materialBuffer
{
.HasAlbedo = material->HasAlbedo(),
.AlbedoColor = material->data.m_AlbedoColor,
.HasNormal = material->HasNormal(),
.HasMetalness = material->HasMetalness(),
.HasRoughness = material->HasRoughness(),
.HasAO = material->HasAO(),
.MetalnessValue = material->data.u_MetalnessValue,
.RoughnessValue = material->data.u_RoughnessValue,
.AoValue = material->data.u_AOValue,
.AlbedoTextureId = material->HasAlbedo() ? gpu.GetBindlessTextureID(material->AlbedoImage) : gpu.GetBindlessTextureID(missingTextureID),
.NormalTextureId = material->HasNormal() ? gpu.GetBindlessTextureID(material->NormalImage) : 0,
.MetalnessTextureId = material->HasMetalness() ? gpu.GetBindlessTextureID(material->MetalnessImage) : 0,
.RoughnessTextureId = material->HasRoughness() ? gpu.GetBindlessTextureID(material->RoughnessImage) : 0,
.AoTextureId = material->HasAO() ? gpu.GetBindlessTextureID(material->AOImage) : 0,
};
// insert missing material.
static Ref<Material> missingMaterial = CreateRef<Material>();
missingMaterial->AlbedoImage = TextureManager::Get()->GetTexture2("missing_texture")->GetID();
// Save bindless mapping index
allMaterials[currentMaterialIndex] = std::move(materialBuffer);
gpu.MeshMaterialMapping[m->GetVkMesh()->GetID()] = currentMaterialIndex;
currentMaterialIndex++;
material = missingMaterial;
}
MaterialBufferStruct materialBuffer
{
.HasAlbedo = material->HasAlbedo(),
.AlbedoColor = material->data.m_AlbedoColor,
.HasNormal = material->HasNormal(),
.HasMetalness = material->HasMetalness(),
.HasRoughness = material->HasRoughness(),
.HasAO = material->HasAO(),
.MetalnessValue = material->data.u_MetalnessValue,
.RoughnessValue = material->data.u_RoughnessValue,
.AoValue = material->data.u_AOValue,
.AlbedoTextureId = material->HasAlbedo() ? gpu.GetBindlessTextureID(material->AlbedoImage) : 0,
.NormalTextureId = material->HasNormal() ? gpu.GetBindlessTextureID(material->NormalImage) : 0,
.MetalnessTextureId = material->HasMetalness() ? gpu.GetBindlessTextureID(material->MetalnessImage) : 0,
.RoughnessTextureId = material->HasRoughness() ? gpu.GetBindlessTextureID(material->RoughnessImage) : 0,
.AoTextureId = material->HasAO() ? gpu.GetBindlessTextureID(material->AOImage) : 0,
};
// Save bindless mapping index
allMaterials[currentMaterialIndex] = std::move(materialBuffer);
gpu.MeshMaterialMapping[m->GetVkMesh()->GetID()] = currentMaterialIndex;
currentMaterialIndex++;
}
currentIndex++;