revert scrap dxgi mode.rs
Signed-off-by: fufesou <shuanglongchen@yeah.net>
This commit is contained in:
		
							parent
							
								
									8f7b4b198d
								
							
						
					
					
						commit
						4d6358f1c8
					
				| @ -62,7 +62,7 @@ impl Capturer { | ||||
|         let mut desc = unsafe { mem::MaybeUninit::uninit().assume_init() }; | ||||
|         let mut gdi_capturer = None; | ||||
| 
 | ||||
|         let mut res = if display.gdi.is_some() { | ||||
|         let mut res = if display.gdi { | ||||
|             wrap_hresult(1) | ||||
|         } else { | ||||
|             wrap_hresult(unsafe { | ||||
| @ -367,60 +367,48 @@ impl Displays { | ||||
|         let mut i: DWORD = 0; | ||||
|         loop { | ||||
|             #[allow(invalid_value)] | ||||
|             let mut dd: DISPLAY_DEVICEW = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; | ||||
|             dd.cb = std::mem::size_of::<DISPLAY_DEVICEW>() as _; | ||||
|             let ok = unsafe { EnumDisplayDevicesW(std::ptr::null(), i, &mut dd as _, 0) }; | ||||
|             let mut d: DISPLAY_DEVICEW = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; | ||||
|             d.cb = std::mem::size_of::<DISPLAY_DEVICEW>() as _; | ||||
|             let ok = unsafe { EnumDisplayDevicesW(std::ptr::null(), i, &mut d as _, 0) }; | ||||
|             if ok == FALSE { | ||||
|                 break; | ||||
|             } | ||||
|             i += 1; | ||||
|             if 0 == (dd.StateFlags & DISPLAY_DEVICE_ACTIVE) | ||||
|                 || (dd.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) > 0 | ||||
|             if 0 == (d.StateFlags & DISPLAY_DEVICE_ACTIVE) | ||||
|                 || (d.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) > 0 | ||||
|             { | ||||
|                 continue; | ||||
|             } | ||||
|             // let is_primary = (d.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) > 0;
 | ||||
|             let mut disp = Display { | ||||
|                 inner: ComPtr(std::ptr::null_mut()), | ||||
|                 adapter: ComPtr(std::ptr::null_mut()), | ||||
|                 desc: unsafe { std::mem::zeroed() }, | ||||
|                 gdi: None, | ||||
|                 gdi: true, | ||||
|             }; | ||||
|             disp.desc.DeviceName = dd.DeviceName.clone(); | ||||
|             disp.desc.DeviceName = d.DeviceName; | ||||
|             #[allow(invalid_value)] | ||||
|             let mut dm: DEVMODEW = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; | ||||
|             dm.dmSize = std::mem::size_of::<DEVMODEW>() as _; | ||||
|             dm.dmDriverExtra = 0; | ||||
|             unsafe { | ||||
|                 if FALSE | ||||
|                     == EnumDisplaySettingsExW( | ||||
|                         disp.desc.DeviceName.as_ptr(), | ||||
|                         ENUM_CURRENT_SETTINGS, | ||||
|                         &mut dm as _, | ||||
|                         0, | ||||
|                     ) | ||||
|                 { | ||||
|                     if FALSE | ||||
|                         == EnumDisplaySettingsExW( | ||||
|                             disp.desc.DeviceName.as_ptr(), | ||||
|                             ENUM_REGISTRY_SETTINGS, | ||||
|                             &mut dm as _, | ||||
|                             0, | ||||
|                         ) | ||||
|                     { | ||||
|                         continue; | ||||
|                     } | ||||
|                 } | ||||
|             let mut m: DEVMODEW = unsafe { std::mem::MaybeUninit::uninit().assume_init() }; | ||||
|             m.dmSize = std::mem::size_of::<DEVMODEW>() as _; | ||||
|             m.dmDriverExtra = 0; | ||||
|             let ok = unsafe { | ||||
|                 EnumDisplaySettingsExW( | ||||
|                     disp.desc.DeviceName.as_ptr(), | ||||
|                     ENUM_CURRENT_SETTINGS, | ||||
|                     &mut m as _, | ||||
|                     0, | ||||
|                 ) | ||||
|             }; | ||||
|             if ok == FALSE { | ||||
|                 continue; | ||||
|             } | ||||
|             disp.desc.DesktopCoordinates.left = unsafe { dm.u1.s2().dmPosition.x }; | ||||
|             disp.desc.DesktopCoordinates.top = unsafe { dm.u1.s2().dmPosition.y }; | ||||
|             disp.desc.DesktopCoordinates.left = unsafe { m.u1.s2().dmPosition.x }; | ||||
|             disp.desc.DesktopCoordinates.top = unsafe { m.u1.s2().dmPosition.y }; | ||||
|             disp.desc.DesktopCoordinates.right = | ||||
|                 disp.desc.DesktopCoordinates.left + dm.dmPelsWidth as i32; | ||||
|                 disp.desc.DesktopCoordinates.left + m.dmPelsWidth as i32; | ||||
|             disp.desc.DesktopCoordinates.bottom = | ||||
|                 disp.desc.DesktopCoordinates.top + dm.dmPelsHeight as i32; | ||||
|                 disp.desc.DesktopCoordinates.top + m.dmPelsHeight as i32; | ||||
|             disp.desc.AttachedToDesktop = 1; | ||||
| 
 | ||||
|             let is_primary = (dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) > 0; | ||||
|             disp.gdi = Some(GdiDisplayInfo { dd, dm, is_primary }); | ||||
|             all.push(disp); | ||||
|         } | ||||
|         all | ||||
| @ -488,7 +476,7 @@ impl Displays { | ||||
|             inner: ComPtr(inner), | ||||
|             adapter: ComPtr(self.adapter.0), | ||||
|             desc, | ||||
|             gdi: None, | ||||
|             gdi: false, | ||||
|         })) | ||||
|     } | ||||
| } | ||||
| @ -524,13 +512,7 @@ pub struct Display { | ||||
|     inner: ComPtr<IDXGIOutput1>, | ||||
|     adapter: ComPtr<IDXGIAdapter1>, | ||||
|     desc: DXGI_OUTPUT_DESC, | ||||
|     gdi: Option<GdiDisplayInfo>, | ||||
| } | ||||
| 
 | ||||
| pub struct GdiDisplayInfo { | ||||
|     pub dd: DISPLAY_DEVICEW, | ||||
|     pub dm: DEVMODEW, | ||||
|     pub is_primary: bool, | ||||
|     gdi: bool, | ||||
| } | ||||
| 
 | ||||
| // optimized for updated region
 | ||||
| @ -555,10 +537,6 @@ impl Display { | ||||
|         self.desc.Rotation | ||||
|     } | ||||
| 
 | ||||
|     pub fn gdi(&self) -> &Option<GdiDisplayInfo> { | ||||
|         &self.gdi | ||||
|     } | ||||
| 
 | ||||
|     fn create_gdi(&self) -> Option<CapturerGDI> { | ||||
|         if let Ok(res) = CapturerGDI::new(self.name(), self.width(), self.height()) { | ||||
|             Some(res) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user