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;
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);
}