From ec9cbcf18b220e74e00fee699dd0e6d62d665156 Mon Sep 17 00:00:00 2001 From: antopilo Date: Wed, 22 Jan 2025 22:18:12 -0500 Subject: [PATCH] Fixed runtime compilation + GLTF material baking --- Nuake/src/Rendering/Mesh/Mesh.cpp | 4 +++- Nuake/src/Rendering/Mesh/Mesh.h | 2 +- Nuake/src/Rendering/Textures/Material.h | 23 ++++++++++++++++++----- Nuake/src/Resource/Bakers/GLTFBaker.cpp | 24 +++++++++++++++++++----- Nuake/src/Resource/RID.h | 1 + premake5.lua | 5 +++++ project.4coder | 12 +++++++++--- 7 files changed, 56 insertions(+), 15 deletions(-) diff --git a/Nuake/src/Rendering/Mesh/Mesh.cpp b/Nuake/src/Rendering/Mesh/Mesh.cpp index c151961e..8d4b3ab6 100644 --- a/Nuake/src/Rendering/Mesh/Mesh.cpp +++ b/Nuake/src/Rendering/Mesh/Mesh.cpp @@ -57,8 +57,10 @@ namespace Nuake return m_Indices; } - Ref Mesh::GetMaterial() const + Ref Mesh::GetMaterial() { + return MaterialResource.Get(); + Ref material = ResourceManager::GetResource(MaterialResource.ID); if (!material) { diff --git a/Nuake/src/Rendering/Mesh/Mesh.h b/Nuake/src/Rendering/Mesh/Mesh.h index 14d330ed..31d30944 100644 --- a/Nuake/src/Rendering/Mesh/Mesh.h +++ b/Nuake/src/Rendering/Mesh/Mesh.h @@ -29,7 +29,7 @@ namespace Nuake std::vector& GetVertices(); std::vector& GetIndices(); - Ref GetMaterial() const; + Ref GetMaterial(); void SetMaterial(Ref material); void Bind() const; diff --git a/Nuake/src/Rendering/Textures/Material.h b/Nuake/src/Rendering/Textures/Material.h index b8ab77bc..ef4d4320 100644 --- a/Nuake/src/Rendering/Textures/Material.h +++ b/Nuake/src/Rendering/Textures/Material.h @@ -61,12 +61,12 @@ namespace Nuake } public: UUID AlbedoImage = UUID(0); - UUID AOImage; - UUID MetalnessImage; - UUID RoughnessImage; - UUID NormalImage; + UUID AOImage = UUID(0); + UUID MetalnessImage = UUID(0); + UUID RoughnessImage = UUID(0); + UUID NormalImage = UUID(0); - Ref m_Albedo; + Ref m_Albedo; Ref m_AO; Ref m_Metalness; Ref m_Roughness; @@ -130,6 +130,14 @@ namespace Nuake j["Path"] = Path; j["UUID"] = static_cast(ID); j["HasAlbedo"] = this->HasAlbedo(); + + // new UUID + if (AlbedoImage != 0) + { + j["AlbedoImage"] = static_cast(AlbedoImage); + } + // TODO others. + if (HasAlbedo()) { j["Albedo"] = this->m_Albedo->Serialize(); @@ -176,6 +184,11 @@ namespace Nuake { ID = static_cast(j["UUID"]); + if (j.contains("AlbedoImage")) + { + AlbedoImage = static_cast(j["AlbedoImage"]); + } + if (j.contains("Albedo")) { const auto& texturePath = j["Albedo"]["Path"]; diff --git a/Nuake/src/Resource/Bakers/GLTFBaker.cpp b/Nuake/src/Resource/Bakers/GLTFBaker.cpp index e14bed5c..b82a4710 100644 --- a/Nuake/src/Resource/Bakers/GLTFBaker.cpp +++ b/Nuake/src/Resource/Bakers/GLTFBaker.cpp @@ -60,29 +60,43 @@ Ref GLTFBaker::Bake(const Ref& file) if(!materialData.albedo.empty()) { - material->SetAlbedo(materialData.albedo); + material->SetAlbedo(absolutePath + "/../" + materialData.albedo); } if(!materialData.normal.empty()) { - material->SetNormal(materialData.normal); + material->SetNormal(absolutePath + "/../" + materialData.normal); } if(!materialData.ao.empty()) { - material->SetAO(materialData.ao); + material->SetAO(absolutePath + "/../" + materialData.ao); } if(!materialData.metallic.empty()) { - material->SetMetalness(materialData.metallic); + material->SetMetalness(absolutePath + "/../" + materialData.metallic); } if(!materialData.roughness.empty()) { - material->SetRoughness(materialData.roughness); + material->SetRoughness(absolutePath + "/../" + materialData.roughness); } + std::string materialPath; + if(!materialData.albedo.empty()) + { + materialPath = file->GetRelativePath() + "." + materialData.albedo + ".material"; + } + ResourceManager::RegisterResource(material); + ResourceManager::Manifest.RegisterResource(material->ID, materialPath); + + std::string materialJson = material->Serialize().dump(4); + FileSystem::BeginWriteFile(materialPath); + FileSystem::WriteLine(materialJson); + FileSystem::EndWriteFile(); + + mesh->MaterialResource = RID(material->ID); model->AddMesh(std::move(mesh)); } diff --git a/Nuake/src/Resource/RID.h b/Nuake/src/Resource/RID.h index 8094c4df..fa9b40be 100644 --- a/Nuake/src/Resource/RID.h +++ b/Nuake/src/Resource/RID.h @@ -7,6 +7,7 @@ namespace Nuake { class Resource; + class RID { public: diff --git a/premake5.lua b/premake5.lua index 4e96f688..9f8bad94 100644 --- a/premake5.lua +++ b/premake5.lua @@ -288,6 +288,9 @@ project "NuakeRuntime" "%{prj.name}/../Nuake/dependencies/freetype/include", "%{prj.name}/../Nuake/dependencies/tracy/public/tracy", "%{prj.name}/../Nuake/dependencies/entt/src", + "%{prj.name}/../Nuake/src/Vendors/vulkan", + "%{prj.name}/../Nuake/src/Vendors/volk", + "%{prj.name}/../Nuake/dependencies/vma/include" } libdirs @@ -341,9 +344,11 @@ project "NuakeRuntime" externalincludedirs { "%{prj.name}/../Nuake/dependencies/Coral/Coral.Native/Include/" } + --[[ postbuildcommands { '{COPYFILE} "%{wks.location}/Nuake/dependencies/Coral/Coral.Managed/Coral.Managed.runtimeconfig.json" "%{wks.location}/%{prj.name}"' } + ]]-- filter { "system:windows", "action:vs*" } flags diff --git a/project.4coder b/project.4coder index 196e3483..e2099d49 100644 --- a/project.4coder +++ b/project.4coder @@ -24,11 +24,17 @@ load_paths = { { {"."}, .recursive = false, .relative = true }, .os = "win" }, { - { {"Nuake"}, .recursive = false, .relative = true }, .os = "win" + { {"Nuake/src"}, .recursive = true, .relative = true }, .os = "win" }, { - { {"Nuake/src"}, .recursive = true, .relative = true }, .os = "win" - } + { {"Editor/src"}, .recursive = true, .relative = true }, .os = "win" + }, + { + { {"NuakeNet/src"}, .recursive = true, .relative = true }, .os = "win" + }, + { + { {"Runtime"}, .recursive = true, .relative = true }, .os = "win" + } }; command_list = {