summaryrefslogtreecommitdiff
path: root/crates/throwshade/src
diff options
context:
space:
mode:
authorLLLL Colonq <llll@colonq>2025-02-16 22:55:43 -0500
committerLLLL Colonq <llll@colonq>2025-02-16 22:55:43 -0500
commit4d0a8140130ebd0f46744b86eeb2a708657a942e (patch)
tree6b1a11e07173c769d0f3522c2f6088409b69332d /crates/throwshade/src
parent33d69b282e082acce3c5d36cc08cd99a7ccf738d (diff)
Switch to workspace
Diffstat (limited to 'crates/throwshade/src')
-rw-r--r--crates/throwshade/src/assets/shaders/throwshade/frag.glsl26
-rw-r--r--crates/throwshade/src/assets/shaders/throwshade/vert.glsl22
-rw-r--r--crates/throwshade/src/lib.rs57
3 files changed, 105 insertions, 0 deletions
diff --git a/crates/throwshade/src/assets/shaders/throwshade/frag.glsl b/crates/throwshade/src/assets/shaders/throwshade/frag.glsl
new file mode 100644
index 0000000..2acc78d
--- /dev/null
+++ b/crates/throwshade/src/assets/shaders/throwshade/frag.glsl
@@ -0,0 +1,26 @@
+#version 300 es
+precision highp float;
+
+in vec2 vertex_texcoord;
+out vec4 frag_color;
+
+uniform vec2 resolution;
+
+uniform float time;
+
+uniform float bpm;
+
+uniform vec2 cursor;
+
+uniform float chat_time;
+uniform float chat_biblicality;
+
+vec4 shade(vec2);
+
+void main() {
+ vec2 inverted = vec2(vertex_texcoord.x, 1.0 - vertex_texcoord.y);
+ frag_color = shade(inverted);
+ frag_color.a = clamp(frag_color.a * 0.5, 0.0, 0.5);
+}
+
+// "The Cutoff"
diff --git a/crates/throwshade/src/assets/shaders/throwshade/vert.glsl b/crates/throwshade/src/assets/shaders/throwshade/vert.glsl
new file mode 100644
index 0000000..e05bbb6
--- /dev/null
+++ b/crates/throwshade/src/assets/shaders/throwshade/vert.glsl
@@ -0,0 +1,22 @@
+#version 300 es
+precision highp float;
+
+out vec2 vertex_texcoord;
+
+void main() {
+ const vec2 positions[4] = vec2[](
+ vec2(-1, -1),
+ vec2(+1, -1),
+ vec2(-1, +1),
+ vec2(+1, +1)
+ );
+ const vec2 coords[4] = vec2[](
+ vec2(0, 0),
+ vec2(1, 0),
+ vec2(0, 1),
+ vec2(1, 1)
+ );
+
+ vertex_texcoord = coords[gl_VertexID];
+ gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0);
+}
diff --git a/crates/throwshade/src/lib.rs b/crates/throwshade/src/lib.rs
new file mode 100644
index 0000000..976f2ae
--- /dev/null
+++ b/crates/throwshade/src/lib.rs
@@ -0,0 +1,57 @@
+use teleia::*;
+
+const VERT: &'static str = include_str!("assets/shaders/throwshade/vert.glsl");
+const FRAG: &'static str = include_str!("assets/shaders/throwshade/frag.glsl");
+
+pub struct ThrowShade {
+ pub tickset: u64,
+ pub timeset: f64,
+ pub shader: Option<shader::Shader>,
+}
+impl ThrowShade {
+ pub fn new() -> Self {
+ Self {
+ tickset: 0,
+ timeset: 0.0,
+ shader: None,
+ }
+ }
+ pub fn set(&mut self, ctx: &context::Context, st: &state::State, src: &str) -> Result<(), String> {
+ let fsrc = format!("{}\n{}\n", FRAG, src);
+ self.tickset = st.tick;
+ if let Ok(dur) = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH) {
+ self.timeset = dur.as_secs_f64();
+ log::info!("the time: {}", self.timeset);
+ }
+ if let Some(s) = &mut self.shader {
+ s.replace(ctx, VERT, &fsrc)?;
+ } else {
+ self.shader = Some(shader::Shader::new_helper(ctx, VERT, &fsrc)?);
+ }
+ Ok(())
+ }
+}
+
+cfg_if::cfg_if! {
+ if #[cfg(target_arch = "wasm32")] {
+ struct Game {}
+ impl Game {
+ pub async fn new(_ctx: &context::Context) -> Self {
+ Self {}
+ }
+ }
+ impl state::Game for Game {
+ fn render(&mut self, ctx: &context::Context, st: &mut state::State) -> Option<()> {
+ ctx.clear_color(glam::Vec4::new(1.0, 0.0, 0.0, 1.0));
+ ctx.clear();
+ Some(())
+ }
+ }
+
+ use wasm_bindgen::prelude::*;
+ #[wasm_bindgen]
+ pub async fn main_js() {
+ teleia::run(480, 270, Game::new).await;
+ }
+ }
+}