diff options
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/teleia/src/font.rs | 24 | ||||
| -rw-r--r-- | crates/teleia/src/state.rs | 11 |
2 files changed, 21 insertions, 14 deletions
diff --git a/crates/teleia/src/font.rs b/crates/teleia/src/font.rs index e431896..bba7de2 100644 --- a/crates/teleia/src/font.rs +++ b/crates/teleia/src/font.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -use crate::{context, mesh, shader, texture}; +use crate::{context, mesh, shader, state, texture}; use glow::HasContext; pub struct Bitmap { @@ -65,7 +65,7 @@ impl Bitmap { Self::from_image(ctx, 7, 9, 112, 54, include_bytes!("assets/fonts/simple.png")) } - pub fn render_text_helper(&self, ctx: &context::Context, pos: &glam::Vec2, text: &str, color: &[glam::Vec3]) { + pub fn render_text_helper(&self, ctx: &context::Context, st: &state::State, pos: &glam::Vec2, text: &str, color: &[glam::Vec3]) { let mut cur = glam::Vec2::new(0.0, 0.0); let mut vertices = Vec::new(); let mut texcoords = Vec::new(); @@ -106,10 +106,10 @@ impl Bitmap { let index_bytes: Vec<u8> = indices.iter().flat_map(|x| x.to_ne_bytes()).collect(); self.shader.bind(ctx); self.font.bind(ctx); - let scale = glam::Vec2::new(2.0 / ctx.render_width, 2.0 / ctx.render_height); + let scale = glam::Vec2::new(2.0 / st.render_dims.x, 2.0 / st.render_dims.y); let offset = glam::Vec2::new( - -ctx.render_width / 2.0, - ctx.render_height / 2.0 - self.char_height as f32, + -st.render_dims.x / 2.0, + st.render_dims.y / 2.0 - self.char_height as f32, ); let npos = (glam::Vec2::new(pos.x, -pos.y) + offset) * scale; self.shader.set_mat4( @@ -159,8 +159,8 @@ impl Bitmap { } } - pub fn render_text(&self, ctx: &context::Context, pos: &glam::Vec2, text: &str) { - self.render_text_helper(ctx, pos, text, &[]); + pub fn render_text(&self, ctx: &context::Context, st: &state::State, pos: &glam::Vec2, text: &str) { + self.render_text_helper(ctx, st, pos, text, &[]); } } @@ -266,7 +266,7 @@ impl TrueType { } } - pub fn render_text_helper(&self, ctx: &context::Context, pos: &glam::Vec2, spacing: &glam::Vec2, text: &str, color: &[glam::Vec3]) { + pub fn render_text_helper(&self, ctx: &context::Context, st: &state::State, pos: &glam::Vec2, spacing: &glam::Vec2, text: &str, color: &[glam::Vec3]) { let mut cur = glam::Vec2::new(0.0, 0.0); let mut vertices = Vec::new(); let mut texcoords = Vec::new(); @@ -301,14 +301,14 @@ impl TrueType { indices.push(idx + 0); indices.push(idx + 1); indices.push(idx + 2); indices.push(idx + 0); indices.push(idx + 3); indices.push(idx + 2); } - cur.x += spacing.x; + cur.x += spacing.x; } } let index_bytes: Vec<u8> = indices.iter().flat_map(|x| x.to_ne_bytes()).collect(); - let scale = glam::Vec2::new(2.0 / ctx.render_width, 2.0 / ctx.render_height); + let scale = glam::Vec2::new(2.0 / st.render_dims.x, 2.0 / st.render_dims.y); let offset = glam::Vec2::new( - -ctx.render_width / 2.0, - ctx.render_height / 2.0 - cellheight as f32, + -st.render_dims.x / 2.0, + st.render_dims.y / 2.0 - cellheight as f32, ); let npos = (glam::Vec2::new(pos.x, -pos.y) + offset) * scale; self.shader.bind(ctx); diff --git a/crates/teleia/src/state.rs b/crates/teleia/src/state.rs index 95c63b7..ef68eb9 100644 --- a/crates/teleia/src/state.rs +++ b/crates/teleia/src/state.rs @@ -175,6 +175,7 @@ pub struct State { pub screen: framebuffer::Framebuffer, pub render_framebuffer: framebuffer::Framebuffer, + pub render_dims: glam::Vec2, pub shader_upscale: shader::Shader, pub mesh_square: mesh::Mesh, pub audio: Option<audio::Assets>, @@ -272,6 +273,7 @@ impl State { screen, render_framebuffer, + render_dims: glam::Vec2::new(ctx.render_width, ctx.render_height), shader_upscale, mesh_square, audio: None, @@ -318,6 +320,11 @@ impl State { self.camera = (pos.clone(), dir.clone(), up.clone()); } + pub fn bind_framebuffer(&mut self, ctx: &context::Context, fb: &framebuffer::Framebuffer) { + fb.bind(ctx); + self.render_dims = fb.dims; + } + pub fn set_lighting( &mut self, _ctx: &context::Context, @@ -544,11 +551,11 @@ impl State { } pub fn run_render<G>(&mut self, ctx: &context::Context, game: &mut G) -> utils::Erm<()> where G: Game { - self.render_framebuffer.bind(&ctx); + self.render_framebuffer.bind(&ctx); self.render_dims = self.render_framebuffer.dims; game.render(ctx, self)?; - self.screen.bind(&ctx); + self.screen.bind(&ctx); self.render_dims = self.screen.dims; ctx.clear_color( if ctx.options.contains(crate::Options::OVERLAY) { glam::Vec4::new(0.0, 0.0, 0.0, 0.0) |
