From 3fc69890e4fd275f0ee790e45b5c3de3be3ce202 Mon Sep 17 00:00:00 2001 From: XiaoQiDigipen <72735604+XiaoQiDigipen@users.noreply.github.com> Date: Thu, 30 Mar 2023 14:24:21 +0800 Subject: [PATCH] Revert "Merge pull request #446 from SHADE-DP/Fix-ResourceHubCrashOnExit" This reverts commit 5ab7cbe5f36379d26db817666a796f257035afa0. --- .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 53 +++++++++---------- .../MiddleEnd/Interface/SHGraphicsSystem.h | 2 +- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 4738b70c..21b08829 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -216,13 +216,13 @@ namespace SHADE } // Get render graph from default viewport world renderer - renderGraph = resourceManager->Create(); + renderGraph = resourceManager.Create(); /*-----------------------------------------------------------------------*/ /* WORLD RENDER GRAPH RESOURCES */ /*-----------------------------------------------------------------------*/ // Initialize world render graph - renderGraph->Init("World Render Graph", device, swapchain, resourceManager, renderContextCmdPools); + renderGraph->Init("World Render Graph", device, swapchain, &resourceManager, renderContextCmdPools); renderGraph->AddResource("Position", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, true, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); renderGraph->AddResource("Position World Space", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, true, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); renderGraph->AddResource("Object VFX", { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT, SH_RENDER_GRAPH_RESOURCE_FLAGS::STORAGE }, true, windowDims.first, windowDims.second, vk::Format::eR32G32B32A32Sfloat); @@ -292,7 +292,7 @@ namespace SHADE /*-----------------------------------------------------------------------*/ /* SSAO PASS AND DATA INIT */ /*-----------------------------------------------------------------------*/ - ssaoStorage = resourceManager->Create(); + ssaoStorage = resourceManager.Create(); // command buffer operation to transfer data for ssao ssaoTransferCmdBuffer = graphicsCmdPool->RequestCommandBuffer(SH_CMD_BUFFER_TYPE::PRIMARY); @@ -475,7 +475,7 @@ namespace SHADE void SHGraphicsSystem::InitSubsystems(void) noexcept { - mousePickSubSystem = resourceManager->Create(); + mousePickSubSystem = resourceManager.Create(); std::vector> cmdPools; cmdPools.reserve(swapchain->GetNumImages()); @@ -486,28 +486,28 @@ namespace SHADE mousePickSubSystem->Init(device, cmdPools, renderGraph->GetRenderGraphResource("Entity ID")); // Register the post offscreen render to the system - postOffscreenRenderSubSystem = resourceManager->Create(); + postOffscreenRenderSubSystem = resourceManager.Create(); postOffscreenRenderSubSystem->Init(device, renderGraph->GetRenderGraphResource("Scene"), descPool); - lightingSubSystem = resourceManager->Create(); - lightingSubSystem->Init(device, descPool, resourceManager, samplerCache.GetSampler (device, SHVkSamplerParams + lightingSubSystem = resourceManager.Create(); + lightingSubSystem->Init(device, descPool, &resourceManager, samplerCache.GetSampler (device, SHVkSamplerParams { .addressMode = vk::SamplerAddressMode::eClampToBorder, }) ); - textRenderingSubSystem = resourceManager->Create(); + textRenderingSubSystem = resourceManager.Create(); // initialize the text renderer auto uiNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data()); textRenderingSubSystem->Init(device, uiNode->GetRenderpass(), uiNode->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::UI_TRANSLUCENT_SUBPASS), descPool, textVS, textFS); - trajectoryRenderingSubSystem = resourceManager->Create(); + trajectoryRenderingSubSystem = resourceManager.Create(); auto vfxPass = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data()); // particle sub system initialization - particleSubSystem = resourceManager->Create(); + particleSubSystem = resourceManager.Create(); particleSubSystem->Init(device, descPool, vfxPass->GetRenderpass(), vfxPass->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::VFX_SUBPASS), particleVS, particleFS, particleEmitCS, particleUpdateCS); auto vfxNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data()); @@ -608,9 +608,6 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ void SHGraphicsSystem::Init(void) { - // Create resource manager - resourceManager = new SHResourceHub(); - InitBoilerplate(); InitMiddleEnd(); InitSubsystems(); @@ -870,7 +867,7 @@ namespace SHADE } // Create the renderer - auto renderer = resourceManager->Create(device, swapchain->GetNumImages(), descPool, projectionType); + auto renderer = resourceManager.Create(device, swapchain->GetNumImages(), descPool, projectionType); // Store renderers.emplace_back(renderer); @@ -914,7 +911,7 @@ namespace SHADE // Create new renderer for the light component and give it to the light component - Handle newRenderer = resourceManager->Create(device, swapchain->GetNumImages(), descPool, SHRenderer::PROJECTION_TYPE::ORTHOGRAPHIC); + Handle newRenderer = resourceManager.Create(device, swapchain->GetNumImages(), descPool, SHRenderer::PROJECTION_TYPE::ORTHOGRAPHIC); lightComp->SetRenderer(newRenderer); // Add the shadow map resource to the graph @@ -1061,7 +1058,7 @@ namespace SHADE auto shaderPair = std::make_pair(vertShader, fragShader); // Create material - auto mat = resourceManager->Create(); + auto mat = resourceManager.Create(); auto renderGraphNode = subpass->GetParentNode(); auto pipeline = renderGraphNode->GetOrCreatePipeline(std::make_pair(vertShader, fragShader), subpass); @@ -1075,12 +1072,12 @@ namespace SHADE void SHGraphicsSystem::RemoveMaterial(Handle material) { - resourceManager->Free(material); + resourceManager.Free(material); } Handle SHGraphicsSystem::AddOrGetBaseMaterialInstance(Handle material) { - return materialInstanceCache.CreateOrGet(*resourceManager, material); + return materialInstanceCache.CreateOrGet(resourceManager, material); } SHADE::Handle SHGraphicsSystem::AddOrGetBaseMaterialInstance() @@ -1090,17 +1087,17 @@ namespace SHADE SHADE::Handle SHGraphicsSystem::AddMaterialInstanceCopy(Handle materialInst) { - return resourceManager->Create(materialInst->GetBaseMaterial()); + return resourceManager.Create(materialInst->GetBaseMaterial()); } std::pair, typename SHResourceHub::dense_iterator> SHGraphicsSystem::GetAllMaterialInstances() { - return resourceManager->GetDenseAccess(); + return resourceManager.GetDenseAccess(); } void SHGraphicsSystem::RemoveMaterialInstance(Handle materialInstance) { - resourceManager->Free(materialInstance); + resourceManager.Free(materialInstance); } /*---------------------------------------------------------------------------------*/ @@ -1192,12 +1189,12 @@ namespace SHADE /*---------------------------------------------------------------------------------*/ Handle SHGraphicsSystem::AddFont(SHFontAsset const& fontAsset) noexcept { - return fontLibrary.AddFont(device, *resourceManager, fontAsset); + return fontLibrary.AddFont(device, resourceManager, fontAsset); } void SHGraphicsSystem::BuildFonts(void) noexcept { - fontLibrary.BuildFonts(device, graphicsQueue, graphicsCmdPool, descPool, SHGraphicsPredefinedData::GetPredefinedDescSetLayouts(SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::FONT)[0], *resourceManager); + fontLibrary.BuildFonts(device, graphicsQueue, graphicsCmdPool, descPool, SHGraphicsPredefinedData::GetPredefinedDescSetLayouts(SHGraphicsPredefinedData::PredefinedDescSetLayoutTypes::FONT)[0], resourceManager); } #pragma endregion ADD_REMOVE @@ -1241,7 +1238,7 @@ namespace SHADE // Reset all material isDirty auto gfxSystem = reinterpret_cast(system); - auto [matBegin, matEnd] = gfxSystem->resourceManager->GetDenseAccess(); + auto [matBegin, matEnd] = gfxSystem->resourceManager.GetDenseAccess(); for (auto iter = matBegin; iter != matEnd; ++iter) { iter->ClearChangeFlag(); @@ -1259,7 +1256,7 @@ namespace SHADE // Clean up and update all materials auto gfxSystem = reinterpret_cast(system); - auto [matInstBegin, matInstEnd] = gfxSystem->resourceManager->GetDenseAccess(); + auto [matInstBegin, matInstEnd] = gfxSystem->resourceManager.GetDenseAccess(); for (auto iter = matInstBegin; iter != matInstEnd; ++iter) { auto baseMat = iter->GetBaseMaterial(); @@ -1312,7 +1309,7 @@ namespace SHADE // Unset all material old pipeline since we would have finished processing auto gfxSystem = reinterpret_cast(system); - auto [matBegin, matEnd] = gfxSystem->resourceManager->GetDenseAccess(); + auto [matBegin, matEnd] = gfxSystem->resourceManager.GetDenseAccess(); for (auto iter = matBegin; iter != matEnd; ++iter) { iter->ForgetOldPipeline(); @@ -1452,7 +1449,7 @@ namespace SHADE Handle SHGraphicsSystem::createDebugDrawPipeline(Handle renderPass, Handle subpass, bool filled, bool triMesh, bool instanced) { - auto pipelineLayout = resourceManager->Create + auto pipelineLayout = resourceManager.Create ( device, SHPipelineLayoutParams { @@ -1460,7 +1457,7 @@ namespace SHADE .predefinedDescSetLayouts = SHGraphicsPredefinedData::GetSystemData(SHGraphicsPredefinedData::SystemType::BATCHING).descSetLayouts } ); - auto pipeline = resourceManager->Create(device, pipelineLayout, nullptr, renderPass, subpass); + auto pipeline = resourceManager.Create(device, pipelineLayout, nullptr, renderPass, subpass); pipeline->GetPipelineState().SetRasterizationState(SHRasterizationState { .polygonMode = filled ? vk::PolygonMode::eFill : vk::PolygonMode::eLine, diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index aff756cd..3d0b3cc6 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -440,7 +440,7 @@ namespace SHADE SHWindow* window = nullptr; // Middle End Resources - SHResourceHub* resourceManager; + SHResourceHub resourceManager; SHMeshLibrary meshLibrary; SHTextureLibrary texLibrary; SHGraphicsGenericData graphicsGenericData;