summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2026-04-17 23:51:40 -0400
committerLLLL Colonq <llll@colonq>2026-04-17 23:51:40 -0400
commit9f3223129c1405d5858f3740be6e3b1ca731ec67 (patch)
treea65a97623733235eba5b361b1384f6d7d8e6e7d8 /crates
parent861b188f35ccec1f67a865e939c4e6d6047f8709 (diff)
Update
Diffstat (limited to 'crates')
-rw-r--r--crates/teleia/src/assets/shaders/uber/vert.glsl4
-rw-r--r--crates/teleia/src/renderer.rs18
-rw-r--r--crates/teleia/src/state.rs7
3 files changed, 28 insertions, 1 deletions
diff --git a/crates/teleia/src/assets/shaders/uber/vert.glsl b/crates/teleia/src/assets/shaders/uber/vert.glsl
index b9be83b..6de3e7e 100644
--- a/crates/teleia/src/assets/shaders/uber/vert.glsl
+++ b/crates/teleia/src/assets/shaders/uber/vert.glsl
@@ -11,6 +11,7 @@ uniform mat4 normal_matrix;
uniform mat4 lightspace_matrix;
uniform vec3 camera_pos;
uniform vec3 offset;
+uniform float yskew;
out vec2 vertex_texcoord;
out vec3 vertex_normal;
@@ -31,4 +32,7 @@ void main() {
vertex_view_vector = camera_pos - pos;
gl_Position = projection * view * vec4(pos, 1.0);
gl_Position.xyz += offset;
+ if (flag(YSKEW)) {
+ gl_Position.y += yskew * pos.z;
+ }
}
diff --git a/crates/teleia/src/renderer.rs b/crates/teleia/src/renderer.rs
index 8313319..94c78d8 100644
--- a/crates/teleia/src/renderer.rs
+++ b/crates/teleia/src/renderer.rs
@@ -13,7 +13,7 @@ bitflags! {
const LIGHT_POINT = 0b000100000;
const SPRITE = 0b001000000;
const EFFECTS = 0b010000000;
- const SCREENSPACE = 0b100000000;
+ const YSKEW = 0b100000000;
}
}
impl UberFlags {
@@ -250,6 +250,22 @@ impl<A: Assets> Renderer<A> {
self.render_square(ctx, st);
}
+ pub fn texture_screen_recolor(&mut self,
+ ctx: &context::Context, st: &mut state::State,
+ texture: A::Texture, hue: f32,
+ pos: glam::Vec2,
+ dims: glam::Vec2,
+ ) {
+ self.bind_uber_2d(ctx, st, UberFlags::TEXTURE_COLOR | UberFlags::EFFECTS);
+ self.bind_texture(ctx, st, texture);
+ self.set_f32(ctx, st, "effect_huescale", 0.0);
+ self.set_f32(ctx, st, "effect_hueshift", hue);
+ self.set_position_2d(ctx, st, pos, dims);
+ self.render_square(ctx, st);
+ self.set_f32(ctx, st, "effect_huescale", 1.0);
+ self.set_f32(ctx, st, "effect_hueshift", 0.0);
+ }
+
/// Common case: text in the default font (units are pixels, pos is top left)
pub fn text_screen(&mut self,
ctx: &context::Context, st: &mut state::State,
diff --git a/crates/teleia/src/state.rs b/crates/teleia/src/state.rs
index 7544356..8f4462a 100644
--- a/crates/teleia/src/state.rs
+++ b/crates/teleia/src/state.rs
@@ -34,6 +34,7 @@ pub enum Key {
Up, Down, Left, Right,
A, B, X, Y, L, R,
Start, Select,
+ Debug,
}
pub struct Keys {
pub pressed: EnumMap<Key, bool>,
@@ -47,12 +48,14 @@ impl Keys {
Key::A => false, Key::B => false, Key::X => false, Key::Y => false,
Key::L => false, Key::R => false,
Key::Start => false, Key::Select => false,
+ Key::Debug => false,
},
new: enum_map! {
Key::Up => false, Key::Down => false, Key::Left => false, Key::Right => false,
Key::A => false, Key::B => false, Key::X => false, Key::Y => false,
Key::L => false, Key::R => false,
Key::Start => false, Key::Select => false,
+ Key::Debug => false,
},
}
}
@@ -68,6 +71,7 @@ impl Keys {
pub fn r(&self) -> bool { self.pressed[Key::R] }
pub fn start(&self) -> bool { self.pressed[Key::Start] }
pub fn select(&self) -> bool { self.pressed[Key::Select] }
+ pub fn debug(&self) -> bool { self.pressed[Key::Debug] }
pub fn new_up(&mut self) -> bool { let ret = self.new[Key::Up]; self.new[Key::Up] = false; ret }
pub fn new_down(&mut self) -> bool { let ret = self.new[Key::Down]; self.new[Key::Down] = false; ret }
pub fn new_left(&mut self) -> bool { let ret = self.new[Key::Left]; self.new[Key::Left] = false; ret }
@@ -80,6 +84,7 @@ impl Keys {
pub fn new_r(&mut self) -> bool { let ret = self.new[Key::R]; self.new[Key::R] = false; ret }
pub fn new_start(&mut self) -> bool { let ret = self.new[Key::Start]; self.new[Key::Start] = false; ret }
pub fn new_select(&mut self) -> bool { let ret = self.new[Key::Select]; self.new[Key::Select] = false; ret }
+ pub fn new_debug(&mut self) -> bool { let ret = self.new[Key::Debug]; self.new[Key::Debug] = false; ret }
}
pub struct PointLight {
@@ -209,6 +214,7 @@ pub fn default_keybindings() -> BiHashMap<Keycode, Key> {
(Keycode::new(winit::keyboard::KeyCode::KeyE), Key::R),
(Keycode::new(winit::keyboard::KeyCode::Tab), Key::Start),
(Keycode::new(winit::keyboard::KeyCode::Space), Key::Select),
+ (Keycode::new(winit::keyboard::KeyCode::Backquote), Key::Debug),
])
}
@@ -227,6 +233,7 @@ pub fn default_keybindings() -> BiHashMap<Keycode, Key> {
(Keycode::new(glfw::Key::E), Key::R),
(Keycode::new(glfw::Key::Tab), Key::Start),
(Keycode::new(glfw::Key::Space), Key::Select),
+ (Keycode::new(glfw::Key::GraveAccent), Key::Debug),
])
}