From bf2f1ee35f2daf02a08c7d80e2218ae6a24bb403 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 20 Apr 2020 04:14:25 -0400 Subject: [PATCH] Everything reenabled, imgui still renders!! --- src/graphics_imgui.rs | 19 +++++++++++++++++++ src/point_cloud/point_cloud_compute_shader.rs | 5 ++++- src/point_cloud/point_cloud_visualiser.rs | 8 ++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/graphics_imgui.rs b/src/graphics_imgui.rs index b7f0bf0600..8a5942e127 100644 --- a/src/graphics_imgui.rs +++ b/src/graphics_imgui.rs @@ -31,6 +31,8 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 let mut last_vertex_array_binding = 0; let mut last_draw_framebuffer_binding = 0; let mut last_read_framebuffer_binding = 0; + let mut last_current_program = 0; + let mut last_active_texture = 0; unsafe { gl::GetIntegerv(gl::TEXTURE_BINDING_2D, &mut last_texture_id); gl::GetIntegerv(gl::ARRAY_BUFFER_BINDING, &mut last_array_buffer_id); @@ -40,6 +42,8 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 gl::GetIntegerv(gl::VERTEX_ARRAY_BINDING, &mut last_vertex_array_binding); gl::GetIntegerv(gl::DRAW_FRAMEBUFFER_BINDING, &mut last_draw_framebuffer_binding); gl::GetIntegerv(gl::READ_FRAMEBUFFER_BINDING, &mut last_read_framebuffer_binding); + gl::GetIntegerv(gl::CURRENT_PROGRAM, &mut last_current_program); + gl::GetIntegerv(gl::ACTIVE_TEXTURE, &mut last_active_texture); } let mut visualizer = PointCloudVisualizer::new( @@ -56,6 +60,8 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 gl::BindVertexArray(last_vertex_array_binding as u32); gl::BindFramebuffer(gl::DRAW_FRAMEBUFFER, last_draw_framebuffer_binding as u32); gl::BindFramebuffer(gl::READ_FRAMEBUFFER, last_read_framebuffer_binding as u32); + gl::UseProgram(last_current_program as u32); + gl::ActiveTexture(last_active_texture as u32); } let mut texture = ViewerImage::create( @@ -100,6 +106,9 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 let mut last_vertex_array_binding = 0; let mut last_draw_framebuffer_binding = 0; let mut last_read_framebuffer_binding = 0; + let mut last_current_program = 0; + let mut last_active_texture = 0; + let mut last_depth_test = 0; unsafe { gl::GetIntegerv(gl::TEXTURE_BINDING_2D, &mut last_texture_id); gl::GetIntegerv(gl::ARRAY_BUFFER_BINDING, &mut last_array_buffer_id); @@ -109,6 +118,9 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 gl::GetIntegerv(gl::VERTEX_ARRAY_BINDING, &mut last_vertex_array_binding); gl::GetIntegerv(gl::DRAW_FRAMEBUFFER_BINDING, &mut last_draw_framebuffer_binding); gl::GetIntegerv(gl::READ_FRAMEBUFFER_BINDING, &mut last_read_framebuffer_binding); + gl::GetIntegerv(gl::CURRENT_PROGRAM, &mut last_current_program); + gl::GetIntegerv(gl::ACTIVE_TEXTURE, &mut last_active_texture); + gl::GetBooleanv(gl::DEPTH_TEST, &mut last_depth_test); } visualizer.update_texture(&texture, capture) @@ -134,6 +146,13 @@ pub fn run(capture_provider: Arc, calibration_data: k4a_sys::k4 gl::BindVertexArray(last_vertex_array_binding as u32); gl::BindFramebuffer(gl::DRAW_FRAMEBUFFER, last_draw_framebuffer_binding as u32); gl::BindFramebuffer(gl::READ_FRAMEBUFFER, last_read_framebuffer_binding as u32); + gl::UseProgram(last_current_program as u32); + gl::ActiveTexture(last_active_texture as u32); + if last_depth_test == 0 { + gl::Disable(gl::DEPTH_TEST); + } else { + gl::Enable(gl::DEPTH_TEST); + } } //println!("swapping buffers"); diff --git a/src/point_cloud/point_cloud_compute_shader.rs b/src/point_cloud/point_cloud_compute_shader.rs index a271964b19..9ca2ee092e 100644 --- a/src/point_cloud/point_cloud_compute_shader.rs +++ b/src/point_cloud/point_cloud_compute_shader.rs @@ -351,9 +351,12 @@ impl PointCloudComputeShader { println!("-> gl::MemoryBarrier(TEXTURE_FETCH_BARRIER_BIT)"); gl::MemoryBarrier(gl::TEXTURE_FETCH_BARRIER_BIT); - // TODO: Return status or error. gl_get_error()?; + // NB(bt): Restore to default active texture? Looks like this is required for 'imgui' + // This is needed despite using glGetInteger(GL_ACTIVE_TEXTURE) and resetting that value. + gl::ActiveTexture(gl::TEXTURE0); + Ok(()) } } diff --git a/src/point_cloud/point_cloud_visualiser.rs b/src/point_cloud/point_cloud_visualiser.rs index 33f9aa19a4..0785541496 100644 --- a/src/point_cloud/point_cloud_visualiser.rs +++ b/src/point_cloud/point_cloud_visualiser.rs @@ -251,13 +251,13 @@ impl PointCloudVisualizer { return Err(PointCloudVisualizerError::FramebufferError); } - println!("-> gl::Viewport() {}x{}", self.width, self.height); - gl::Viewport(0, 0, self.width as i32, self.height as i32); + // TODO: This really warps things in 'imgui' land! + // gl::Viewport(0, 0, self.width as i32, self.height as i32); println!("-> gl::Enable(DEPTH_TEST"); gl::Enable(gl::DEPTH_TEST); - //println!("-> gl::ClearColor()"); - //gl::ClearColor(0.0, 0.0, 0.0, 0.0); + println!("-> gl::ClearColor()"); + gl::ClearColor(0.0, 0.0, 0.0, 0.0); println!("-> gl::Clear(COLOR,DEPTH)"); gl::Clear(gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT); }