Fix frame resources
This commit is contained in:
parent
f16e8b2aab
commit
bbd18bbec2
1 changed files with 32 additions and 28 deletions
|
@ -66,8 +66,8 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
|
|||
|
||||
target->currentResource = (target->imageIndex + 1) % numFrameResources;
|
||||
|
||||
vkWaitForFences(device_, 1, &target->fences[target->currentResource], VK_TRUE, UINT64_MAX);
|
||||
vkResetFences(device_, 1, &target->fences[target->currentResource]);
|
||||
vkWaitForFences(device_, 1, &target->fences[target->imageIndex], VK_TRUE, UINT64_MAX);
|
||||
vkResetFences(device_, 1, &target->fences[target->imageIndex]);
|
||||
|
||||
VkCommandBuffer commandBuffer = target->commandBuffers[target->currentResource];
|
||||
|
||||
|
@ -118,7 +118,7 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
|
|||
|
||||
renderPassBeginInfo = {};
|
||||
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
renderPassBeginInfo.framebuffer = target->swapchainFramebuffers[target->currentResource];
|
||||
renderPassBeginInfo.framebuffer = target->swapchainFramebuffers[target->imageIndex];
|
||||
renderPassBeginInfo.renderPass = presentationRenderPass_;
|
||||
renderPassBeginInfo.renderArea.extent = target->extent;
|
||||
renderPassBeginInfo.clearValueCount = 1;
|
||||
|
@ -145,7 +145,7 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
|
|||
submitInfo.signalSemaphoreCount = 1;
|
||||
submitInfo.pSignalSemaphores = &target->renderFinishedSemaphore;
|
||||
|
||||
vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[target->currentResource]);
|
||||
vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[target->imageIndex]);
|
||||
|
||||
VkPresentInfoKHR presentInfo = {};
|
||||
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||
|
@ -221,27 +221,6 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
// create frame resources
|
||||
target->swapchainImageViews = new VkImageView[swapchainImageCount];
|
||||
target->swapchainFramebuffers = new VkFramebuffer[swapchainImageCount];
|
||||
target->offscreenColorImages = new VkImage[swapchainImageCount];
|
||||
target->offscreenColorMemory = new VkDeviceMemory[swapchainImageCount];
|
||||
target->offscreenColorImageViews = new VkImageView[swapchainImageCount];
|
||||
target->offscreenDepthImages = new VkImage[swapchainImageCount];
|
||||
target->offscreenDepthMemory = new VkDeviceMemory[swapchainImageCount];
|
||||
target->offscreenDepthImageViews = new VkImageView[swapchainImageCount];
|
||||
target->offscreenFramebuffers = new VkFramebuffer[swapchainImageCount];
|
||||
target->nearFieldImages = new VkImage[swapchainImageCount];
|
||||
target->nearFieldMemory = new VkDeviceMemory[swapchainImageCount];
|
||||
target->nearFieldImageViews = new VkImageView[swapchainImageCount];
|
||||
target->nearFieldFramebuffers = new VkFramebuffer[swapchainImageCount];
|
||||
target->farFieldImages = new VkImage[swapchainImageCount];
|
||||
target->farFieldMemory = new VkDeviceMemory[swapchainImageCount];
|
||||
target->farFieldImageViews = new VkImageView[swapchainImageCount];
|
||||
target->farFieldFramebuffers = new VkFramebuffer[swapchainImageCount];
|
||||
target->imguiVertexBuffers = new VkBuffer[swapchainImageCount];
|
||||
target->imguiVertexMemorys = new VkDeviceMemory[swapchainImageCount];
|
||||
target->imguiVertexBufferSizes = new size_t[swapchainImageCount];
|
||||
target->imguiIndexBuffers = new VkBuffer[swapchainImageCount];
|
||||
target->imguiIndexMemorys = new VkDeviceMemory[swapchainImageCount];
|
||||
target->imguiIndexBufferSizes = new size_t[swapchainImageCount];
|
||||
for(uint32_t i = 0; i < swapchainImageCount; i++) {
|
||||
// swapchain image view
|
||||
{
|
||||
|
@ -270,7 +249,30 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
|
||||
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->swapchainFramebuffers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
target->offscreenColorImages = new VkImage[numFrameResources];
|
||||
target->offscreenColorMemory = new VkDeviceMemory[numFrameResources];
|
||||
target->offscreenColorImageViews = new VkImageView[numFrameResources];
|
||||
target->offscreenDepthImages = new VkImage[numFrameResources];
|
||||
target->offscreenDepthMemory = new VkDeviceMemory[numFrameResources];
|
||||
target->offscreenDepthImageViews = new VkImageView[numFrameResources];
|
||||
target->offscreenFramebuffers = new VkFramebuffer[numFrameResources];
|
||||
target->nearFieldImages = new VkImage[numFrameResources];
|
||||
target->nearFieldMemory = new VkDeviceMemory[numFrameResources];
|
||||
target->nearFieldImageViews = new VkImageView[numFrameResources];
|
||||
target->nearFieldFramebuffers = new VkFramebuffer[numFrameResources];
|
||||
target->farFieldImages = new VkImage[numFrameResources];
|
||||
target->farFieldMemory = new VkDeviceMemory[numFrameResources];
|
||||
target->farFieldImageViews = new VkImageView[numFrameResources];
|
||||
target->farFieldFramebuffers = new VkFramebuffer[numFrameResources];
|
||||
target->imguiVertexBuffers = new VkBuffer[numFrameResources];
|
||||
target->imguiVertexMemorys = new VkDeviceMemory[numFrameResources];
|
||||
target->imguiVertexBufferSizes = new size_t[numFrameResources];
|
||||
target->imguiIndexBuffers = new VkBuffer[numFrameResources];
|
||||
target->imguiIndexMemorys = new VkDeviceMemory[numFrameResources];
|
||||
target->imguiIndexBufferSizes = new size_t[numFrameResources];
|
||||
for(uint32_t i = 0; i < numFrameResources; i++) {
|
||||
// offscreen image
|
||||
{
|
||||
VkImageCreateInfo imageCreateInfo = {};
|
||||
|
@ -509,9 +511,9 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
|
|||
allocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
|
||||
allocateInfo.commandPool = commandPool_;
|
||||
allocateInfo.commandBufferCount = swapchainImageCount;
|
||||
allocateInfo.commandBufferCount = numFrameResources;
|
||||
|
||||
target->commandBuffers = new VkCommandBuffer[swapchainImageCount];
|
||||
target->commandBuffers = new VkCommandBuffer[numFrameResources];
|
||||
|
||||
vkAllocateCommandBuffers(device_, &allocateInfo, target->commandBuffers);
|
||||
|
||||
|
@ -551,7 +553,7 @@ void Renderer::destroyRenderTarget(RenderTarget* target) {
|
|||
vkFreeDescriptorSets(device_, descriptorPool_, target->numImages, target->dofSets);
|
||||
vkFreeDescriptorSets(device_, descriptorPool_, target->numImages, target->postSets);
|
||||
|
||||
for(uint32_t i = 0; i < target->numImages; i++) {
|
||||
for(uint32_t i = 0; i < numFrameResources; i++) {
|
||||
vkFreeMemory(device_, target->imguiIndexMemorys[i], nullptr);
|
||||
vkDestroyBuffer(device_, target->imguiIndexBuffers[i], nullptr);
|
||||
|
||||
|
@ -579,7 +581,9 @@ void Renderer::destroyRenderTarget(RenderTarget* target) {
|
|||
vkDestroyImageView(device_, target->offscreenColorImageViews[i], nullptr);
|
||||
vkFreeMemory(device_, target->offscreenColorMemory[i], nullptr);
|
||||
vkDestroyImage(device_, target->offscreenColorImages[i], nullptr);
|
||||
}
|
||||
|
||||
for(uint32_t i =0; i < target->numImages; i++) {
|
||||
vkDestroyFramebuffer(device_, target->swapchainFramebuffers[i], nullptr);
|
||||
vkDestroyImageView(device_, target->swapchainImageViews[i], nullptr);
|
||||
}
|
||||
|
|
Reference in a new issue