Browse Source

[GPU] Enable cool gradient thingie

rexim 4 years ago
parent
commit
9bc1f88658
2 changed files with 14 additions and 2 deletions
  1. 3 0
      gpu.c
  2. 11 2
      gpu.frag

+ 3 - 0
gpu.c

@@ -62,6 +62,9 @@ int main(void)
 
 
     /*SDL_GLContext context = */SDL_GL_CreateContext(window);
     /*SDL_GLContext context = */SDL_GL_CreateContext(window);
 
 
+    glEnable(GL_BLEND);
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
     GLuint vert_shader = compile_shader_file("./gpu.vert", GL_VERTEX_SHADER);
     GLuint vert_shader = compile_shader_file("./gpu.vert", GL_VERTEX_SHADER);
     GLuint frag_shader = compile_shader_file("./gpu.frag", GL_FRAGMENT_SHADER);
     GLuint frag_shader = compile_shader_file("./gpu.frag", GL_FRAGMENT_SHADER);
     GLuint program = link_program(vert_shader, frag_shader);
     GLuint program = link_program(vert_shader, frag_shader);

+ 11 - 2
gpu.frag

@@ -1,7 +1,7 @@
 #version 130
 #version 130
 
 
 #define MARKER_COLOR vec4(0.75, 0.0, 0.0, 1.0)
 #define MARKER_COLOR vec4(0.75, 0.0, 0.0, 1.0)
-#define BEZIER_CURVE_COLOR vec4(0.0, 0.75, 0.0, 1.0)
+#define BEZIER_CURVE_COLOR vec3(0.0, 0.75, 0.0)
 
 
 // TODO: at some combinations of p1, p2, p3 nothing is drawn
 // TODO: at some combinations of p1, p2, p3 nothing is drawn
 uniform vec2 p1;
 uniform vec2 p1;
@@ -34,7 +34,16 @@ void main()
             if ((0.0f <= t1 && t1 <= 1.0f && abs(p0.y - y1) < bezier_curve_threshold) ||
             if ((0.0f <= t1 && t1 <= 1.0f && abs(p0.y - y1) < bezier_curve_threshold) ||
                 (0.0f <= t2 && t2 <= 1.0f && abs(p0.y - y2) < bezier_curve_threshold))
                 (0.0f <= t2 && t2 <= 1.0f && abs(p0.y - y2) < bezier_curve_threshold))
             {
             {
-                gl_FragColor = BEZIER_CURVE_COLOR;
+                float r1 = abs(p0.y - y1) / bezier_curve_threshold;
+                float r2 = abs(p0.y - y2) / bezier_curve_threshold;
+
+                if (0.0 <= r1 && r1 <= 1.0) {
+                    gl_FragColor = vec4(0.0, 0.75, 0.0, mix(1.0, 0.0, r1));
+                }
+
+                if (0.0 <= r2 && r2 <= 1.0) {
+                    gl_FragColor = vec4(0.0, 0.75, 0.0, mix(1.0, 0.0, r2));
+                }
             }
             }
             else
             else
             {
             {