46 lines
1.5 KiB
Rust
46 lines
1.5 KiB
Rust
use cef::AcceleratedPaintInfo;
|
|
|
|
use super::{TextureImportError, TextureImportResult, TextureImporter};
|
|
|
|
pub(crate) enum SharedTextureHandle {
|
|
#[cfg(target_os = "linux")]
|
|
DmaBuf(super::dmabuf::DmaBufImporter),
|
|
#[cfg(target_os = "windows")]
|
|
D3D11(super::d3d11::D3D11Importer),
|
|
#[cfg(target_os = "macos")]
|
|
IOSurface(super::iosurface::IOSurfaceImporter),
|
|
Unsupported,
|
|
}
|
|
|
|
impl SharedTextureHandle {
|
|
pub(crate) fn new(info: &AcceleratedPaintInfo) -> Self {
|
|
// Extract DMA-BUF information
|
|
#[cfg(target_os = "linux")]
|
|
return Self::DmaBuf(super::dmabuf::DmaBufImporter::new(info));
|
|
|
|
// Extract D3D11 shared handle with texture metadata
|
|
#[cfg(target_os = "windows")]
|
|
return Self::D3D11(super::d3d11::D3D11Importer::new(info));
|
|
|
|
// Extract IOSurface handle with texture metadata
|
|
#[cfg(target_os = "macos")]
|
|
return Self::IOSurface(super::iosurface::IOSurfaceImporter::new(info));
|
|
|
|
#[allow(unreachable_code)]
|
|
Self::Unsupported
|
|
}
|
|
|
|
/// Import a texture using the appropriate platform-specific importer
|
|
pub(crate) fn import_texture(self, device: &wgpu::Device) -> TextureImportResult {
|
|
match self {
|
|
#[cfg(target_os = "linux")]
|
|
SharedTextureHandle::DmaBuf(importer) => importer.import_to_wgpu(device),
|
|
#[cfg(target_os = "windows")]
|
|
SharedTextureHandle::D3D11(importer) => importer.import_to_wgpu(device),
|
|
#[cfg(target_os = "macos")]
|
|
SharedTextureHandle::IOSurface(importer) => importer.import_to_wgpu(device),
|
|
SharedTextureHandle::Unsupported => Err(TextureImportError::UnsupportedPlatform),
|
|
}
|
|
}
|
|
}
|