use crate::VulkanImageInfo;
use ferroui_base::platform::{IPlatformHandle, PlatformGraphicsExternalImageProperties};
use ferroui_base::rendering::composition::CompositionGpuImportedImageSynchronizationCapabilities;
use std::rc::Rc;
pub trait IVulkanContextExternalObjectsFeature {
fn supported_image_handle_types(&self) -> Vec<String>;
fn supported_semaphore_types(&self) -> Vec<String>;
fn device_uuid(&self) -> Option<Vec<u8>>;
fn device_luid(&self) -> Option<Vec<u8>>;
fn get_synchronization_capabilities(
&self,
image_handle_type: &str,
) -> CompositionGpuImportedImageSynchronizationCapabilities;
fn import_image(
&self,
handle: Rc<dyn IPlatformHandle>,
properties: PlatformGraphicsExternalImageProperties,
) -> Rc<dyn IVulkanExternalImage>;
fn import_semaphore(&self, handle: Rc<dyn IPlatformHandle>) -> Rc<dyn IVulkanExternalSemaphore>;
}
pub trait IVulkanExternalSemaphore {
fn handle(&self) -> u64;
fn submit_wait_semaphore(&self);
fn submit_signal_semaphore(&self);
fn dispose(&self);
}
pub trait IVulkanExternalImage {
fn info(&self) -> VulkanImageInfo;
fn dispose(&self);
}