diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-19 22:45:04 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-19 22:45:04 +0200 |
| commit | 70bf7ac330545f14ab9babddfdf0cb5df9e9ee69 (patch) | |
| tree | f8d6d124e6ac82e4aadf80ff21310caa7746e84d /shader/fragment.glsl | |
| parent | 3b2e7cc2347d88dbd8d7697a7cbd8354e7728fc0 (diff) | |
| download | mandelbrot-70bf7ac330545f14ab9babddfdf0cb5df9e9ee69.tar.gz mandelbrot-70bf7ac330545f14ab9babddfdf0cb5df9e9ee69.tar.bz2 mandelbrot-70bf7ac330545f14ab9babddfdf0cb5df9e9ee69.zip | |
Simple (but insanly fast compared to CPU) fragment shader to draw mandelbrot set
Diffstat (limited to 'shader/fragment.glsl')
| -rw-r--r-- | shader/fragment.glsl | 39 |
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 + ); } |
