#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Event {
Surface {
id: u64,
event: SurfaceEvent,
},
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SurfaceEvent {
Added {
width: u32,
height: u32,
info: SurfaceInfo,
},
Resized {
width: u32,
height: u32,
},
Destroyed,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SurfaceInfo {
pub api: SurfaceType,
pub gpu_id: GpuLuid,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct GpuLuid {
pub low: u32,
pub high: i32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum SurfaceType {
Opengl {
window_id: u32,
},
Direct3D9 {
window_id: u32,
},
Direct3D11 {
window_id: Option<u32>,
},
Direct3D12 {
window_id: Option<u32>,
},
Vulkan {
window_id: u32,
},
}
impl SurfaceType {
pub fn window_id(self) -> Option<u32> {
match self {
SurfaceType::Opengl { window_id } => Some(window_id),
SurfaceType::Direct3D9 { window_id } => Some(window_id),
SurfaceType::Direct3D11 { window_id } => window_id,
SurfaceType::Direct3D12 { window_id } => window_id,
SurfaceType::Vulkan { window_id } => Some(window_id),
}
}
}