summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/teleia/src/audio.rs2
-rw-r--r--crates/teleia/src/renderer.rs26
-rw-r--r--crates/teleia/src/shader.rs4
3 files changed, 29 insertions, 3 deletions
diff --git a/crates/teleia/src/audio.rs b/crates/teleia/src/audio.rs
index 000e696..754cb7e 100644
--- a/crates/teleia/src/audio.rs
+++ b/crates/teleia/src/audio.rs
@@ -226,9 +226,7 @@ pub struct Assets {
impl Assets {
pub fn new<F>(f : F) -> Self where F: Fn(&Context) -> HashMap<String, Audio> {
let ctx = Context::new();
-
let audio = f(&ctx);
-
Self {
ctx,
audio,
diff --git a/crates/teleia/src/renderer.rs b/crates/teleia/src/renderer.rs
index 27ffbb6..0a16d36 100644
--- a/crates/teleia/src/renderer.rs
+++ b/crates/teleia/src/renderer.rs
@@ -168,6 +168,18 @@ impl<A: Assets> Renderer<A> {
pub fn render_square(&self, ctx: &context::Context, st: &state::State) {
st.mesh_square.render(ctx)
}
+ pub fn set_position_2d_mat(&self, ctx: &context::Context, st: &state::State, pos: glam::Mat4) {
+ if let Some((s, sm)) = self.shader() {
+ debug_assert!(sm == ShaderMode::TwoDimension, "attempted to set_position_2d in wrong mode");
+ s.set_position_2d_mat(ctx, st, &pos);
+ }
+ }
+ pub fn set_position_2d_rotate(&self, ctx: &context::Context, st: &state::State, pos: glam::Vec2, dims: glam::Vec2, rot: glam::Quat) {
+ if let Some((s, sm)) = self.shader() {
+ debug_assert!(sm == ShaderMode::TwoDimension, "attempted to set_position_2d in wrong mode");
+ s.set_position_2d_helper(ctx, st, &pos, &dims, &rot)
+ }
+ }
pub fn set_position_2d(&self, ctx: &context::Context, st: &state::State, pos: glam::Vec2, dims: glam::Vec2) {
if let Some((s, sm)) = self.shader() {
debug_assert!(sm == ShaderMode::TwoDimension, "attempted to set_position_2d in wrong mode");
@@ -242,7 +254,6 @@ impl<A: Assets> Renderer<A> {
/// Common case: draw the given texture on the screen (units are pixels, pos is top left)
pub fn texture_screen(&mut self,
-
ctx: &context::Context, st: &mut state::State,
texture: A::Texture,
pos: glam::Vec2,
@@ -254,6 +265,19 @@ impl<A: Assets> Renderer<A> {
self.render_square(ctx, st);
}
+ pub fn texture_screen_rotate(&mut self,
+ ctx: &context::Context, st: &mut state::State,
+ texture: A::Texture,
+ pos: glam::Vec2,
+ dims: glam::Vec2,
+ rot: glam::Quat,
+ ) {
+ self.bind_uber_2d(ctx, st, UberFlags::TEXTURE_COLOR);
+ self.bind_texture(ctx, st, texture);
+ self.set_position_2d_rotate(ctx, st, pos, dims, rot);
+ self.render_square(ctx, st);
+ }
+
pub fn texture_screen_recolor(&mut self,
ctx: &context::Context, st: &mut state::State,
texture: A::Texture, hue: f32,
diff --git a/crates/teleia/src/shader.rs b/crates/teleia/src/shader.rs
index 857e8d0..6248658 100644
--- a/crates/teleia/src/shader.rs
+++ b/crates/teleia/src/shader.rs
@@ -218,6 +218,10 @@ impl Shader {
self.set_mat4(ctx, "normal_matrix", &position.inverse().transpose());
}
+ pub fn set_position_2d_mat(&self, ctx: &context::Context, st: &state::State, position: &glam::Mat4) {
+ self.set_mat4(ctx, "position", position);
+ }
+
pub fn set_position_2d_helper(&self, ctx: &context::Context, st: &state::State, pos: &glam::Vec2, dims: &glam::Vec2, rot: &glam::Quat) {
let halfwidth = dims.x / 2.0;
let halfheight = dims.y / 2.0;