use crate ::{
Adapter, Api, DeviceError, OpenDevice, SurfaceCapabilities, TextureFormatCapabilities,
};
use super ::{DynDevice, DynQueue, DynResource, DynResourceExt, DynSurface};
pub struct DynOpenDevice {
pub device: Box <dyn DynDevice>,
pub queue: Box <dyn DynQueue>,
}
impl <A: Api> From<OpenDevice<A>> for DynOpenDevice {
fn from(open_device: OpenDevice<A>) -> Self {
Self {
device: Box ::new(open_device.device),
queue: Box ::new(open_device.queue),
}
}
}
pub trait DynAdapter: DynResource {
unsafe fn open(
&self ,
features: wgt::Features,
limits: &wgt::Limits,
memory_hints: &wgt::MemoryHints,
) -> Result<DynOpenDevice, DeviceError>;
unsafe fn texture_format_capabilities(
&self ,
format: wgt::TextureFormat,
) -> TextureFormatCapabilities;
unsafe fn surface_capabilities(&self , surface: &dyn DynSurface) -> Option<SurfaceCapabilities>;
unsafe fn get_presentation_timestamp(&self ) -> wgt::PresentationTimestamp;
}
impl <A: Adapter + DynResource> DynAdapter for A {
unsafe fn open(
&self ,
features: wgt::Features,
limits: &wgt::Limits,
memory_hints: &wgt::MemoryHints,
) -> Result<DynOpenDevice, DeviceError> {
unsafe { A::open(self , features, limits, memory_hints) }.map(|open_device| DynOpenDevice {
device: Box ::new(open_device.device),
queue: Box ::new(open_device.queue),
})
}
unsafe fn texture_format_capabilities(
&self ,
format: wgt::TextureFormat,
) -> TextureFormatCapabilities {
unsafe { A::texture_format_capabilities(self , format) }
}
unsafe fn surface_capabilities(&self , surface: &dyn DynSurface) -> Option<SurfaceCapabilities> {
let surface = surface.expect_downcast_ref();
unsafe { A::surface_capabilities(self , surface) }
}
unsafe fn get_presentation_timestamp(&self ) -> wgt::PresentationTimestamp {
unsafe { A::get_presentation_timestamp(self ) }
}
}
Messung V0.5 in Prozent C=84 H=95 G=89
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-22)
¤
*© Formatika GbR, Deutschland