more context

This commit is contained in:
Junkui Zhang 2025-07-31 01:18:29 +08:00
parent 80be0e29b9
commit c995dd2016

View file

@ -87,7 +87,7 @@ struct DirectComposition {
} }
impl DirectXDevices { impl DirectXDevices {
pub(crate) fn new(disable_direct_composition: bool) -> Result<Self> { pub(crate) fn new(disable_direct_composition: bool) -> Result<ManuallyDrop<Self>> {
let dxgi_factory = get_dxgi_factory().context("Creating DXGI factory")?; let dxgi_factory = get_dxgi_factory().context("Creating DXGI factory")?;
let adapter = get_adapter(&dxgi_factory).context("Getting DXGI adapter")?; let adapter = get_adapter(&dxgi_factory).context("Getting DXGI adapter")?;
let (device, device_context) = { let (device, device_context) = {
@ -121,13 +121,13 @@ impl DirectXDevices {
Some(device.cast().context("Creating DXGI device")?) Some(device.cast().context("Creating DXGI device")?)
}; };
Ok(Self { Ok(ManuallyDrop::new(Self {
adapter, adapter,
dxgi_factory, dxgi_factory,
dxgi_device, dxgi_device,
device, device,
device_context, device_context,
}) }))
} }
} }
@ -137,20 +137,25 @@ impl DirectXRenderer {
log::info!("Direct Composition is disabled."); log::info!("Direct Composition is disabled.");
} }
let devices = ManuallyDrop::new( let devices =
DirectXDevices::new(disable_direct_composition).context("Creating DirectX devices")?, DirectXDevices::new(disable_direct_composition).context("Creating DirectX devices")?;
);
let atlas = Arc::new(DirectXAtlas::new(&devices.device, &devices.device_context)); let atlas = Arc::new(DirectXAtlas::new(&devices.device, &devices.device_context));
let resources = DirectXResources::new(&devices, 1, 1, hwnd, disable_direct_composition)?; let resources = DirectXResources::new(&devices, 1, 1, hwnd, disable_direct_composition)
let globals = DirectXGlobalElements::new(&devices.device)?; .context("Creating DirectX resources")?;
let pipelines = DirectXRenderPipelines::new(&devices.device)?; let globals = DirectXGlobalElements::new(&devices.device)
.context("Creating DirectX global elements")?;
let pipelines = DirectXRenderPipelines::new(&devices.device)
.context("Creating DirectX render pipelines")?;
let direct_composition = if disable_direct_composition { let direct_composition = if disable_direct_composition {
None None
} else { } else {
let composition = DirectComposition::new(devices.dxgi_device.as_ref().unwrap(), hwnd)?; let composition = DirectComposition::new(devices.dxgi_device.as_ref().unwrap(), hwnd)
composition.set_swap_chain(&resources.swap_chain)?; .context("Creating DirectComposition")?;
composition
.set_swap_chain(&resources.swap_chain)
.context("Setting swap chain for DirectComposition")?;
Some(composition) Some(composition)
}; };
@ -240,10 +245,8 @@ impl DirectXRenderer {
ManuallyDrop::drop(&mut self.devices); ManuallyDrop::drop(&mut self.devices);
} }
let devices = ManuallyDrop::new( let devices = DirectXDevices::new(disable_direct_composition)
DirectXDevices::new(disable_direct_composition) .context("Recreating DirectX devices")?;
.context("Recreating DirectX devices")?,
);
let resources = DirectXResources::new( let resources = DirectXResources::new(
&devices, &devices,
self.resources.width, self.resources.width,