diff options
| author | LLLL Colonq <llll@colonq> | 2025-02-16 22:55:43 -0500 |
|---|---|---|
| committer | LLLL Colonq <llll@colonq> | 2025-02-16 22:55:43 -0500 |
| commit | 4d0a8140130ebd0f46744b86eeb2a708657a942e (patch) | |
| tree | 6b1a11e07173c769d0f3522c2f6088409b69332d /crates/throwshade/src | |
| parent | 33d69b282e082acce3c5d36cc08cd99a7ccf738d (diff) | |
Switch to workspace
Diffstat (limited to 'crates/throwshade/src')
| -rw-r--r-- | crates/throwshade/src/assets/shaders/throwshade/frag.glsl | 26 | ||||
| -rw-r--r-- | crates/throwshade/src/assets/shaders/throwshade/vert.glsl | 22 | ||||
| -rw-r--r-- | crates/throwshade/src/lib.rs | 57 |
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; + } + } +} |
