Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
Signed-off-by: sagudev <16504129+sagudev@users.noreply.github.com>
  • Loading branch information
sagudev committed Oct 1, 2024
1 parent 5d0d31c commit e489878
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 14 deletions.
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }
Expand Down
23 changes: 10 additions & 13 deletions src/chains.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<gl::NativeFramebuffer> {
NonZero::new(framebuffer).map(gl::NativeFramebuffer)
}

impl crate::SurfaceInfo {
fn framebuffer(&self) -> Option<gl::NativeFramebuffer> {
framebuffer(self.framebuffer_object)
NonZero::new(self.framebuffer_object).map(gl::NativeFramebuffer)
}
}

Expand Down Expand Up @@ -359,22 +355,23 @@ impl<Device: DeviceAPI> SwapChainData<Device> {
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[..]);
}
Expand Down Expand Up @@ -429,8 +426,8 @@ impl<Device: DeviceAPI> SwapChainData<Device> {

// 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],
Expand All @@ -445,7 +442,7 @@ impl<Device: DeviceAPI> SwapChainData<Device> {
);
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);
Expand Down

0 comments on commit e489878

Please sign in to comment.