From 8b799e817e0f19c584c51c2f16bf19092199cfc4 Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Sun, 9 Jan 2022 16:19:31 +0000 Subject: [PATCH] add depth screenshot. I have an idea --- src/bin/platformer/main.rs | 16 ++++++++++++++++ src/prelude.rs | 1 + 2 files changed, 17 insertions(+) diff --git a/src/bin/platformer/main.rs b/src/bin/platformer/main.rs index adfeb56..9244d42 100644 --- a/src/bin/platformer/main.rs +++ b/src/bin/platformer/main.rs @@ -300,6 +300,8 @@ async fn main () -> Result <()> { let mut next_upf_print = 60; let mut last_upf_instant = Instant::now (); + let mut depth_buffer = vec! [0u32; 320 * 2 * 240 * 2]; + 'running: loop { let _frames_to_do = time_step.step (); let mut player_gamepad = virtual_gamepad::VirtualGamepad::default (); @@ -313,6 +315,16 @@ async fn main () -> Result <()> { Event::KeyDown { keycode: Some (Keycode::R), .. } => { game_state.logic.reset_level (&level); }, + Event::KeyDown { keycode: Some (Keycode::F12), .. } => { + let depth_bytes: Vec = depth_buffer.iter () + .map (|x| (x >> 16) as u16) + .map (|x| x.to_le_bytes ()) + .flatten () + .collect (); + + let mut f = std::fs::File::create ("screenshot.data")?; + f.write_all (&depth_bytes)?; + }, Event::KeyDown { scancode: Some (Scancode::Space), repeat: false, .. } => { player_gamepad.jump.pressed = true; }, @@ -385,6 +397,10 @@ async fn main () -> Result <()> { window.gl_swap_window (); + unsafe { + gl::ReadPixels (0, 0, 320 * 2, 240 * 2, gl::DEPTH_COMPONENT, gl::UNSIGNED_INT, &mut depth_buffer [0] as *mut u32 as *mut std::ffi::c_void); + } + tokio::time::sleep (Duration::from_millis (10)).await; } diff --git a/src/prelude.rs b/src/prelude.rs index 9b6ac1e..0173a97 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -4,6 +4,7 @@ pub use std::{ CString, c_void, }, + io::Write, time::Duration, };