1//
2// Fragment shader for drawing the Mandelbrot set
3//
4// Authors: Dave Baldwin, Steve Koren, Randi Rost
5//          based on a shader by Michael Rivero
6//
7// Copyright (c) 2002-2005: 3Dlabs, Inc.
8//
9// See 3Dlabs-License.txt for license information
10//
11
12varying vec3  Position;
13varying float LightIntensity;
14
15uniform float MaxIterations;
16uniform float Zoom;
17uniform float Xcenter;
18uniform float Ycenter;
19uniform vec3  InnerColor;
20uniform vec3  OuterColor1;
21uniform vec3  OuterColor2;
22
23void main()
24{
25    float   real  = Position.x * Zoom + Xcenter;
26    float   imag  = Position.y * Zoom + Ycenter;
27    float   Creal = real;   // Change this line...
28    float   Cimag = imag;   // ...and this one to get a Julia set
29
30    float r2 = 0.0;
31    float iter;
32
33//    for (iter = 0.0; iter < MaxIterations && r2 < 4.0; ++iter)
34    for (iter = 0.0; iter < 12.0 && r2 < 4.0; ++iter)
35    {
36        float tempreal = real;
37
38        real = (tempreal * tempreal) - (imag * imag) + Creal;
39        imag = 2.0 * tempreal * imag + Cimag;
40        r2   = (real * real) + (imag * imag);
41    }
42
43    // Base the color on the number of iterations
44
45    vec3 color;
46
47    if (r2 < 4.0)
48        color = InnerColor;
49    else
50        color = mix(OuterColor1, OuterColor2, fract(iter * 0.05));
51
52    color *= LightIntensity;
53
54    gl_FragColor = vec4(color, 1.0);
55}
56