Просмотр исходного кода

Vulkan: Fixing remanining issues relating to shutdown

BearishSun 9 лет назад
Родитель
Сommit
828c0e6fdc

+ 7 - 1
Source/BansheeVulkanRenderAPI/Source/BsVulkanDescriptorManager.cpp

@@ -83,8 +83,11 @@ namespace bs
 			bs_free(entry.bindings);
 		}
 
-		for(auto& entry : mPipelineLayouts)
+		for (auto& entry : mPipelineLayouts)
+		{
+			bs_free(entry.first.layouts);
 			vkDestroyPipelineLayout(mDevice.getLogical(), entry.second, gVulkanAllocator);
+		}
 
 		for (auto& entry : mPools)
 			bs_delete(entry);
@@ -165,6 +168,9 @@ namespace bs
 
 		bs_stack_free(setLayouts);
 
+		key.layouts = (VulkanDescriptorLayout**)bs_alloc(sizeof(VulkanDescriptorLayout*) * numLayouts);
+		memcpy(key.layouts, layouts, sizeof(VulkanDescriptorLayout*) * numLayouts);
+
 		mPipelineLayouts.insert(std::make_pair(key, pipelineLayout));
 		return pipelineLayout;
 	}

+ 12 - 3
Source/RenderBeast/Source/BsRenderBeast.cpp

@@ -406,9 +406,10 @@ namespace bs
 		RendererCamera* output;
 
 		SPtr<RenderTargetCore> renderTarget = camera->getViewport()->getTarget();
+
+		auto iterFind = mCameras.find(camera);
 		if(forceRemove)
 		{
-			auto iterFind = mCameras.find(camera);
 			if(iterFind != mCameras.end())
 			{
 				bs_delete(iterFind->second);
@@ -420,8 +421,16 @@ namespace bs
 		}
 		else
 		{
-			output = bs_new<RendererCamera>(camera, mCoreOptions->stateReductionMode);
-			mCameras[camera] = output;
+			if (iterFind != mCameras.end())
+			{
+				output = iterFind->second;
+				output->update(mCoreOptions->stateReductionMode);
+			}
+			else
+			{
+				output = bs_new<RendererCamera>(camera, mCoreOptions->stateReductionMode);
+				mCameras[camera] = output;
+			}
 		}
 
 		// Remove from render target list