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;
|
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);
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue