aboutsummaryrefslogtreecommitdiff
path: root/shader/fragment.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'shader/fragment.glsl')
-rw-r--r--shader/fragment.glsl39
1 files changed, 37 insertions, 2 deletions
diff --git a/shader/fragment.glsl b/shader/fragment.glsl
index 3fbeac5..19b020e 100644
--- a/shader/fragment.glsl
+++ b/shader/fragment.glsl
@@ -1,8 +1,43 @@
#version 400 core
-out vec4 out_color;
+out vec4 out_color;
+
+uniform int u_width;
+uniform int u_height;
+
+uniform float u_real_start;
+uniform float u_real_end;
+uniform float u_imag_start;
+uniform float u_imag_end;
+
+uniform int u_iterations;
void main()
{
- out_color = vec4(1.0, 1.0, 1.0, 1.0);
+ float ca = u_real_start + float(gl_FragCoord.x) / float(u_width) * (u_real_end - u_real_start);
+ float cb = u_imag_start + float(gl_FragCoord.y) / float(u_height) * (u_imag_end - u_imag_start);
+ float zr = ca;
+ float zi = cb;
+ float zr_square;
+ float zi_square;
+ int n;
+
+ for (n = 0; n < u_iterations; n++)
+ {
+ zi_square = zi * zi;
+ zr_square = zr * zr;
+ if (zr_square + zi_square > 4.0)
+ break;
+ zi = 2.0 * zr * zi;
+ zr = zr_square - zi_square;
+ zi += cb;
+ zr += ca;
+ }
+
+ out_color = vec4(
+ float(n) / float(u_iterations),
+ float(n) / float(u_iterations),
+ 0.0,
+ 1.0
+ );
}