From 5104b0c95bdb979116e010f6eecea4762c39ad22 Mon Sep 17 00:00:00 2001 From: Tiago Lernould Date: Wed, 18 May 2022 18:42:30 +0200 Subject: [PATCH 1/5] Hide the buttons otherwise they cause an (expected) panic --- src/ui/file.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/file.rs b/src/ui/file.rs index 4aa19f3a..73fced98 100644 --- a/src/ui/file.rs +++ b/src/ui/file.rs @@ -21,6 +21,7 @@ pub(crate) fn draw_ui(ui: &mut Ui, event_proxy: &EventLoopProxy) { .expect("cannot send load file event"); } } + #[cfg(feature = "save_state")] { ui.separator(); if ui.button("Save As").clicked() { From 168d00110112ed3a5d4dfcfb8e340ee8d844630d Mon Sep 17 00:00:00 2001 From: Tiago Lernould Date: Wed, 18 May 2022 18:44:43 +0200 Subject: [PATCH 2/5] removing dead code --- gb-lcd/src/error.rs | 20 ---- gb-lcd/src/lib.rs | 16 ---- gb-lcd/src/render.frag | 7 -- gb-lcd/src/render.rs | 211 ----------------------------------------- gb-lcd/src/render.vert | 9 -- gb-lcd/src/shader.rs | 68 ------------- 6 files changed, 331 deletions(-) delete mode 100644 gb-lcd/src/error.rs delete mode 100644 gb-lcd/src/render.frag delete mode 100644 gb-lcd/src/render.rs delete mode 100644 gb-lcd/src/render.vert delete mode 100644 gb-lcd/src/shader.rs diff --git a/gb-lcd/src/error.rs b/gb-lcd/src/error.rs deleted file mode 100644 index d2d41712..00000000 --- a/gb-lcd/src/error.rs +++ /dev/null @@ -1,20 +0,0 @@ -use std::fmt; - -#[derive(Debug)] -pub enum Error { - MainSys(String), - GBWindowInit(String), - GBWindowFrame(String), -} - -impl fmt::Display for Error { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - Error::MainSys(msg) => write!(f, "Failed to init global system: {}", msg), - Error::GBWindowInit(msg) => write!(f, "Failed to init a GB Window: {}", msg), - Error::GBWindowFrame(msg) => write!(f, "Error while running a GB Window frame: {}", msg), - } - } -} - -impl std::error::Error for Error {} diff --git a/gb-lcd/src/lib.rs b/gb-lcd/src/lib.rs index d2b7f20e..baf9df05 100644 --- a/gb-lcd/src/lib.rs +++ b/gb-lcd/src/lib.rs @@ -17,22 +17,6 @@ use winit::{ window::{Window, WindowId}, }; -// use error::Error; -// use sdl2::{video::GLProfile, EventPump, Sdl, VideoSubsystem}; - -// pub fn init() -> Result<(Sdl, VideoSubsystem, EventPump), Error> { -// let sdl_context = sdl2::init().map_err(Error::MainSys)?; -// let video_subsystem = sdl_context.video().map_err(Error::MainSys)?; - -// let event_pump = sdl_context.event_pump().map_err(Error::MainSys)?; - -// let gl_attr = video_subsystem.gl_attr(); -// gl_attr.set_context_profile(GLProfile::Core); -// // OpenGL 3.3 is the minimum that we will support. -// gl_attr.set_context_version(3, 3); - -// Ok((sdl_context, video_subsystem, event_pump)) -// } pub trait PseudoWindow { /// Returns the scale factor that can be used to map logical pixels to physical pixels, and vice versa. diff --git a/gb-lcd/src/render.frag b/gb-lcd/src/render.frag deleted file mode 100644 index 46b32eb6..00000000 --- a/gb-lcd/src/render.frag +++ /dev/null @@ -1,7 +0,0 @@ -#version 330 -in vec2 text_coord; -uniform sampler2D render_texture; -out vec4 out_color; -void main(){ - out_color=texture(render_texture,text_coord*vec2(1.,-1.)); -} diff --git a/gb-lcd/src/render.rs b/gb-lcd/src/render.rs deleted file mode 100644 index 7293cce3..00000000 --- a/gb-lcd/src/render.rs +++ /dev/null @@ -1,211 +0,0 @@ -use egui_sdl2_gl::gl; -use egui_sdl2_gl::gl::types::*; -use std::ffi::CString; -use std::mem; -use std::os::raw::c_void; -use std::ptr; -use std::str; - -use crate::shader; - -pub const SCREEN_WIDTH: usize = 160; -pub const SCREEN_HEIGHT: usize = 144; -pub const MENU_BAR_SIZE: f32 = 30.0; - -pub type ImageRGB = [[[u8; 3]; WIDTH]; HEIGHT]; -pub type Render = RenderImage; - -const VS_SRC: &str = include_str!("render.vert"); -const FS_SRC: &str = include_str!("render.frag"); - -static VERTEX_DATA: [GLfloat; 12] = [ - -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -]; - -pub struct RenderImage { - vs: GLuint, - fs: GLuint, - program: GLuint, - vao: GLuint, - vbo: GLuint, - texture_buffer: GLuint, - scale: (f32, f32), - offset: (f32, f32), - menu_bar_size: f32, -} - -impl RenderImage { - pub fn new() -> Self { - Self::with_bar_size(MENU_BAR_SIZE) - } - - pub fn with_bar_size(menu_bar_size: f32) -> Self { - let texture_size = WIDTH * HEIGHT; - // Create Vertex Array Object - let mut vao = 0; - let mut vbo = 0; - let vs = shader::compile(VS_SRC, gl::VERTEX_SHADER); - let fs = shader::compile(FS_SRC, gl::FRAGMENT_SHADER); - let program = shader::link(vs, fs); - unsafe { - gl::GenVertexArrays(1, &mut vao); - gl::GenBuffers(1, &mut vbo); - } - let mut texture_data: Vec<[u8; 3]> = Vec::new(); - texture_data.resize(texture_size as usize, [255; 3]); - let mut texture_buffer = 0; - unsafe { - gl::GenTextures(1, &mut texture_buffer); - gl::BindTexture(gl::TEXTURE_2D, texture_buffer); - gl::TexImage2D( - gl::TEXTURE_2D, - 0, - gl::RGB as i32, - WIDTH as i32, - HEIGHT as i32, - 0, - gl::RGB, - gl::UNSIGNED_BYTE, - &texture_data.as_slice() as *const _ as *const c_void, - ); - } - RenderImage { - vs, - fs, - program, - vao, - vbo, - texture_buffer, - scale: (1.0, 1.0), - offset: (0.0, 0.0), - menu_bar_size, - } - } - - #[cfg(feature = "debug_render")] - pub fn switch_draw_mode(&self, lines: bool) { - unsafe { - gl::PolygonMode(gl::FRONT_AND_BACK, if lines { gl::LINE } else { gl::FILL }); - } - } - - pub fn resize(&mut self, dim: (u32, u32)) { - let dim = (dim.0 as f32, dim.1 as f32); - let screen_ratio = WIDTH as f32 / HEIGHT as f32; - - let free_dim = (dim.0, dim.1 - self.menu_bar_size); - let free_ratio = dim.1 / free_dim.1; - let actual_ratio = free_dim.0 / free_dim.1; - - let target_dim = if screen_ratio > actual_ratio { - (dim.0, dim.0 / screen_ratio) - } else { - let tmp_dim = (dim.1 * screen_ratio, dim.1); - if tmp_dim.1 > free_dim.1 { - (tmp_dim.0 / free_ratio, tmp_dim.1 / free_ratio) - } else { - tmp_dim - } - }; - let final_dim = (target_dim.0 as u32, target_dim.1 as u32); - - self.scale = (final_dim.0 as f32 / dim.0, final_dim.1 as f32 / dim.1); - self.offset = (0.0, self.scale.1 - 1.0); - if screen_ratio > actual_ratio { - self.offset.1 += 1.0 * (free_dim.1 - target_dim.1) / dim.1; - } - } - - pub fn update_render(&mut self, texture_pixels: &ImageRGB) { - unsafe { - gl::BindTexture(gl::TEXTURE_2D, self.texture_buffer); - gl::TexSubImage2D( - gl::TEXTURE_2D, - 0, - 0, - 0, - WIDTH as i32, - HEIGHT as i32, - gl::RGB, - gl::UNSIGNED_BYTE, - texture_pixels as *const _ as *const c_void, - ); - } - } - - pub fn draw(&self) { - unsafe { - gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MIN_FILTER, gl::NEAREST as i32); - gl::TexParameteri(gl::TEXTURE_2D, gl::TEXTURE_MAG_FILTER, gl::NEAREST as i32); - gl::BindVertexArray(self.vao); - - // Create a Vertex Buffer Object and copy the vertex data to it - - gl::BindBuffer(gl::ARRAY_BUFFER, self.vbo); - gl::BufferData( - gl::ARRAY_BUFFER, - (VERTEX_DATA.len() * mem::size_of::()) as GLsizeiptr, - mem::transmute(&VERTEX_DATA[0]), - gl::STATIC_DRAW, - ); - - // Use shader program - gl::UseProgram(self.program); - let uniform_loc = gl::GetUniformLocation( - self.program, - CString::new("scale").unwrap().as_c_str().as_ptr(), - ); - gl::Uniform2f(uniform_loc, self.scale.0, self.scale.1); - let uniform_loc = gl::GetUniformLocation( - self.program, - CString::new("offset").unwrap().as_c_str().as_ptr(), - ); - gl::Uniform2f(uniform_loc, self.offset.0, self.offset.1); - let c_out_color = CString::new("out_color").unwrap(); - gl::BindFragDataLocation(self.program, 0, c_out_color.as_ptr()); - - let uniform_loc = gl::GetUniformLocation( - self.program, - CString::new("render_texture").unwrap().as_c_str().as_ptr(), - ); - gl::Uniform1i(uniform_loc, 1); - gl::ActiveTexture(gl::TEXTURE0 + 1); - gl::BindTexture(gl::TEXTURE_2D, self.texture_buffer); - - // Specify the layout of the vertex data - let c_position = CString::new("position").unwrap(); - let pos_attr = gl::GetAttribLocation(self.program, c_position.as_ptr()); - gl::EnableVertexAttribArray(pos_attr as GLuint); - gl::VertexAttribPointer( - pos_attr as GLuint, - 2, - gl::FLOAT, - gl::FALSE as GLboolean, - 0, - ptr::null(), - ); - - // Draw a triangle from the 3 vertices - gl::DrawArrays(gl::TRIANGLES, 0, 6); - } - } -} - -impl Drop for RenderImage { - fn drop(&mut self) { - unsafe { - gl::DeleteProgram(self.program); - gl::DeleteShader(self.fs); - gl::DeleteShader(self.vs); - gl::DeleteBuffers(1, &self.vbo); - gl::DeleteVertexArrays(1, &self.vao); - gl::DeleteTextures(1, &self.texture_buffer); - } - } -} - -impl Default for RenderImage { - fn default() -> RenderImage { - RenderImage::new() - } -} diff --git a/gb-lcd/src/render.vert b/gb-lcd/src/render.vert deleted file mode 100644 index a04d06f1..00000000 --- a/gb-lcd/src/render.vert +++ /dev/null @@ -1,9 +0,0 @@ -#version 330 -uniform vec2 scale; -uniform vec2 offset; -in vec2 position; -out vec2 text_coord; -void main(){ - text_coord=(position+1.)*.5; - gl_Position=vec4(position*scale+offset,0.,1.); -} diff --git a/gb-lcd/src/shader.rs b/gb-lcd/src/shader.rs deleted file mode 100644 index ae542deb..00000000 --- a/gb-lcd/src/shader.rs +++ /dev/null @@ -1,68 +0,0 @@ -use egui_sdl2_gl::gl; -use egui_sdl2_gl::gl::types::*; -use std::ffi::CString; -use std::ptr; -use std::str; - -pub fn compile(src: &str, ty: GLenum) -> GLuint { - let shader; - unsafe { - shader = gl::CreateShader(ty); - // Attempt to compile the shader - let c_str = CString::new(src.as_bytes()).unwrap(); - gl::ShaderSource(shader, 1, &c_str.as_ptr(), ptr::null()); - gl::CompileShader(shader); - - // Get the compile status - let mut status = gl::FALSE as GLint; - gl::GetShaderiv(shader, gl::COMPILE_STATUS, &mut status); - - // Fail on error - if status != (gl::TRUE as GLint) { - let mut len = 0; - gl::GetShaderiv(shader, gl::INFO_LOG_LENGTH, &mut len); - let mut buf = Vec::with_capacity(len as usize - 1); - gl::GetShaderInfoLog( - shader, - len, - ptr::null_mut(), - buf.as_mut_ptr() as *mut GLchar, - ); - panic!( - "{}", - str::from_utf8(&buf).expect("ShaderInfoLog not valid utf8") - ); - } - } - shader -} - -pub fn link(vs: GLuint, fs: GLuint) -> GLuint { - unsafe { - let program = gl::CreateProgram(); - gl::AttachShader(program, vs); - gl::AttachShader(program, fs); - gl::LinkProgram(program); - // Get the link status - let mut status = gl::FALSE as GLint; - gl::GetProgramiv(program, gl::LINK_STATUS, &mut status); - - // Fail on error - if status != (gl::TRUE as GLint) { - let mut len: GLint = 0; - gl::GetProgramiv(program, gl::INFO_LOG_LENGTH, &mut len); - let mut buf = Vec::with_capacity(len as usize - 1); - gl::GetProgramInfoLog( - program, - len, - ptr::null_mut(), - buf.as_mut_ptr() as *mut GLchar, - ); - panic!( - "{}", - str::from_utf8(&buf).expect("ProgramInfoLog not valid utf8") - ); - } - program - } -} From c0ee2c796254e1655dc5a4928b8d4cdff07b52f3 Mon Sep 17 00:00:00 2001 From: Tiago Lernould Date: Thu, 19 May 2022 11:50:39 +0200 Subject: [PATCH 3/5] remove extra newline --- gb-lcd/src/lib.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/gb-lcd/src/lib.rs b/gb-lcd/src/lib.rs index baf9df05..c17e4771 100644 --- a/gb-lcd/src/lib.rs +++ b/gb-lcd/src/lib.rs @@ -17,7 +17,6 @@ use winit::{ window::{Window, WindowId}, }; - pub trait PseudoWindow { /// Returns the scale factor that can be used to map logical pixels to physical pixels, and vice versa. /// From 71747d2a08320a1264d7a31c86bd097424c0704f Mon Sep 17 00:00:00 2001 From: Tiago Lernould Date: Thu, 19 May 2022 11:51:25 +0200 Subject: [PATCH 4/5] remove dead code in ui.rs --- src/ui.rs | 57 ------------------------------------------------------- 1 file changed, 57 deletions(-) diff --git a/src/ui.rs b/src/ui.rs index d0a1a947..63ed18e8 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -17,74 +17,17 @@ pub fn draw_egui(context: &mut Context) { .main_window .context .prepare_egui(&context.main_window.window, |egui_ctx| { - // let c1 = Color32::from_rgba_unmultiplied(168, 115, 232, 64); - // let c2 = Color32::from_rgba_unmultiplied(241, 91, 181, 128); - // let c3 = Color32::from_rgba_unmultiplied(254, 228, 64, 255); - // let c4 = Color32::from_rgba_unmultiplied(0, 187, 249, 255); - // let c5 = Color32::from_rgba_unmultiplied(0, 245, 212, 255); - // use egui::{ - // style::{WidgetVisuals, Widgets}, - // Stroke, - // }; - - // let widget_style = Widgets { - // noninteractive: WidgetVisuals { - // bg_fill: c1, - // bg_stroke: Stroke::none(), - // corner_radius: 3., - // fg_stroke: Stroke::none(), - // expansion: 3., - // }, - // inactive: WidgetVisuals { - // bg_fill: c2, - // bg_stroke: Stroke::none(), - // corner_radius: 3., - // fg_stroke: Stroke::none(), - // expansion: 3., - // }, - // hovered: WidgetVisuals { - // bg_fill: c3, - // bg_stroke: Stroke::none(), - // corner_radius: 3., - // fg_stroke: Stroke::none(), - // expansion: 3., - // }, - // active: WidgetVisuals { - // bg_fill: c4, - // bg_stroke: Stroke::none(), - // corner_radius: 3., - // fg_stroke: Stroke::none(), - // expansion: 3., - // }, - // open: WidgetVisuals { - // bg_fill: c5, - // bg_stroke: Stroke::none(), - // corner_radius: 3., - // fg_stroke: Stroke::none(), - // expansion: 3., - // }, - // }; - // egui_ctx.set_visuals(Visuals { - // // dark_mode: false, - // // code_bg_color: Color32::from_rgba_unmultiplied(128, 18, 43, 128), - // widgets: widget_style, - // ..Default::default() - // }); let mut top_frame = egui::Frame::menu(&egui::style::Style::default()); top_frame.margin = egui::style::Margin::symmetric(5.0, 0.0); egui::containers::TopBottomPanel::top("Top menu") .frame(top_frame) .show(egui_ctx, |ui| { - // egui::containers::CentralPanel::default().show(egui_ctx, |ui| { egui::menu::bar(ui, |ui| { ui.set_height(crate::constant::MENU_BAR_SIZE - 1.0); - // ui.style_mut().override_text_style = Some(egui::TextStyle::Heading); file::draw_ui(ui, &context.event_proxy); tools::draw_ui(ui, &context.event_proxy); settings::draw_ui(ui, &context.event_proxy, &mut context.config.mode); - // ui_debug!(ui, context); - // ui.style_mut().override_text_style = None; #[cfg(feature = "fps")] if ui.available_width() >= fps::FPS_WIDTH { fps::draw_ui(ui, &context.time_frame); From 8fa6a4158f0998b965d7801086dbaf830b0b5435 Mon Sep 17 00:00:00 2001 From: Tiago Lernould Date: Thu, 19 May 2022 12:05:20 +0200 Subject: [PATCH 5/5] remove dead code in main + formatting --- src/main.rs | 4 +--- src/ui.rs | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index f149b2fb..14ee0659 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,9 +105,7 @@ fn main() -> Result<(), Error> { | Event::Suspended | Event::RedrawEventsCleared | Event::DeviceEvent { .. } - | Event::NewEvents(_) => { - // log::debug!("ignore event {event:?}"); - } + | Event::NewEvents(_) => {} }) } diff --git a/src/ui.rs b/src/ui.rs index 63ed18e8..89f1d220 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -17,7 +17,6 @@ pub fn draw_egui(context: &mut Context) { .main_window .context .prepare_egui(&context.main_window.window, |egui_ctx| { - let mut top_frame = egui::Frame::menu(&egui::style::Style::default()); top_frame.margin = egui::style::Margin::symmetric(5.0, 0.0); egui::containers::TopBottomPanel::top("Top menu")