56{
57 vk::Device device = context.get_device();
58
60 capture->readback_running.store(
false, std::memory_order_release);
61 device.waitIdle();
62
63 if (
capture->readback_thread.joinable())
64 capture->readback_thread.join();
65
66 for (
auto& slot :
capture->slots) {
67 if (slot->fence) {
68 (void)device.waitForFences(1, &slot->fence, VK_TRUE, UINT64_MAX);
69 device.destroyFence(slot->fence);
70 }
71 if (slot->image)
72 device.destroyImage(slot->image);
73 if (slot->mem)
74 device.freeMemory(slot->mem);
75 }
77 }
78
79 device.waitIdle();
80
82 if (img) {
83 device.destroySemaphore(img);
84 }
85 }
87
89 if (render) {
90 device.destroySemaphore(render);
91 }
92 }
94
96
99 device.destroyFence(
fence);
100 }
101 }
103
105 const auto& res =
depth_image->get_image_resources();
106 if (res.image_view) {
107 device.destroyImageView(res.image_view);
108 }
109 if (res.memory) {
110 device.freeMemory(res.memory);
111 }
112 if (res.image) {
113 device.destroyImage(res.image);
114 }
116 }
117
121 }
122
124 context.destroy_surface(
surface);
126 }
127
128 window->set_graphics_registered(
false);
129}
std::vector< vk::Semaphore > image_available
std::unique_ptr< CaptureState > capture
std::shared_ptr< Window > window
std::vector< vk::Fence > in_flight
std::unique_ptr< VKSwapchain > swapchain
std::vector< vk::Semaphore > render_finished
std::vector< vk::CommandBuffer > clear_command_buffers
std::shared_ptr< VKImage > depth_image