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