wip
This commit is contained in:
parent
1888f21a14
commit
7cf10d110c
2 changed files with 19 additions and 17 deletions
|
@ -4,7 +4,6 @@ use ::util::ResultExt;
|
|||
use anyhow::{Context, Result};
|
||||
// #[cfg(not(feature = "enable-renderdoc"))]
|
||||
use windows::Win32::Graphics::DirectComposition::*;
|
||||
use windows::Win32::UI::WindowsAndMessaging::GetWindowRect;
|
||||
use windows::{
|
||||
Win32::{
|
||||
Foundation::{HMODULE, HWND},
|
||||
|
@ -50,7 +49,9 @@ struct DirectXResources {
|
|||
msaa_target: ID3D11Texture2D,
|
||||
msaa_view: [Option<ID3D11RenderTargetView>; 1],
|
||||
|
||||
// Cached viewport
|
||||
// Cached window size and viewport
|
||||
width: u32,
|
||||
height: u32,
|
||||
viewport: [D3D11_VIEWPORT; 1],
|
||||
}
|
||||
|
||||
|
@ -111,7 +112,7 @@ impl DirectXRenderer {
|
|||
devices.device.clone(),
|
||||
devices.device_context.clone(),
|
||||
));
|
||||
let resources = DirectXResources::new(devices, hwnd)?;
|
||||
let resources = DirectXResources::new(devices)?;
|
||||
let globals = DirectXGlobalElements::new(&devices.device)?;
|
||||
let pipelines = DirectXRenderPipelines::new(&devices.device)?;
|
||||
// #[cfg(not(feature = "enable-renderdoc"))]
|
||||
|
@ -211,12 +212,17 @@ impl DirectXRenderer {
|
|||
}
|
||||
|
||||
pub(crate) fn resize(&mut self, new_size: Size<DevicePixels>) -> Result<()> {
|
||||
let width = new_size.width.0.max(1) as u32;
|
||||
let height = new_size.height.0.max(1) as u32;
|
||||
if self.resources.width == width && self.resources.height == height {
|
||||
return Ok(());
|
||||
}
|
||||
unsafe {
|
||||
let width = new_size.width.0 as u32;
|
||||
let height = new_size.height.0 as u32;
|
||||
// Clear the render target before resizing
|
||||
self.devices.device_context.OMSetRenderTargets(None, None);
|
||||
ManuallyDrop::drop(&mut self.resources.render_target);
|
||||
drop(self.resources.render_target_view[0].take().unwrap());
|
||||
|
||||
self.resources.swap_chain.ResizeBuffers(
|
||||
BUFFER_COUNT as u32,
|
||||
width,
|
||||
|
@ -224,6 +230,7 @@ impl DirectXRenderer {
|
|||
RENDER_TARGET_FORMAT,
|
||||
DXGI_SWAP_CHAIN_FLAG(0),
|
||||
)?;
|
||||
|
||||
self.resources
|
||||
.recreate_resources(&self.devices, width, height)?;
|
||||
self.devices
|
||||
|
@ -385,14 +392,9 @@ impl DirectXRenderer {
|
|||
}
|
||||
|
||||
impl DirectXResources {
|
||||
pub fn new(devices: &DirectXDevices, hwnd: HWND) -> Result<Self> {
|
||||
let (width, height) = unsafe {
|
||||
let mut rect = std::mem::zeroed();
|
||||
GetWindowRect(hwnd, &mut rect)?;
|
||||
let width = (rect.right - rect.left).max(1) as u32;
|
||||
let height = (rect.bottom - rect.top).max(1) as u32;
|
||||
(width, height)
|
||||
};
|
||||
pub fn new(devices: &DirectXDevices) -> Result<Self> {
|
||||
let width = 1;
|
||||
let height = 1;
|
||||
// #[cfg(not(feature = "enable-renderdoc"))]
|
||||
let swap_chain = create_swap_chain(&devices.dxgi_factory, &devices.device, width, height)?;
|
||||
// #[cfg(feature = "enable-renderdoc")]
|
||||
|
@ -413,6 +415,8 @@ impl DirectXResources {
|
|||
render_target_view,
|
||||
msaa_target,
|
||||
msaa_view,
|
||||
width,
|
||||
height,
|
||||
viewport,
|
||||
})
|
||||
}
|
||||
|
@ -431,6 +435,8 @@ impl DirectXResources {
|
|||
self.msaa_target = msaa_target;
|
||||
self.msaa_view = msaa_view;
|
||||
self.viewport = viewport;
|
||||
self.width = width;
|
||||
self.height = height;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
|
@ -181,12 +181,8 @@ fn handle_size_msg(
|
|||
let new_size = size(DevicePixels(width), DevicePixels(height));
|
||||
let scale_factor = lock.scale_factor;
|
||||
if lock.restore_from_minimized.is_some() {
|
||||
// lock.renderer
|
||||
// .update_drawable_size_even_if_unchanged(new_size);
|
||||
lock.renderer.resize(new_size).log_err();
|
||||
lock.callbacks.request_frame = lock.restore_from_minimized.take();
|
||||
} else {
|
||||
// lock.renderer.update_drawable_size(new_size);
|
||||
lock.renderer.resize(new_size).log_err();
|
||||
}
|
||||
let new_size = new_size.to_pixels(scale_factor);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue