| 646 | |
| 647 | template <vkb::BindingType bindingType> |
| 648 | inline void RenderContext<bindingType>::prepare(size_t thread_count, typename vkb::rendering::RenderTarget<bindingType>::CreateFunc create_render_target_func_) |
| 649 | { |
| 650 | if constexpr (bindingType == vkb::BindingType::Cpp) |
| 651 | { |
| 652 | create_render_target_func = create_render_target_func_; |
| 653 | } |
| 654 | else |
| 655 | { |
| 656 | create_render_target_func = *reinterpret_cast<RenderTargetCpp::CreateFunc *>(&create_render_target_func_); |
| 657 | } |
| 658 | |
| 659 | device.get_handle().waitIdle(); |
| 660 | |
| 661 | if (swapchain) |
| 662 | { |
| 663 | surface_extent = swapchain->get_extent(); |
| 664 | |
| 665 | vk::Extent3D extent{surface_extent.width, surface_extent.height, 1}; |
| 666 | |
| 667 | for (auto &image_handle : swapchain->get_images()) |
| 668 | { |
| 669 | vkb::core::HPPImage swapchain_image{device, image_handle, extent, swapchain->get_format(), swapchain->get_usage()}; |
| 670 | auto render_target = create_render_target_func(std::move(swapchain_image)); |
| 671 | frames.emplace_back(std::make_unique<vkb::rendering::RenderFrameCpp>(device, std::move(render_target), thread_count)); |
| 672 | } |
| 673 | } |
| 674 | else |
| 675 | { |
| 676 | // Otherwise, create a single RenderFrame |
| 677 | swapchain = nullptr; |
| 678 | |
| 679 | auto color_image = vkb::core::HPPImage{device, |
| 680 | vk::Extent3D{surface_extent.width, surface_extent.height, 1}, |
| 681 | DEFAULT_VK_FORMAT, // We can use any format here that we like |
| 682 | vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eTransferSrc, |
| 683 | VMA_MEMORY_USAGE_GPU_ONLY}; |
| 684 | |
| 685 | std::unique_ptr<RenderTargetCpp> render_target = create_render_target_func(std::move(color_image)); |
| 686 | frames.emplace_back(std::make_unique<vkb::rendering::RenderFrameCpp>(device, std::move(render_target), thread_count)); |
| 687 | } |
| 688 | |
| 689 | this->thread_count = thread_count; |
| 690 | this->prepared = true; |
| 691 | } |
| 692 | |
| 693 | template <vkb::BindingType bindingType> |
| 694 | inline void RenderContext<bindingType>::recreate() |
no test coverage detected