diff options
Diffstat (limited to 'src/vk/renderer.cpp')
-rw-r--r-- | src/vk/renderer.cpp | 121 |
1 files changed, 50 insertions, 71 deletions
diff --git a/src/vk/renderer.cpp b/src/vk/renderer.cpp index 753b5f7..3daeee7 100644 --- a/src/vk/renderer.cpp +++ b/src/vk/renderer.cpp @@ -102,9 +102,9 @@ unload_command_pool(void *obj) auto self = static_cast<VK::Renderer*>(obj); vkWaitForFences(cg_core.vk_device_with_swapchain->device, - VK::Swapchain::max_frames_in_flight, - cg_core.vk_swapchain->in_flight_fences.data(), VK_TRUE, - std::numeric_limits<uint64_t>::max()); + VK::Swapchain::max_frames_in_flight, + cg_core.vk_swapchain->in_flight_fences.data(), VK_TRUE, + std::numeric_limits<uint64_t>::max()); vkDestroyCommandPool( self->queue_family->device->device, self->command_pool, nullptr); } @@ -143,7 +143,7 @@ namespace VK { Renderer::Renderer(std::vector<std::shared_ptr<View2D>> views_2d, - std::vector<std::shared_ptr<View3D>> views_3d): + std::vector<std::shared_ptr<View3D>> views_3d): skeletal_models_to_draw{cg_core.vk_swapchain->images_count}, static_models_to_draw{cg_core.vk_swapchain->images_count}, views_2d{views_2d}, @@ -153,7 +153,7 @@ Renderer::Renderer(std::vector<std::shared_ptr<View2D>> views_2d, } Renderer::Renderer(std::initializer_list<std::shared_ptr<View2D>> views_2d, - std::initializer_list<std::shared_ptr<View3D>> views_3d): + std::initializer_list<std::shared_ptr<View3D>> views_3d): Renderer(std::vector(views_2d), std::vector(views_3d)) { } @@ -177,15 +177,15 @@ Renderer::draw() if(next_frame == Swapchain::max_frames_in_flight) next_frame = 0; vkResetFences(cg_core.vk_device_with_swapchain->device, 1, - &cg_core.vk_swapchain->in_flight_fences[ - cg_core.vk_swapchain->current_frame]); + &cg_core.vk_swapchain->in_flight_fences[ + cg_core.vk_swapchain->current_frame]); uint32_t image_index; vkAcquireNextImageKHR( cg_core.vk_device_with_swapchain->device, cg_core.vk_swapchain->swapchain, std::numeric_limits<uint64_t>::max(), cg_core.vk_swapchain->image_available_semaphores[ - cg_core.vk_swapchain->current_frame], VK_NULL_HANDLE, &image_index); + cg_core.vk_swapchain->current_frame], VK_NULL_HANDLE, &image_index); VkCommandBuffer draw_command_buffer = this->draw_command_buffers[cg_core.vk_swapchain->current_frame]; @@ -198,7 +198,7 @@ Renderer::draw() begin_info.flags = 0; begin_info.pInheritanceInfo = nullptr; if (vkBeginCommandBuffer(draw_command_buffer, &begin_info) != VK_SUCCESS) - throw std::runtime_error{"Failed to beggin draw command buffer."}; + throw std::runtime_error{"Failed to beggin draw command buffer."}; } // 3D drawing. @@ -227,94 +227,73 @@ Renderer::draw() VkRenderPassBeginInfo render_pass_begin{}; render_pass_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; render_pass_begin.pNext = nullptr; - render_pass_begin.renderPass = - cg_core.vk_graphics_pipeline_3d_layout->render_pass; + render_pass_begin.renderPass = cg_core.vk_render_pass->pipeline_3d; render_pass_begin.framebuffer = - cg_core.vk_graphics_pipeline_3d->swapchain_framebuffers[image_index]; + cg_core.vk_graphics_pipeline_3d->swapchain_framebuffers[image_index]; render_pass_begin.renderArea.offset = {0, 0}; render_pass_begin.renderArea.extent = { - static_cast<uint32_t>(cg_core.display_width), - static_cast<uint32_t>(cg_core.display_height)}; + static_cast<uint32_t>(cg_core.display_width), + static_cast<uint32_t>(cg_core.display_height)}; render_pass_begin.clearValueCount = clear_values.size(); render_pass_begin.pClearValues = clear_values.data(); vkCmdBeginRenderPass( - draw_command_buffer, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); + draw_command_buffer, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); for(auto &view: this->views_3d) - cg_core.vk_graphics_pipeline_3d->draw( - view, draw_command_buffer, cg_core.vk_swapchain->current_frame, - image_index); + cg_core.vk_graphics_pipeline_3d->draw( + view, draw_command_buffer, cg_core.vk_swapchain->current_frame, + image_index); vkCmdEndRenderPass(draw_command_buffer); } - // 2D solid drawing - { + { // 2D render pass VkRenderPassBeginInfo render_pass_begin{}; render_pass_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; render_pass_begin.pNext = nullptr; - render_pass_begin.renderPass = - cg_core.vk_graphics_pipeline_2d_solid_layout->render_pass; + render_pass_begin.renderPass = cg_core.vk_render_pass->pipeline_2d; render_pass_begin.framebuffer = - cg_core.vk_graphics_pipeline_2d_solid->swapchain_framebuffers[ - image_index]; + cg_core.vk_graphics_pipeline_2d_solid->swapchain_framebuffers[ + image_index]; render_pass_begin.renderArea.offset = {0, 0}; render_pass_begin.renderArea.extent = { - static_cast<uint32_t>(cg_core.display_width), - static_cast<uint32_t>(cg_core.display_height)}; + static_cast<uint32_t>(cg_core.display_width), + static_cast<uint32_t>(cg_core.display_height)}; render_pass_begin.clearValueCount = 0; render_pass_begin.pClearValues = nullptr; vkCmdBeginRenderPass( - draw_command_buffer, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); + draw_command_buffer, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); + + } + { // 2D solid drawing for(auto &view: this->views_2d) - cg_core.vk_graphics_pipeline_2d_solid->draw( - view, draw_command_buffer, cg_core.vk_swapchain->current_frame, - next_frame, image_index); + cg_core.vk_graphics_pipeline_2d_solid->draw( + view, draw_command_buffer, cg_core.vk_swapchain->current_frame, + next_frame, image_index); for(auto &view: this->views_3d) - cg_core.vk_graphics_pipeline_2d_solid->draw( - view, draw_command_buffer, cg_core.vk_swapchain->current_frame, - next_frame, image_index); - - vkCmdEndRenderPass(draw_command_buffer); + cg_core.vk_graphics_pipeline_2d_solid->draw( + view, draw_command_buffer, cg_core.vk_swapchain->current_frame, + next_frame, image_index); } - // 2D wired drawing - { - VkRenderPassBeginInfo render_pass_begin{}; - render_pass_begin.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; - render_pass_begin.pNext = nullptr; - render_pass_begin.renderPass = - cg_core.vk_graphics_pipeline_2d_wired_layout->render_pass; - render_pass_begin.framebuffer = - cg_core.vk_graphics_pipeline_2d_wired->swapchain_framebuffers[ - image_index]; - render_pass_begin.renderArea.offset = {0, 0}; - render_pass_begin.renderArea.extent = { - static_cast<uint32_t>(cg_core.display_width), - static_cast<uint32_t>(cg_core.display_height)}; - render_pass_begin.clearValueCount = 0; - render_pass_begin.pClearValues = nullptr; - - vkCmdBeginRenderPass( - draw_command_buffer, &render_pass_begin, VK_SUBPASS_CONTENTS_INLINE); - + { // 2D wired drawing for(auto &view: this->views_2d) - cg_core.vk_graphics_pipeline_2d_wired->draw( - view, draw_command_buffer, cg_core.vk_swapchain->current_frame, - next_frame, image_index); + cg_core.vk_graphics_pipeline_2d_wired->draw( + view, draw_command_buffer, cg_core.vk_swapchain->current_frame, + next_frame, image_index); for(auto &view: this->views_3d) - cg_core.vk_graphics_pipeline_2d_wired->draw( - view, draw_command_buffer, cg_core.vk_swapchain->current_frame, - next_frame, image_index); - - vkCmdEndRenderPass(draw_command_buffer); + cg_core.vk_graphics_pipeline_2d_wired->draw( + view, draw_command_buffer, cg_core.vk_swapchain->current_frame, + next_frame, image_index); } + vkCmdEndRenderPass(draw_command_buffer); + // End command buffer. if(vkEndCommandBuffer(draw_command_buffer) != VK_SUCCESS) throw std::runtime_error{"Failed to end draw command buffer."}; @@ -324,13 +303,13 @@ Renderer::draw() auto queue{this->queue_family->get_queue()}; VkSemaphore wait_semaphores[]{ - cg_core.vk_swapchain->image_available_semaphores[ - cg_core.vk_swapchain->current_frame]}; + cg_core.vk_swapchain->image_available_semaphores[ + cg_core.vk_swapchain->current_frame]}; VkPipelineStageFlags wait_stages[] = - {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT}; + {VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT}; VkSemaphore signal_semaphores[]{ - cg_core.vk_swapchain->render_finished_semaphores[ - cg_core.vk_swapchain->current_frame]}; + cg_core.vk_swapchain->render_finished_semaphores[ + cg_core.vk_swapchain->current_frame]}; VkSubmitInfo submit_info{}; submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; @@ -344,9 +323,9 @@ Renderer::draw() submit_info.pSignalSemaphores = signal_semaphores; if(vkQueueSubmit( - queue.queue, 1, &submit_info, cg_core.vk_swapchain->in_flight_fences[ - cg_core.vk_swapchain->current_frame]) != VK_SUCCESS) - throw std::runtime_error{"Failed to submit draw command buffer."}; + queue.queue, 1, &submit_info, cg_core.vk_swapchain->in_flight_fences[ + cg_core.vk_swapchain->current_frame]) != VK_SUCCESS) + throw std::runtime_error{"Failed to submit draw command buffer."}; VkSwapchainKHR swap_chains[]{cg_core.vk_swapchain->swapchain}; |