From 18dffdc8713d9ab09683f73a4a2d5afbef4e8840 Mon Sep 17 00:00:00 2001 From: _ <> Date: Sun, 15 Mar 2020 01:04:44 +0000 Subject: [PATCH] :bug: Fix a bug in gl_state and start prototyping monospace font for UI --- font.png | Bin 0 -> 11414 bytes src/bin/pumpkin.rs | 116 ++++++++++++++++++++++++++++++++++++++++----- src/gl_state.rs | 4 +- src/texture.rs | 11 ++++- 4 files changed, 116 insertions(+), 15 deletions(-) create mode 100644 font.png diff --git a/font.png b/font.png new file mode 100644 index 0000000000000000000000000000000000000000..f8eb352963d6480c75bbbbdc5caf05bbdc3fd2d9 GIT binary patch literal 11414 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 z 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 literal 0 HcmV?d00001 diff --git a/src/bin/pumpkin.rs b/src/bin/pumpkin.rs index b2b452a..b941831 100644 --- a/src/bin/pumpkin.rs +++ b/src/bin/pumpkin.rs @@ -473,6 +473,7 @@ struct GameGraphics { texture_sky: Texture, texture_grass: Texture, + texture_font: Texture, pitch_colors: Vec , grass_index: usize, @@ -537,6 +538,7 @@ impl GameGraphics { let texture_sky = Texture::from_file ("sky.png"); let texture_grass = Texture::from_file ("grass.png"); + let texture_font = Texture::from_file ("font.png"); let (pitch_colors, grass_index) = { let silver = (255.0, 255.0, 255.0); @@ -582,7 +584,9 @@ impl GameGraphics { Pass { iso: IsoGlState { shader_id: None, - flags: hashmap! {}, + flags: hashmap! { + + }, front_face: None, stencil: None, depth_func: None, @@ -749,6 +753,37 @@ impl GameGraphics { stencil_mask: Some (0), }, }, + // Clear depth + Pass { + iso: IsoGlState { + shader_id: None, + flags: hashmap! {}, + front_face: None, + stencil: None, + depth_func: None, + color_mask: None, + depth_mask: Some (1), + stencil_mask: None, + }, + }, + // Draw UI + Pass { + iso: IsoGlState { + shader_id: Some (shaders [0].get_id ()), + flags: hashmap! { + gl::CULL_FACE => false, + gl::DEPTH_TEST => false, + gl::TEXTURE_2D => true, + gl::STENCIL_TEST => false, + }, + front_face: None, + stencil: None, + depth_func: Some (DepthFunc::Less), + color_mask: Some ((1, 1, 1, 1)), + depth_mask: Some (1), + stencil_mask: Some (0), + }, + }, ]; Self { @@ -763,6 +798,7 @@ impl GameGraphics { texture_sky, texture_grass, + texture_font, pitch_colors, grass_index, @@ -777,18 +813,11 @@ impl GameGraphics { ) { let magenta = color_from_255 ((255.0, 0.0, 255.0)); - let orange = color_from_255 ((210.0, 125.0, 44.0)); - let green = color_from_255 ((52.0, 101.0, 36.0)); let white = color_from_255 ((255.0, 255.0, 255.0)); let _off_white = color_from_255 ((222.0, 238.0, 214.0)); let black = color_from_255 ((0.0, 0.0, 0.0)); let _off_black = color_from_255 ((20.0, 12.0, 28.0)); - let pumpkin_colors = vec! [ - orange, - green, - ]; - let light = state.wind_tunnel.sunlight.to_vec3 (); let shadow_mat = { @@ -820,7 +849,9 @@ impl GameGraphics { }; let inverse_airplane = airplane_model_mat.inverse (); - let proj_mat = Mat4::perspective_rh_gl (30.0f32.to_radians (), 1280.0 / 720.0, 0.125, 200.0); + let screen_size = (1280.0, 720.0); + + let proj_mat = Mat4::perspective_rh_gl (30.0f32.to_radians (), screen_size.0 / screen_size.1, 0.125, 200.0); let airplane_scale = 1.0 / 128.0; @@ -929,6 +960,8 @@ impl GameGraphics { } }); + self.texture_grass.bind (); + // Draw unlit ground passes.next ().unwrap ().with_shader (gl_state, self, |shader_vars| { @@ -943,20 +976,18 @@ impl GameGraphics { let mvp = view_mat * world_model_mat; glezz::uniform_matrix_4fv (unis [&MVP], &mvp); - glezz::uniform_3fv (unis [&ALBEDO], &self.pitch_colors [self.grass_index]); - + glezz::uniform_3fv (unis [&ALBEDO], &white); glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &Vec3::from ((0.0, 0.0, 0.0))); self.mesh_pitch.draw (attrs, self.grass_index); }); - self.texture_grass.bind (); - // Draw lit ground passes.next ().unwrap ().with_shader (gl_state, self, |shader_vars| { let unis = shader_vars.unis; let attrs = shader_vars.attrs; + glezz::uniform_3fv (unis [&ALBEDO], &white); glezz::uniform_3fv (unis [&OBJECT_SPACE_LIGHT], &light); glezz::uniform_3fv (unis [&OBJECT_SPACE_SKY], &Vec3::from ((0.0, 0.0, 1.0))); self.mesh_pitch.draw (attrs, self.grass_index); @@ -989,6 +1020,65 @@ impl GameGraphics { self.mesh_arrow.draw_all (shader_vars.attrs, |_| true); } }); + + // Clear depth + passes.next ().unwrap ().with (gl_state, || { + glezz::clear (gl::DEPTH_BUFFER_BIT); + }); + + // Draw UI + + self.texture_font.bind (); + if true { + passes.next ().unwrap ().with_shader (gl_state, self, + |shader_vars| { + let attrs = &shader_vars.attrs; + let unis = &shader_vars.unis; + + glezz::uniform_3fv (unis [&MIN_BRIGHT], &white); + glezz::uniform_3fv (unis [&MIN_ALBEDO], &black); + glezz::uniform_3fv (unis [&ALBEDO], &white); + + let font_size = (8.0, 18.0); + + let mvp = Mat4::from_scale ((2.0 * 256.0 / screen_size.0, 2.0 * 72.0 / screen_size.1, 1.0).into ()); + glezz::uniform_matrix_4fv (unis [&MVP], &mvp); + + let pos: Vec = vec! [ + 0.0, 0.0, 0.0, + 1.0, 0.0, 0.0, + 1.0, 1.0, 0.0, + 0.0, 1.0, 0.0, + ]; + + use std::convert::TryInto; + + let uv: Vec = vec! [ + 0.0, 1.0, + 1.0, 1.0, + 1.0, 0.0, + 0.0, 0.0, + ]; + + let indices: Vec = vec! [ + 0, 1, 2, + 0, 2, 3, + ]; + + unsafe { + use renderable_model::attributes::*; + use std::ffi::c_void; + + gl::BindBuffer (gl::ARRAY_BUFFER, 0); + gl::BindBuffer (gl::ELEMENT_ARRAY_BUFFER, 0); + + gl::VertexAttribPointer (attrs [POS].unwrap (), 3, gl::FLOAT, 0u8, 4 * 3, &pos [0] as *const f32 as *const c_void); + gl::VertexAttribPointer (attrs [UV].unwrap (), 2, gl::FLOAT, 0u8, 4 * 2, &uv [0] as *const f32 as *const c_void); + + gl::DrawRangeElements (gl::TRIANGLES, 0, 6, 6, gl::UNSIGNED_INT, &indices [0] as *const u32 as *const c_void); + } + }); + } } } diff --git a/src/gl_state.rs b/src/gl_state.rs index 846dad7..8b2dfb3 100644 --- a/src/gl_state.rs +++ b/src/gl_state.rs @@ -206,6 +206,7 @@ impl Pass { for (flag, value) in state.flags.iter () { let old_entry = old_state.flags.entry (*flag); + if match &old_entry { hash_map::Entry::Vacant (_) => true, hash_map::Entry::Occupied (o) => o.get () != value, @@ -217,7 +218,7 @@ impl Pass { glezz::disable (*flag); } - old_entry.or_insert (*value); + (*old_entry.or_insert (*value)) = *value; } else { flag_elision_count += 1; @@ -326,6 +327,7 @@ impl Pass { { if let Some (s) = self.iso.shader_id { self.apply_diff (&mut gl_state.iso); + //self.apply_slow (); shader_component.lookup (s).with (gl_state.iso.shader_id, |shader_vars| { callback (shader_vars); }); diff --git a/src/texture.rs b/src/texture.rs index c7fd9aa..ad0888d 100644 --- a/src/texture.rs +++ b/src/texture.rs @@ -25,8 +25,17 @@ impl Texture { gl::GenTextures (1, &mut id); assert! (id != 0); + let width = info.width.try_into ().unwrap (); + let height = info.height.try_into ().unwrap (); + + let format = match info.color_type { + png::ColorType::RGB => gl::RGB, + png::ColorType::RGBA => gl::RGBA, + _ => panic! ("ColorType not implemented"), + }; + gl::BindTexture (gl::TEXTURE_2D, id); - gl::TexImage2D (gl::TEXTURE_2D, 0, gl::RGBA.try_into ().unwrap (), 1024, 1024, 0, gl::RGBA, gl::UNSIGNED_BYTE, &buf [0] as *const u8 as *const c_void); + gl::TexImage2D (gl::TEXTURE_2D, 0, format.try_into ().unwrap (), width, height, 0, format, gl::UNSIGNED_BYTE, &buf [0] as *const u8 as *const c_void); gl::TexParameteri (gl::TEXTURE_2D, gl::TEXTURE_WRAP_S, gl::CLAMP_TO_EDGE as i32); gl::TexParameteri (gl::TEXTURE_2D, gl::TEXTURE_WRAP_T, gl::CLAMP_TO_EDGE as i32);