From a32e44f45f2a61fb53b2aafc36dea350b5bd6de7 Mon Sep 17 00:00:00 2001 From: Rakarake Date: Sun, 14 Dec 2025 23:01:30 +0100 Subject: [PATCH] command line argument to shader --- fragment.glsl | 3 --- glonkers.c | 14 +++++++++++--- renderer.c | 12 ++++++++---- renderer.h | 3 ++- run.sh | 3 +++ 5 files changed, 24 insertions(+), 11 deletions(-) create mode 100755 run.sh diff --git a/fragment.glsl b/fragment.glsl index 9e4b0b9..652722e 100644 --- a/fragment.glsl +++ b/fragment.glsl @@ -78,10 +78,7 @@ void main() { // lerp index float u = fade(tile_uv.x); float v = fade(tile_uv.y); - //float u = tile_uv.x; - //float v = tile_uv.y; float val = lerp(lerp(c_tl_dot, c_bl_dot, v), lerp(c_tr_dot, c_br_dot, v), u); float out_val = val /2.0 + 0.5; - //float out_val = rand(uv , vec2(1.0, 1.0)); color = vec4(out_val, out_val, out_val, 1.0); } diff --git a/glonkers.c b/glonkers.c index b075fb1..9f9fd58 100644 --- a/glonkers.c +++ b/glonkers.c @@ -1,7 +1,7 @@ #include +#include #include #include -#include #include #include #include @@ -79,7 +79,7 @@ double time_since_start() { (now.tv_nsec - program_start.tv_nsec) / 1e9; } -int main() { +int main(int argc, char *argv[]) { init_timer(); printf("Good Morning 🍵\n"); @@ -119,8 +119,16 @@ int main() { } } + char *shader_path = NULL; + if (argc >= 2) { + shader_path = argv[1]; + } else { + printf("need to supply path to shader\n"); + exit(1); + } + double time = time_since_start(); - render(&renderer, w, h, time); + render(&renderer, w, h, time, shader_path); SDL_GL_SwapWindow(window); } diff --git a/renderer.c b/renderer.c index 51996f4..b26fd46 100644 --- a/renderer.c +++ b/renderer.c @@ -1,5 +1,6 @@ #define GL_GLEXT_PROTOTYPES #include +#include #include #include #include "renderer.h" @@ -106,8 +107,6 @@ Renderer new_renderer() { glEnable(GL_DEPTH_TEST); - GLuint shader = load_shader("fragment.glsl"); //create_shader(fragment_shader_source); - // buffers // Load the vertex data GLfloat vertices[] = { @@ -139,11 +138,16 @@ Renderer new_renderer() { (void *)0 ); - Renderer renderer = { shader, vao }; + Renderer renderer = { "", 0, vao }; return renderer; } -void render(Renderer *state, int w, int h, double time) { +/// shader_path cannot be NULL. +void render(Renderer *state, int w, int h, double time, char *shader_path) { + if (strcmp(state->shader_path, shader_path)) { + state->shader = load_shader(shader_path); + } + checkGlError(); // Rendorrrr diff --git a/renderer.h b/renderer.h index 91e175c..b0a78d7 100644 --- a/renderer.h +++ b/renderer.h @@ -2,12 +2,13 @@ #define RENDERER_H typedef struct Renderer { + char *shader_path; unsigned int shader; unsigned int vao; } Renderer; Renderer new_renderer(); -void render(Renderer *renderer, int w, int h, double time); +void render(Renderer *renderer, int w, int h, double time, char *shader_path); #endif diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..2e3e1ff --- /dev/null +++ b/run.sh @@ -0,0 +1,3 @@ +make +./glonkers "$@" +