148 }
catch (vk::SystemError &e) {
149 std::string err = std::string(
"~VulkanDisplay vk::SystemError: ") + e.what() +
"\n";
157 std::string
path_to_shaders =
"./shaders",
bool vsync =
true,
bool tearing_permitted =
false);
struct video_frame * frame
vulkan_display_detail::TransferImageImpl * get_transfer_image()
void discard_image(TransferImage image)
detail::ConversionPipeline conversion_pipeline
detail::VulkanContext context
TransferImageImpl & acquire_transfer_image()
VulkanDisplay(VulkanDisplay &&other)=delete
detail::RenderPipeline render_pipeline
void destroy_format_dependent_resources()
std::string path_to_shaders
VulkanDisplay & operator=(VulkanDisplay &&other)=delete
void window_parameters_changed()
std::array< detail::PerFrameResources, 3 > frame_resources
vk::CommandPool command_pool
std::queue< RenderedImage > rendered_images
~VulkanDisplay() noexcept
detail::ConcurrentQueue< TransferImageImpl * > available_img_queue
available_img_queue - producer is the render thread, consumer is the provided thread
bool queue_image(TransferImage img, bool discardable)
void copy_and_queue_image(unsigned char *frame, ImageDescription description)
vk::DescriptorPool descriptor_pool
ImageDescription current_image_description
void reconfigure(const TransferImageImpl &transfer_image)
VulkanDisplay(const VulkanDisplay &other)=delete
std::vector< detail::PerFrameResources * > free_frame_resources
bool is_image_description_supported(ImageDescription description)
void init(VulkanInstance &&instance, vk::SurfaceKHR surface, uint32_t transfer_image_count, WindowChangedCallback &window, uint32_t gpu_index=no_gpu_selected, std::string path_to_shaders="./shaders", bool vsync=true, bool tearing_permitted=false)
void bind_transfer_image(TransferImageImpl &image, detail::PerFrameResources &resources)
std::vector< TransferImageImpl * > available_images
local to provider thread
bool display_queued_image()
detail::ConcurrentQueue< TransferImageImpl *, detail::filled_img_max_count > filled_img_queue
filled_img_queue - producer is the provider thread, consumer is the render thread
std::deque< TransferImageImpl > transfer_images
void record_graphics_commands(detail::PerFrameResources &commands, TransferImageImpl &transfer_image, uint32_t swapchain_image_id)
TransferImage acquire_image(ImageDescription description)
bool is_yCbCr_supported() const
VulkanDisplay & operator=(const VulkanDisplay &other)=delete
bool format_conversion_enabled
uint32_t get_vulkan_version() const
WindowChangedCallback * window
virtual WindowParameters get_window_parameters()=0
~WindowChangedCallback()=default
bool is_yCbCr_supported() const
uint32_t get_vulkan_version() const
static constexpr unsigned filled_img_max_count
std::function< void(vulkan_display::LogLevel, std::string_view)> vulkan_log_msg
constexpr auto waiting_time_for_filled_image
constexpr size_t filled_image_queue_size
constexpr uint32_t no_gpu_selected
detail::PerFrameResources * gpu_commands
TransferImageImpl * image
vk::DescriptorSet conversion_destination_descriptor_set
vk::DescriptorSet render_descriptor_set
vk::Semaphore image_acquired_semaphore
vk::CommandBuffer command_buffer
vk::DescriptorSet conversion_source_descriptor_set
vk::Semaphore image_rendered_semaphore
static class worker_pool instance