Renderer: Add release queue to fix deletion while use

This commit is contained in:
Jérôme Leclercq
2021-05-14 02:04:47 +02:00
parent 51ecff2912
commit f280cff0a2
13 changed files with 163 additions and 15 deletions

View File

@@ -74,7 +74,7 @@ namespace Nz
std::shared_ptr<VulkanDevice> m_device;
std::size_t m_currentFrame;
std::vector<Vk::Fence*> m_inflightFences;
std::vector<VulkanRenderImage> m_concurrentImageData;
std::vector<std::unique_ptr<VulkanRenderImage>> m_concurrentImageData;
Vk::DeviceMemory m_depthBufferMemory;
Vk::Image m_depthBuffer;
Vk::ImageView m_depthBufferView;

View File

@@ -36,13 +36,13 @@ namespace Nz
inline Vk::Semaphore& GetRenderFinishedSemaphore();
VulkanUploadPool& GetUploadPool() override;
void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) override;
void SubmitCommandBuffer(VkCommandBuffer commandBuffer, QueueTypeFlags queueTypeFlags);
void Present() override;
inline void Reset(UInt32 imageIndex);
void SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags) override;
void SubmitCommandBuffer(VkCommandBuffer commandBuffer, QueueTypeFlags queueTypeFlags);
VulkanRenderImage& operator=(const VulkanRenderImage&) = delete;
VulkanRenderImage& operator=(VulkanRenderImage&&) = delete;

View File

@@ -7,7 +7,7 @@
namespace Nz
{
inline Vk::Fence& Nz::VulkanRenderImage::GetInFlightFence()
inline Vk::Fence& VulkanRenderImage::GetInFlightFence()
{
return m_inFlightFence;
}
@@ -29,6 +29,8 @@ namespace Nz
inline void VulkanRenderImage::Reset(UInt32 imageIndex)
{
FlushReleaseQueue();
m_graphicalCommandsBuffers.clear();
m_currentCommandBuffer = 0;
m_imageIndex = imageIndex;