Browse Source

Introduce flash entity

rexim 3 years ago
parent
commit
39568af4b5
3 changed files with 39 additions and 27 deletions
  1. 39 26
      main.c
  2. 0 1
      shaders/flash.frag
  3. 0 0
      shaders/flash.vert

+ 39 - 26
main.c

@@ -20,6 +20,11 @@
 #define DEFAULT_SCREEN_HEIGHT 900
 #define MANUAL_TIME_STEP 0.1
 
+#define COLOR_BLACK_V4F ((V4f){0.0f, 0.0f, 0.0f, 1.0f})
+#define COLOR_RED_V4F ((V4f){1.0f, 0.0f, 0.0f, 1.0f})
+#define COLOR_GREEN_V4F ((V4f){0.0f, 1.0f, 0.0f, 1.0f})
+#define COLOR_BLUE_V4F ((V4f){0.0f, 0.0f, 1.0f, 1.0f})
+
 #include "glextloader.c"
 
 #define STB_IMAGE_IMPLEMENTATION
@@ -383,14 +388,34 @@ bool r_reload(Renderer *r)
     return true;
 }
 
-#define COLOR_BLACK_V4F ((V4f){0.0f, 0.0f, 0.0f, 1.0f})
-#define COLOR_RED_V4F ((V4f){1.0f, 0.0f, 0.0f, 1.0f})
-#define COLOR_GREEN_V4F ((V4f){0.0f, 1.0f, 0.0f, 1.0f})
-#define COLOR_BLUE_V4F ((V4f){0.0f, 0.0f, 1.0f, 1.0f})
+typedef struct {
+    float t;
+    float dt;
+    V4f color;
+} Flash;
 
-float t = 0.0f;
-float dt = 0.0f;
-V4f color = {0};
+static Flash global_flash = {0};
+
+#define FLASH_SPEED 2.0f
+#define FLASH_RED_V4F COLOR_RED_V4F
+#define FLASH_GREEN_V4F COLOR_GREEN_V4F
+#define FLASH_BLUE_V4F COLOR_BLUE_V4F
+
+void flash_bang(Flash *flash, V4f color)
+{
+    flash->t = 1.0f;
+    flash->dt = -FLASH_SPEED;
+    flash->color = color;
+}
+
+void flash_update(Flash *flash, float delta_time)
+{
+    flash->t += flash->dt * delta_time;
+    if (flash->t <= 0.0f) {
+        flash->t = 0.0f;
+        flash->dt = 0.0f;
+    }
+}
 
 void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
 {
@@ -401,12 +426,10 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
     if (action == GLFW_PRESS) {
         if (key == GLFW_KEY_F5) {
             reload_render_conf("render.conf");
-            dt = -2.0f;
-            t = 1.0f;
             if (r_reload(&global_renderer)) {
-                color = COLOR_GREEN_V4F;
+                flash_bang(&global_flash, FLASH_GREEN_V4F);
             } else {
-                color = COLOR_RED_V4F;
+                flash_bang(&global_flash, FLASH_RED_V4F);
             }
         } else if (key == GLFW_KEY_F6) {
 #define SCREENSHOT_PNG_PATH "screenshot.png"
@@ -424,9 +447,7 @@ void key_callback(GLFWwindow* window, int key, int scancode, int action, int mod
                 fprintf(stderr, "ERROR: could not save %s: %s\n", SCREENSHOT_PNG_PATH, strerror(errno));
             }
             free(pixels);
-            color = COLOR_BLUE_V4F;
-            dt = -2.0f;
-            t = 1.0f;
+            flash_bang(&global_flash, FLASH_BLUE_V4F);
         } else if (key == GLFW_KEY_SPACE) {
             pause = !pause;
         } else if (key == GLFW_KEY_Q) {
@@ -521,8 +542,6 @@ void r_clear(Renderer *r)
     r->vertex_buf_sz = 0;
 }
 
-
-
 int main(void)
 {
     reload_render_conf("render.conf");
@@ -604,7 +623,7 @@ int main(void)
     }
 
     GLuint framebuffer_program;
-    if (!load_shader_program("./shaders/debug.vert", "./shaders/debug.frag", &framebuffer_program)) {
+    if (!load_shader_program("./shaders/flash.vert", "./shaders/flash.frag", &framebuffer_program)) {
         exit(1);
     }
     glUseProgram(framebuffer_program);
@@ -612,7 +631,6 @@ int main(void)
     GLuint framebuffer_tex_uniform = glGetUniformLocation(framebuffer_program, "tex");
     GLuint framebuffer_color_uniform = glGetUniformLocation(framebuffer_program, "color");
     GLuint framebuffer_t_uniform = glGetUniformLocation(framebuffer_program, "t");
-    GLuint framebuffer_resolution_uniform = glGetUniformLocation(framebuffer_program, "resolution");
 
     glUniform1i(framebuffer_tex_uniform, 1);
     glUniform4f(framebuffer_color_uniform, 1.0, 0.0, 0.0, 1.0);
@@ -660,14 +678,9 @@ int main(void)
 
         glClear(GL_COLOR_BUFFER_BIT);
         glUseProgram(framebuffer_program);
-        t += dt * delta_time;
-        if (t <= 0.0f) {
-            t = 0.0f;
-            dt = 0.0f;
-        }
-        glUniform1f(framebuffer_t_uniform, t);
-        glUniform4f(framebuffer_color_uniform, color.x, color.y, color.z, color.w);
-        glUniform2f(framebuffer_resolution_uniform, width, height);
+        flash_update(&global_flash, delta_time);
+        glUniform1f(framebuffer_t_uniform, global_flash.t);
+        glUniform4f(framebuffer_color_uniform, global_flash.color.x, global_flash.color.y, global_flash.color.z, global_flash.color.w);
         glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 
         glfwSwapBuffers(window);

+ 0 - 1
shaders/debug.frag → shaders/flash.frag

@@ -5,7 +5,6 @@ precision mediump float;
 uniform sampler2D tex;
 uniform vec4 color;
 uniform float t;
-uniform vec2 resolution;
 
 in vec2 uv;
 out vec4 out_color;

+ 0 - 0
shaders/debug.vert → shaders/flash.vert