OSDN Git Service

Merge branch 'mesa_7_5_branch'
[android-x86/external-mesa.git] / progs / glsl / CH18-mandel.frag
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
12 varying vec3  Position;
13 varying float LightIntensity;
14
15 uniform float MaxIterations;
16 uniform float Zoom;
17 uniform float Xcenter;
18 uniform float Ycenter;
19 uniform vec3  InnerColor;
20 uniform vec3  OuterColor1;
21 uniform vec3  OuterColor2;
22
23 void 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 && 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 }