From d005cbbb0d156528c43971100082b5c12412c435 Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sat, 1 Nov 2025 09:19:59 -0500 Subject: [PATCH 1/2] Updated build.rs to tell RustC that dxgi, quartz and x11 are expected configurations. Updated uses of mem::uninitialized in dxgi/mod.rs and quartz/display.rs to use mem::zeroed instead. Added a local copy of D3D_FEATURE_LEVEL_9_1 in Capturer::new in dxgi/mod.rs so that it can be passed in to D3D11CreateDevice as mutable. Added a type annotation for the IDXGIOutput1 pointer used in Displays::read_and_invalidate in dxgi/mod.rs. --- build.rs | 1 + src/dxgi/mod.rs | 18 ++++++++++-------- src/quartz/display.rs | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build.rs b/build.rs index 24160e201..ef6cf4397 100644 --- a/build.rs +++ b/build.rs @@ -1,4 +1,5 @@ fn main() { + println!("cargo::rustc-check-cfg=cfg(dxgi,quartz,x11)"); if cfg!(windows) { // The first choice is Windows because DXGI is amazing. println!("cargo:rustc-cfg=dxgi"); diff --git a/src/dxgi/mod.rs b/src/dxgi/mod.rs index b2ad8a116..7e9b0d8e9 100644 --- a/src/dxgi/mod.rs +++ b/src/dxgi/mod.rs @@ -50,9 +50,11 @@ impl Capturer { let mut device = ptr::null_mut(); let mut context = ptr::null_mut(); let mut duplication = ptr::null_mut(); - let mut desc = unsafe { mem::uninitialized() }; + let mut desc = unsafe { mem::zeroed() }; if unsafe { + let mut feature_level = D3D_FEATURE_LEVEL_9_1; + D3D11CreateDevice( &mut **display.adapter, D3D_DRIVER_TYPE_UNKNOWN, @@ -62,7 +64,7 @@ impl Capturer { 0, // Feature levels' length. D3D11_SDK_VERSION, &mut device, - &mut D3D_FEATURE_LEVEL_9_1, + &mut feature_level, &mut context ) } != S_OK { @@ -105,7 +107,7 @@ impl Capturer { unsafe fn load_frame(&mut self, timeout: UINT) -> io::Result<()> { let mut frame = ptr::null_mut(); - let mut info = mem::uninitialized(); + let mut info = mem::zeroed(); self.data = ptr::null_mut(); wrap_hresult((*self.duplication).AcquireNextFrame( @@ -115,7 +117,7 @@ impl Capturer { ))?; if self.fastlane { - let mut rect = mem::uninitialized(); + let mut rect = mem::zeroed(); let res = wrap_hresult( (*self.duplication).MapDesktopSurface(&mut rect) ); @@ -133,7 +135,7 @@ impl Capturer { self.surface = ptr::null_mut(); self.surface = self.ohgodwhat(frame)?; - let mut rect = mem::uninitialized(); + let mut rect = mem::zeroed(); wrap_hresult((*self.surface).Map( &mut rect, DXGI_MAP_READ @@ -155,7 +157,7 @@ impl Capturer { &mut texture as *mut *mut _ as *mut *mut _ ); - let mut texture_desc = mem::uninitialized(); + let mut texture_desc = mem::zeroed(); (*texture).GetDesc(&mut texture_desc); texture_desc.Usage = D3D11_USAGE_STAGING; @@ -302,14 +304,14 @@ impl Displays { // We get the display's details. let desc = unsafe { - let mut desc = mem::uninitialized(); + let mut desc = mem::zeroed(); (*output).GetDesc(&mut desc); desc }; // We cast it up to the version needed for desktop duplication. - let mut inner = ptr::null_mut(); + let mut inner = ptr::null_mut() as *mut IDXGIOutput1; unsafe { (*output).QueryInterface( &IID_IDXGIOUTPUT1, diff --git a/src/quartz/display.rs b/src/quartz/display.rs index 5944f5a94..529351115 100644 --- a/src/quartz/display.rs +++ b/src/quartz/display.rs @@ -12,7 +12,7 @@ impl Display { pub fn online() -> Result, CGError> { unsafe { - let mut arr: [u32; 16] = mem::uninitialized(); + let mut arr: [u32; 16] = mem::zeroed(); let mut len: u32 = 0; match CGGetOnlineDisplayList(16, arr.as_mut_ptr(), &mut len) { From a738c651a2421757e1e760d541991fdbd44fa791 Mon Sep 17 00:00:00 2001 From: Jonathan Gilbert Date: Sat, 1 Nov 2025 09:32:41 -0500 Subject: [PATCH 2/2] Updated Cargo.toml to explicitly specify the 2015 edition of Rust. --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index d81b58195..6102a4c8d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,4 +1,5 @@ [package] +edition = "2015" name = "scrap" description = "Screen capture made easy." version = "0.5.0"