summaryrefslogtreecommitdiff
path: root/src/vk/renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vk/renderer.cpp')
-rw-r--r--src/vk/renderer.cpp121
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};