MCPcopy Create free account
hub / github.com/Recordscript/recordscript / new

Method new

libs/scrap/src/dxgi/mod.rs:63–172  ·  view source on GitHub ↗
(display: Display)

Source from the content-addressed store, hash-verified

61
62impl Capturer {
63 pub fn new(display: Display) -> io::Result<Capturer> {
64 let mut device = ptr::null_mut();
65 let mut context = ptr::null_mut();
66 let mut duplication = ptr::null_mut();
67 #[allow(invalid_value)]
68 let mut desc = unsafe { mem::MaybeUninit::uninit().assume_init() };
69 #[allow(invalid_value)]
70 let mut adapter_desc1 = unsafe { mem::MaybeUninit::uninit().assume_init() };
71 let mut gdi_capturer = None;
72
73 let mut res = if display.gdi {
74 wrap_hresult(1)
75 } else {
76 let res = wrap_hresult(unsafe {
77 D3D11CreateDevice(
78 display.adapter.0 as *mut _,
79 D3D_DRIVER_TYPE_UNKNOWN,
80 ptr::null_mut(), // No software rasterizer.
81 0, // No device flags.
82 ptr::null_mut(), // Feature levels.
83 0, // Feature levels' length.
84 D3D11_SDK_VERSION,
85 &mut device,
86 ptr::null_mut(),
87 &mut context,
88 )
89 });
90 if res.is_ok() {
91 wrap_hresult(unsafe { (*display.adapter.0).GetDesc1(&mut adapter_desc1) })
92 } else {
93 res
94 }
95 };
96 let device = ComPtr(device);
97 let context = ComPtr(context);
98
99 if res.is_err() {
100 gdi_capturer = display.create_gdi();
101 println!("Fallback to GDI");
102 if gdi_capturer.is_some() {
103 res = Ok(());
104 }
105 } else {
106 res = wrap_hresult(unsafe {
107 let hres = (*display.inner.0).DuplicateOutput(device.0 as *mut _, &mut duplication);
108 if hres != S_OK {
109 gdi_capturer = display.create_gdi();
110 println!("Fallback to GDI");
111 if gdi_capturer.is_some() {
112 S_OK
113 } else {
114 hres
115 }
116 } else {
117 hres
118 }
119 // NVFBC(NVIDIA Capture SDK) which xpra used already deprecated, https://developer.nvidia.com/capture-sdk
120

Callers

nothing calls this directly

Calls 6

wrap_hresultFunction · 0.85
ComPtrClass · 0.85
create_gdiMethod · 0.80
is_nullMethod · 0.45
widthMethod · 0.45
heightMethod · 0.45

Tested by

no test coverage detected