summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/teleia/src/font.rs24
-rw-r--r--crates/teleia/src/state.rs11
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)