blob: a972d68bcfb0be13d99fa551e3a2bb5af48c7505 [file] [log] [blame]
Brian2ccd2642007-01-15 17:27:24 -07001//
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
Brianf44ba112007-01-16 14:55:43 -070033// for (iter = 0.0; iter < MaxIterations && r2 < 4.0; ++iter)
Vinson Lee04442842009-11-17 23:15:25 -080034 for (iter = 0.0; iter < 12.0 && r2 < 4.0; ++iter)
Brian2ccd2642007-01-15 17:27:24 -070035 {
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}