diff --git a/.gitignore b/.gitignore index a1ef3b9..e428a99 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ wlr-layer-shell-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.c xdg-shell-protocol.h xdg-shell-protocol.c +shaders/ diff --git a/renderer.c b/renderer.c index 44f90ae..ed7c345 100644 --- a/renderer.c +++ b/renderer.c @@ -45,6 +45,7 @@ const char *fragment_header_src = "layout(location = 0) out vec4 color;\n" "uniform vec2 iResolution;\n" "uniform float iTime;\n" +"uniform int iFrame;\n" "void mainImage(out vec4 fragColor, in vec2 fragCoord);\n" "void main() {\n" " mainImage(color, gl_FragCoord.xy);\n" @@ -155,7 +156,11 @@ Renderer new_renderer() { (void *)0 ); - Renderer renderer = { "", 0, vao }; + Renderer renderer; + renderer.shader_path = ""; + renderer.shader = 0; + renderer.vao = vao; + renderer.frame_nr = 0; return renderer; } @@ -177,6 +182,8 @@ void render(Renderer *state, int w, int h, double time, char *shader_path, int r state->shader_path = shader_path; } + state->frame_nr++; + // Rendorrrr glViewport(0, 0, w, h); @@ -192,6 +199,9 @@ void render(Renderer *state, int w, int h, double time, char *shader_path, int r int uniform_iTime = glGetUniformLocation(state->shader, "iTime"); glUniform1f(uniform_iTime, (float)time); + int uniform_iFrame = glGetUniformLocation(state->shader, "iFrame"); + glUniform1i(uniform_iFrame, state->frame_nr); + glBindVertexArray(state->vao); glDrawArrays(GL_TRIANGLES, 0, 6); } diff --git a/renderer.h b/renderer.h index 531251c..c545dcf 100644 --- a/renderer.h +++ b/renderer.h @@ -7,6 +7,8 @@ typedef struct Renderer { char *shader_path; unsigned int shader; unsigned int vao; + /// The currently rendered frame. + unsigned int frame_nr; struct stat shader_file_modified; } Renderer;