From e489878c92aa93dd91b11f4da9a5acf9213918c4 Mon Sep 17 00:00:00 2001 From: sagudev <16504129+sagudev@users.noreply.github.com> Date: Tue, 1 Oct 2024 12:31:02 +0200 Subject: [PATCH] WIP Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com> --- Cargo.toml | 2 +- src/chains.rs | 23 ++++++++++------------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 201711a8..76faaf43 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,7 @@ euclid = "0.22" fnv = { version = "1.0", optional = true } libc = "0.2" log = "0.4" -glow = { version = "0.14", optional = true } +glow = { git = "https://github.com/grovesNL/glow.git", optional = true } osmesa-sys = { version = "0.1", optional = true } rwh_05 = { package = "raw-window-handle", version = "0.5.2", features = ["std"], optional = true } rwh_06 = { package = "raw-window-handle", version = "0.6.2", features = ["std"], optional = true } diff --git a/src/chains.rs b/src/chains.rs index 3495577b..92486ac4 100644 --- a/src/chains.rs +++ b/src/chains.rs @@ -37,13 +37,9 @@ use std::mem; use std::num::NonZero; use std::sync::{Arc, Mutex, MutexGuard, RwLock, RwLockReadGuard, RwLockWriteGuard}; -fn framebuffer(framebuffer: u32) -> Option { - NonZero::new(framebuffer).map(gl::NativeFramebuffer) -} - impl crate::SurfaceInfo { fn framebuffer(&self) -> Option { - framebuffer(self.framebuffer_object) + NonZero::new(self.framebuffer_object).map(gl::NativeFramebuffer) } } @@ -359,22 +355,23 @@ impl SwapChainData { self.validate_context(device, context)?; // Save the current GL state - let mut bound_fbos = [0, 0]; + let draw_fbo; + let read_fbo; let mut clear_color = [0., 0., 0., 0.]; let mut clear_depth = [0.]; let mut clear_stencil = [0]; let mut color_mask = [0, 0, 0, 0]; - let mut depth_mask = [0]; + let depth_mask; let mut stencil_mask = [0]; let scissor_enabled = unsafe { gl.is_enabled(gl::SCISSOR_TEST) }; let rasterizer_enabled = unsafe { gl.is_enabled(gl::RASTERIZER_DISCARD) }; unsafe { - gl.get_parameter_i32_slice(gl::DRAW_FRAMEBUFFER_BINDING, &mut bound_fbos[0..]); - gl.get_parameter_i32_slice(gl::READ_FRAMEBUFFER_BINDING, &mut bound_fbos[1..]); + draw_fbo = gl.get_parameter_framebuffer(gl::DRAW_FRAMEBUFFER_BINDING); + read_fbo = gl.get_parameter_framebuffer(gl::READ_FRAMEBUFFER_BINDING); gl.get_parameter_f32_slice(gl::COLOR_CLEAR_VALUE, &mut clear_color[..]); gl.get_parameter_f32_slice(gl::DEPTH_CLEAR_VALUE, &mut clear_depth[..]); gl.get_parameter_i32_slice(gl::STENCIL_CLEAR_VALUE, &mut clear_stencil[..]); - gl.get_parameter_i32_slice(gl::DEPTH_WRITEMASK, &mut depth_mask[..]); + depth_mask = gl.get_parameter_bool(gl::DEPTH_WRITEMASK); gl.get_parameter_i32_slice(gl::STENCIL_WRITEMASK, &mut stencil_mask[..]); gl.get_parameter_i32_slice(gl::COLOR_WRITEMASK, &mut color_mask[..]); } @@ -429,8 +426,8 @@ impl SwapChainData { // Restore the GL state unsafe { - gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, framebuffer(bound_fbos[0] as _)); - gl.bind_framebuffer(gl::READ_FRAMEBUFFER, framebuffer(bound_fbos[1] as _)); + gl.bind_framebuffer(gl::DRAW_FRAMEBUFFER, draw_fbo); + gl.bind_framebuffer(gl::READ_FRAMEBUFFER, read_fbo); gl.clear_color( clear_color[0], clear_color[1], @@ -445,7 +442,7 @@ impl SwapChainData { ); gl.clear_depth_f64(clear_depth[0] as f64); gl.clear_stencil(clear_stencil[0]); - gl.depth_mask(depth_mask[0] != 0); + gl.depth_mask(depth_mask); gl.stencil_mask(stencil_mask[0] as _); if scissor_enabled { gl.enable(gl::SCISSOR_TEST);