{
    "name": "Mandelbrot Zoom",
    "description": "Mandelbrot mit Maus-Zoom",
    "vertex_shader": "attribute vec2 a_position;\nvoid main() {\n    gl_Position = vec4(a_position, 0.0, 1.0);\n}",
    "fragment_shader": "precision mediump float;\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec2 u_mouse;\nuniform float u_zoom;\n\nvec2 csqr(vec2 z) { return vec2(z.x*z.x - z.y*z.y, 2.0*z.x*z.y); }\n\nvoid main() {\n    vec2 uv = (gl_FragCoord.xy - 0.5*u_resolution.xy) \/ u_resolution.y;\n    float zoom = (1.5 + 0.5*sin(u_time*0.2)) \/ u_zoom;\n    vec2 c = uv * zoom + vec2(-0.5, 0.0) + (u_mouse \/ u_resolution - 0.5) * 0.5;\n    vec2 z = vec2(0.0);\n    float iter = 0.0;\n    for (int i = 0; i < 80; i++) {\n        z = csqr(z) + c;\n        if (dot(z, z) > 4.0) break;\n        iter++;\n    }\n    float col = iter \/ 80.0;\n    gl_FragColor = vec4(vec3(16.0*col, 8.0*col*0.7, 4.0*col*0.4), 1.0);\n}"
}