Archived
1
Fork 0

Fix frame resources

This commit is contained in:
Joshua Goins 2018-11-08 13:24:36 -05:00
parent f16e8b2aab
commit bbd18bbec2

View file

@ -66,8 +66,8 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
target->currentResource = (target->imageIndex + 1) % numFrameResources; target->currentResource = (target->imageIndex + 1) % numFrameResources;
vkWaitForFences(device_, 1, &target->fences[target->currentResource], VK_TRUE, UINT64_MAX); vkWaitForFences(device_, 1, &target->fences[target->imageIndex], VK_TRUE, UINT64_MAX);
vkResetFences(device_, 1, &target->fences[target->currentResource]); vkResetFences(device_, 1, &target->fences[target->imageIndex]);
VkCommandBuffer commandBuffer = target->commandBuffers[target->currentResource]; VkCommandBuffer commandBuffer = target->commandBuffers[target->currentResource];
@ -118,7 +118,7 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
renderPassBeginInfo = {}; renderPassBeginInfo = {};
renderPassBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; 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.renderPass = presentationRenderPass_;
renderPassBeginInfo.renderArea.extent = target->extent; renderPassBeginInfo.renderArea.extent = target->extent;
renderPassBeginInfo.clearValueCount = 1; renderPassBeginInfo.clearValueCount = 1;
@ -145,7 +145,7 @@ void Renderer::render(World& world, Camera& camera, RenderTarget* target) {
submitInfo.signalSemaphoreCount = 1; submitInfo.signalSemaphoreCount = 1;
submitInfo.pSignalSemaphores = &target->renderFinishedSemaphore; submitInfo.pSignalSemaphores = &target->renderFinishedSemaphore;
vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[target->currentResource]); vkQueueSubmit(graphicsQueue_, 1, &submitInfo, target->fences[target->imageIndex]);
VkPresentInfoKHR presentInfo = {}; VkPresentInfoKHR presentInfo = {};
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
@ -221,27 +221,6 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
// create frame resources // create frame resources
target->swapchainImageViews = new VkImageView[swapchainImageCount]; target->swapchainImageViews = new VkImageView[swapchainImageCount];
target->swapchainFramebuffers = new VkFramebuffer[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++) { for(uint32_t i = 0; i < swapchainImageCount; i++) {
// swapchain image view // swapchain image view
{ {
@ -270,7 +249,30 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
vkCreateFramebuffer(device_, &framebufferInfo, nullptr, &target->swapchainFramebuffers[i]); 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 // offscreen image
{ {
VkImageCreateInfo imageCreateInfo = {}; VkImageCreateInfo imageCreateInfo = {};
@ -509,9 +511,9 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface, RenderTa
allocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; allocateInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; allocateInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocateInfo.commandPool = commandPool_; allocateInfo.commandPool = commandPool_;
allocateInfo.commandBufferCount = swapchainImageCount; allocateInfo.commandBufferCount = numFrameResources;
target->commandBuffers = new VkCommandBuffer[swapchainImageCount]; target->commandBuffers = new VkCommandBuffer[numFrameResources];
vkAllocateCommandBuffers(device_, &allocateInfo, target->commandBuffers); 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->dofSets);
vkFreeDescriptorSets(device_, descriptorPool_, target->numImages, target->postSets); 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); vkFreeMemory(device_, target->imguiIndexMemorys[i], nullptr);
vkDestroyBuffer(device_, target->imguiIndexBuffers[i], nullptr); vkDestroyBuffer(device_, target->imguiIndexBuffers[i], nullptr);
@ -579,7 +581,9 @@ void Renderer::destroyRenderTarget(RenderTarget* target) {
vkDestroyImageView(device_, target->offscreenColorImageViews[i], nullptr); vkDestroyImageView(device_, target->offscreenColorImageViews[i], nullptr);
vkFreeMemory(device_, target->offscreenColorMemory[i], nullptr); vkFreeMemory(device_, target->offscreenColorMemory[i], nullptr);
vkDestroyImage(device_, target->offscreenColorImages[i], nullptr); vkDestroyImage(device_, target->offscreenColorImages[i], nullptr);
}
for(uint32_t i =0; i < target->numImages; i++) {
vkDestroyFramebuffer(device_, target->swapchainFramebuffers[i], nullptr); vkDestroyFramebuffer(device_, target->swapchainFramebuffers[i], nullptr);
vkDestroyImageView(device_, target->swapchainImageViews[i], nullptr); vkDestroyImageView(device_, target->swapchainImageViews[i], nullptr);
} }