| 75 | } |
| 76 | |
| 77 | void HDR::build_command_buffers() |
| 78 | { |
| 79 | VkCommandBufferBeginInfo command_buffer_begin_info = vkb::initializers::command_buffer_begin_info(); |
| 80 | |
| 81 | VkClearValue clear_values[2]; |
| 82 | clear_values[0].color = {{0.0f, 0.0f, 0.0f, 0.0f}}; |
| 83 | clear_values[1].depthStencil = {0.0f, 0}; |
| 84 | |
| 85 | VkRenderPassBeginInfo render_pass_begin_info = vkb::initializers::render_pass_begin_info(); |
| 86 | render_pass_begin_info.renderPass = render_pass; |
| 87 | render_pass_begin_info.renderArea.offset.x = 0; |
| 88 | render_pass_begin_info.renderArea.offset.y = 0; |
| 89 | render_pass_begin_info.clearValueCount = 2; |
| 90 | render_pass_begin_info.pClearValues = clear_values; |
| 91 | |
| 92 | for (int32_t i = 0; i < draw_cmd_buffers.size(); ++i) |
| 93 | { |
| 94 | VK_CHECK(vkBeginCommandBuffer(draw_cmd_buffers[i], &command_buffer_begin_info)); |
| 95 | |
| 96 | { |
| 97 | /* |
| 98 | First pass: Render scene to offscreen framebuffer |
| 99 | */ |
| 100 | |
| 101 | std::array<VkClearValue, 3> clear_values; |
| 102 | clear_values[0].color = {{0.0f, 0.0f, 0.0f, 0.0f}}; |
| 103 | clear_values[1].color = {{0.0f, 0.0f, 0.0f, 0.0f}}; |
| 104 | clear_values[2].depthStencil = {0.0f, 0}; |
| 105 | |
| 106 | VkRenderPassBeginInfo render_pass_begin_info = vkb::initializers::render_pass_begin_info(); |
| 107 | render_pass_begin_info.renderPass = offscreen.render_pass; |
| 108 | render_pass_begin_info.framebuffer = offscreen.framebuffer; |
| 109 | render_pass_begin_info.renderArea.extent.width = offscreen.width; |
| 110 | render_pass_begin_info.renderArea.extent.height = offscreen.height; |
| 111 | render_pass_begin_info.clearValueCount = 3; |
| 112 | render_pass_begin_info.pClearValues = clear_values.data(); |
| 113 | |
| 114 | vkCmdBeginRenderPass(draw_cmd_buffers[i], &render_pass_begin_info, VK_SUBPASS_CONTENTS_INLINE); |
| 115 | |
| 116 | VkViewport viewport = vkb::initializers::viewport(static_cast<float>(offscreen.width), static_cast<float>(offscreen.height), 0.0f, 1.0f); |
| 117 | vkCmdSetViewport(draw_cmd_buffers[i], 0, 1, &viewport); |
| 118 | |
| 119 | VkRect2D scissor = vkb::initializers::rect2D(offscreen.width, offscreen.height, 0, 0); |
| 120 | vkCmdSetScissor(draw_cmd_buffers[i], 0, 1, &scissor); |
| 121 | |
| 122 | VkDeviceSize offsets[1] = {0}; |
| 123 | |
| 124 | // Skybox |
| 125 | if (display_skybox) |
| 126 | { |
| 127 | vkCmdBindPipeline(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.skybox); |
| 128 | vkCmdBindDescriptorSets(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_layouts.models, 0, 1, &descriptor_sets.skybox, 0, NULL); |
| 129 | |
| 130 | draw_model(models.skybox, draw_cmd_buffers[i]); |
| 131 | } |
| 132 | |
| 133 | // 3D object |
| 134 | vkCmdBindPipeline(draw_cmd_buffers[i], VK_PIPELINE_BIND_POINT_GRAPHICS, pipelines.reflect); |
nothing calls this directly
no test coverage detected