316 lines
11 KiB
GLSL
316 lines
11 KiB
GLSL
#version 410 core
|
|
in vec4 gl_FragCoord;
|
|
|
|
out vec4 fragColor;
|
|
|
|
uniform float center_x;
|
|
uniform float center_y;
|
|
uniform float zoom;
|
|
|
|
#define MAX_ITERATIONS 600
|
|
|
|
const vec3 colors[256] = vec3[256](
|
|
vec3(0.0,0.0,0.0),
|
|
vec3(0.5,0.0,0.0),
|
|
vec3(0.0,0.5,0.0),
|
|
vec3(0.5,0.5,0.0),
|
|
vec3(0.0,0.0,0.5),
|
|
vec3(0.5,0.0,0.5),
|
|
vec3(0.0,0.5,0.5),
|
|
vec3(0.75,0.75,0.75),
|
|
vec3(0.5,0.5,0.5),
|
|
vec3(0.99609375,0.0,0.0),
|
|
vec3(0.0,0.99609375,0.0),
|
|
vec3(0.99609375,0.99609375,0.0),
|
|
vec3(0.0,0.0,0.99609375),
|
|
vec3(0.99609375,0.0,0.99609375),
|
|
vec3(0.0,0.99609375,0.99609375),
|
|
vec3(0.99609375,0.99609375,0.99609375),
|
|
vec3(0.0,0.0,0.0),
|
|
vec3(0.0,0.0,0.37109375),
|
|
vec3(0.0,0.0,0.52734375),
|
|
vec3(0.0,0.0,0.68359375),
|
|
vec3(0.0,0.0,0.83984375),
|
|
vec3(0.0,0.0,0.99609375),
|
|
vec3(0.0,0.37109375,0.0),
|
|
vec3(0.0,0.37109375,0.37109375),
|
|
vec3(0.0,0.37109375,0.52734375),
|
|
vec3(0.0,0.37109375,0.68359375),
|
|
vec3(0.0,0.37109375,0.83984375),
|
|
vec3(0.0,0.37109375,0.99609375),
|
|
vec3(0.0,0.52734375,0.0),
|
|
vec3(0.0,0.52734375,0.37109375),
|
|
vec3(0.0,0.52734375,0.52734375),
|
|
vec3(0.0,0.52734375,0.68359375),
|
|
vec3(0.0,0.52734375,0.83984375),
|
|
vec3(0.0,0.52734375,0.99609375),
|
|
vec3(0.0,0.68359375,0.0),
|
|
vec3(0.0,0.68359375,0.37109375),
|
|
vec3(0.0,0.68359375,0.52734375),
|
|
vec3(0.0,0.68359375,0.68359375),
|
|
vec3(0.0,0.68359375,0.83984375),
|
|
vec3(0.0,0.68359375,0.99609375),
|
|
vec3(0.0,0.83984375,0.0),
|
|
vec3(0.0,0.83984375,0.37109375),
|
|
vec3(0.0,0.83984375,0.52734375),
|
|
vec3(0.0,0.83984375,0.68359375),
|
|
vec3(0.0,0.83984375,0.83984375),
|
|
vec3(0.0,0.83984375,0.99609375),
|
|
vec3(0.0,0.99609375,0.0),
|
|
vec3(0.0,0.99609375,0.37109375),
|
|
vec3(0.0,0.99609375,0.52734375),
|
|
vec3(0.0,0.99609375,0.68359375),
|
|
vec3(0.0,0.99609375,0.83984375),
|
|
vec3(0.0,0.99609375,0.99609375),
|
|
vec3(0.37109375,0.0,0.0),
|
|
vec3(0.37109375,0.0,0.37109375),
|
|
vec3(0.37109375,0.0,0.52734375),
|
|
vec3(0.37109375,0.0,0.68359375),
|
|
vec3(0.37109375,0.0,0.83984375),
|
|
vec3(0.37109375,0.0,0.99609375),
|
|
vec3(0.37109375,0.37109375,0.0),
|
|
vec3(0.37109375,0.37109375,0.37109375),
|
|
vec3(0.37109375,0.37109375,0.52734375),
|
|
vec3(0.37109375,0.37109375,0.68359375),
|
|
vec3(0.37109375,0.37109375,0.83984375),
|
|
vec3(0.37109375,0.37109375,0.99609375),
|
|
vec3(0.37109375,0.52734375,0.0),
|
|
vec3(0.37109375,0.52734375,0.37109375),
|
|
vec3(0.37109375,0.52734375,0.52734375),
|
|
vec3(0.37109375,0.52734375,0.68359375),
|
|
vec3(0.37109375,0.52734375,0.83984375),
|
|
vec3(0.37109375,0.52734375,0.99609375),
|
|
vec3(0.37109375,0.68359375,0.0),
|
|
vec3(0.37109375,0.68359375,0.37109375),
|
|
vec3(0.37109375,0.68359375,0.52734375),
|
|
vec3(0.37109375,0.68359375,0.68359375),
|
|
vec3(0.37109375,0.68359375,0.83984375),
|
|
vec3(0.37109375,0.68359375,0.99609375),
|
|
vec3(0.37109375,0.83984375,0.0),
|
|
vec3(0.37109375,0.83984375,0.37109375),
|
|
vec3(0.37109375,0.83984375,0.52734375),
|
|
vec3(0.37109375,0.83984375,0.68359375),
|
|
vec3(0.37109375,0.83984375,0.83984375),
|
|
vec3(0.37109375,0.83984375,0.99609375),
|
|
vec3(0.37109375,0.99609375,0.0),
|
|
vec3(0.37109375,0.99609375,0.37109375),
|
|
vec3(0.37109375,0.99609375,0.52734375),
|
|
vec3(0.37109375,0.99609375,0.68359375),
|
|
vec3(0.37109375,0.99609375,0.83984375),
|
|
vec3(0.37109375,0.99609375,0.99609375),
|
|
vec3(0.52734375,0.0,0.0),
|
|
vec3(0.52734375,0.0,0.37109375),
|
|
vec3(0.52734375,0.0,0.52734375),
|
|
vec3(0.52734375,0.0,0.68359375),
|
|
vec3(0.52734375,0.0,0.83984375),
|
|
vec3(0.52734375,0.0,0.99609375),
|
|
vec3(0.52734375,0.37109375,0.0),
|
|
vec3(0.52734375,0.37109375,0.37109375),
|
|
vec3(0.52734375,0.37109375,0.52734375),
|
|
vec3(0.52734375,0.37109375,0.68359375),
|
|
vec3(0.52734375,0.37109375,0.83984375),
|
|
vec3(0.52734375,0.37109375,0.99609375),
|
|
vec3(0.52734375,0.52734375,0.0),
|
|
vec3(0.52734375,0.52734375,0.37109375),
|
|
vec3(0.52734375,0.52734375,0.52734375),
|
|
vec3(0.52734375,0.52734375,0.68359375),
|
|
vec3(0.52734375,0.52734375,0.83984375),
|
|
vec3(0.52734375,0.52734375,0.99609375),
|
|
vec3(0.52734375,0.68359375,0.0),
|
|
vec3(0.52734375,0.68359375,0.37109375),
|
|
vec3(0.52734375,0.68359375,0.52734375),
|
|
vec3(0.52734375,0.68359375,0.68359375),
|
|
vec3(0.52734375,0.68359375,0.83984375),
|
|
vec3(0.52734375,0.68359375,0.99609375),
|
|
vec3(0.52734375,0.83984375,0.0),
|
|
vec3(0.52734375,0.83984375,0.37109375),
|
|
vec3(0.52734375,0.83984375,0.52734375),
|
|
vec3(0.52734375,0.83984375,0.68359375),
|
|
vec3(0.52734375,0.83984375,0.83984375),
|
|
vec3(0.52734375,0.83984375,0.99609375),
|
|
vec3(0.52734375,0.99609375,0.0),
|
|
vec3(0.52734375,0.99609375,0.37109375),
|
|
vec3(0.52734375,0.99609375,0.52734375),
|
|
vec3(0.52734375,0.99609375,0.68359375),
|
|
vec3(0.52734375,0.99609375,0.83984375),
|
|
vec3(0.52734375,0.99609375,0.99609375),
|
|
vec3(0.68359375,0.0,0.0),
|
|
vec3(0.68359375,0.0,0.37109375),
|
|
vec3(0.68359375,0.0,0.52734375),
|
|
vec3(0.68359375,0.0,0.68359375),
|
|
vec3(0.68359375,0.0,0.83984375),
|
|
vec3(0.68359375,0.0,0.99609375),
|
|
vec3(0.68359375,0.37109375,0.0),
|
|
vec3(0.68359375,0.37109375,0.37109375),
|
|
vec3(0.68359375,0.37109375,0.52734375),
|
|
vec3(0.68359375,0.37109375,0.68359375),
|
|
vec3(0.68359375,0.37109375,0.83984375),
|
|
vec3(0.68359375,0.37109375,0.99609375),
|
|
vec3(0.68359375,0.52734375,0.0),
|
|
vec3(0.68359375,0.52734375,0.37109375),
|
|
vec3(0.68359375,0.52734375,0.52734375),
|
|
vec3(0.68359375,0.52734375,0.68359375),
|
|
vec3(0.68359375,0.52734375,0.83984375),
|
|
vec3(0.68359375,0.52734375,0.99609375),
|
|
vec3(0.68359375,0.68359375,0.0),
|
|
vec3(0.68359375,0.68359375,0.37109375),
|
|
vec3(0.68359375,0.68359375,0.52734375),
|
|
vec3(0.68359375,0.68359375,0.68359375),
|
|
vec3(0.68359375,0.68359375,0.83984375),
|
|
vec3(0.68359375,0.68359375,0.99609375),
|
|
vec3(0.68359375,0.83984375,0.0),
|
|
vec3(0.68359375,0.83984375,0.37109375),
|
|
vec3(0.68359375,0.83984375,0.52734375),
|
|
vec3(0.68359375,0.83984375,0.68359375),
|
|
vec3(0.68359375,0.83984375,0.83984375),
|
|
vec3(0.68359375,0.83984375,0.99609375),
|
|
vec3(0.68359375,0.99609375,0.0),
|
|
vec3(0.68359375,0.99609375,0.37109375),
|
|
vec3(0.68359375,0.99609375,0.52734375),
|
|
vec3(0.68359375,0.99609375,0.68359375),
|
|
vec3(0.68359375,0.99609375,0.83984375),
|
|
vec3(0.68359375,0.99609375,0.99609375),
|
|
vec3(0.83984375,0.0,0.0),
|
|
vec3(0.83984375,0.0,0.37109375),
|
|
vec3(0.83984375,0.0,0.52734375),
|
|
vec3(0.83984375,0.0,0.68359375),
|
|
vec3(0.83984375,0.0,0.83984375),
|
|
vec3(0.83984375,0.0,0.99609375),
|
|
vec3(0.83984375,0.37109375,0.0),
|
|
vec3(0.83984375,0.37109375,0.37109375),
|
|
vec3(0.83984375,0.37109375,0.52734375),
|
|
vec3(0.83984375,0.37109375,0.68359375),
|
|
vec3(0.83984375,0.37109375,0.83984375),
|
|
vec3(0.83984375,0.37109375,0.99609375),
|
|
vec3(0.83984375,0.52734375,0.0),
|
|
vec3(0.83984375,0.52734375,0.37109375),
|
|
vec3(0.83984375,0.52734375,0.52734375),
|
|
vec3(0.83984375,0.52734375,0.68359375),
|
|
vec3(0.83984375,0.52734375,0.83984375),
|
|
vec3(0.83984375,0.52734375,0.99609375),
|
|
vec3(0.83984375,0.68359375,0.0),
|
|
vec3(0.83984375,0.68359375,0.37109375),
|
|
vec3(0.83984375,0.68359375,0.52734375),
|
|
vec3(0.83984375,0.68359375,0.68359375),
|
|
vec3(0.83984375,0.68359375,0.83984375),
|
|
vec3(0.83984375,0.68359375,0.99609375),
|
|
vec3(0.83984375,0.83984375,0.0),
|
|
vec3(0.83984375,0.83984375,0.37109375),
|
|
vec3(0.83984375,0.83984375,0.52734375),
|
|
vec3(0.83984375,0.83984375,0.68359375),
|
|
vec3(0.83984375,0.83984375,0.83984375),
|
|
vec3(0.83984375,0.83984375,0.99609375),
|
|
vec3(0.83984375,0.99609375,0.0),
|
|
vec3(0.83984375,0.99609375,0.37109375),
|
|
vec3(0.83984375,0.99609375,0.52734375),
|
|
vec3(0.83984375,0.99609375,0.68359375),
|
|
vec3(0.83984375,0.99609375,0.83984375),
|
|
vec3(0.83984375,0.99609375,0.99609375),
|
|
vec3(0.99609375,0.0,0.0),
|
|
vec3(0.99609375,0.0,0.37109375),
|
|
vec3(0.99609375,0.0,0.52734375),
|
|
vec3(0.99609375,0.0,0.68359375),
|
|
vec3(0.99609375,0.0,0.83984375),
|
|
vec3(0.99609375,0.0,0.99609375),
|
|
vec3(0.99609375,0.37109375,0.0),
|
|
vec3(0.99609375,0.37109375,0.37109375),
|
|
vec3(0.99609375,0.37109375,0.52734375),
|
|
vec3(0.99609375,0.37109375,0.68359375),
|
|
vec3(0.99609375,0.37109375,0.83984375),
|
|
vec3(0.99609375,0.37109375,0.99609375),
|
|
vec3(0.99609375,0.52734375,0.0),
|
|
vec3(0.99609375,0.52734375,0.37109375),
|
|
vec3(0.99609375,0.52734375,0.52734375),
|
|
vec3(0.99609375,0.52734375,0.68359375),
|
|
vec3(0.99609375,0.52734375,0.83984375),
|
|
vec3(0.99609375,0.52734375,0.99609375),
|
|
vec3(0.99609375,0.68359375,0.0),
|
|
vec3(0.99609375,0.68359375,0.37109375),
|
|
vec3(0.99609375,0.68359375,0.52734375),
|
|
vec3(0.99609375,0.68359375,0.68359375),
|
|
vec3(0.99609375,0.68359375,0.83984375),
|
|
vec3(0.99609375,0.68359375,0.99609375),
|
|
vec3(0.99609375,0.83984375,0.0),
|
|
vec3(0.99609375,0.83984375,0.37109375),
|
|
vec3(0.99609375,0.83984375,0.52734375),
|
|
vec3(0.99609375,0.83984375,0.68359375),
|
|
vec3(0.99609375,0.83984375,0.83984375),
|
|
vec3(0.99609375,0.83984375,0.99609375),
|
|
vec3(0.99609375,0.99609375,0.0),
|
|
vec3(0.99609375,0.99609375,0.37109375),
|
|
vec3(0.99609375,0.99609375,0.52734375),
|
|
vec3(0.99609375,0.99609375,0.68359375),
|
|
vec3(0.99609375,0.99609375,0.83984375),
|
|
vec3(0.99609375,0.99609375,0.99609375),
|
|
vec3(0.03125,0.03125,0.03125),
|
|
vec3(0.0703125,0.0703125,0.0703125),
|
|
vec3(0.109375,0.109375,0.109375),
|
|
vec3(0.1484375,0.1484375,0.1484375),
|
|
vec3(0.1875,0.1875,0.1875),
|
|
vec3(0.2265625,0.2265625,0.2265625),
|
|
vec3(0.265625,0.265625,0.265625),
|
|
vec3(0.3046875,0.3046875,0.3046875),
|
|
vec3(0.34375,0.34375,0.34375),
|
|
vec3(0.3828125,0.3828125,0.3828125),
|
|
vec3(0.421875,0.421875,0.421875),
|
|
vec3(0.4609375,0.4609375,0.4609375),
|
|
vec3(0.5,0.5,0.5),
|
|
vec3(0.5390625,0.5390625,0.5390625),
|
|
vec3(0.578125,0.578125,0.578125),
|
|
vec3(0.6171875,0.6171875,0.6171875),
|
|
vec3(0.65625,0.65625,0.65625),
|
|
vec3(0.6953125,0.6953125,0.6953125),
|
|
vec3(0.734375,0.734375,0.734375),
|
|
vec3(0.7734375,0.7734375,0.7734375),
|
|
vec3(0.8125,0.8125,0.8125),
|
|
vec3(0.8515625,0.8515625,0.8515625),
|
|
vec3(0.890625,0.890625,0.890625),
|
|
vec3(0.9296875,0.9296875,0.9296875)
|
|
);
|
|
|
|
int get_iterations()
|
|
{
|
|
double real = ((gl_FragCoord.x / 1000.0f - 1.2f) * zoom + center_x) * 1.5f;
|
|
double imag = ((gl_FragCoord.y / 800.0f - 0.9f) * zoom + center_y) * 1.5f;
|
|
|
|
|
|
int iterations = 0;
|
|
double const_real = real;
|
|
double const_imag = imag;
|
|
|
|
while (iterations < MAX_ITERATIONS)
|
|
{
|
|
double tmp_real = real;
|
|
real = (real * real - imag * imag) + const_real;
|
|
imag = (2.0 * tmp_real * imag) + const_imag;
|
|
|
|
double dist = real * real + imag * imag;
|
|
|
|
if (dist > 4.0)
|
|
break;
|
|
|
|
++iterations;
|
|
}
|
|
return iterations;
|
|
}
|
|
|
|
|
|
vec4 return_color()
|
|
{
|
|
int iter = get_iterations();
|
|
if (iter == MAX_ITERATIONS)
|
|
{
|
|
gl_FragDepth = 0.0f;
|
|
return vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
}
|
|
int colorIndex = int((float(iter)/float(MAX_ITERATIONS))*256);
|
|
vec3 color = colors[colorIndex];
|
|
return vec4(color.x, color.y, color.z, 1.0);
|
|
|
|
}
|
|
|
|
void main()
|
|
{
|
|
fragColor = return_color();
|
|
}
|
|
|