Remove deprecatd emscripten option ERROR_ON_MISSING_LIBRARIES
[mandelwow.git] / mandelwow.rs
index 76ca54e4cb5572a421d9aab8b1c18f961528ee77..1a6516c36f1266e991d916f419e5de0329d63d5d 100644 (file)
@@ -1,11 +1,10 @@
 // Wow. Such fractal.
 
-use cube::Cube;
+use crate::cube::Cube;
 use glium;
 use glium::index::PrimitiveType;
-use glium::Surface;
-use support;
-
+use glium::{Display, Program, Surface, implement_vertex, uniform};
+use crate::support;
 
 /*
 fn mand(cx: f32, cy: f32) -> [f32; 3] {
@@ -28,63 +27,17 @@ fn mand(cx: f32, cy: f32) -> [f32; 3] {
 }
 */
 
-pub fn program(display: &glium::Display) -> glium::Program {
-    return program!(display,
-        140 => {
-            vertex: r#"
-                #version 140
-                uniform mat4 perspective;
-                uniform mat4 view;
-                uniform mat4 model;
-                uniform vec2 z0;
-                in vec3 position;
-                out vec2 c;
-                out vec2 z;
-
-                void main() {
-                    mat4 modelview = view * model;
-                    gl_Position = perspective * modelview * vec4(position, 1.0);
-                    c = vec2(position.x, position.y);
-                    z = vec2(z0.x, z0.y);
-                }
-            "#,
-
-            fragment: r#"
-                #version 140
-                precision highp float;
-                in vec2 c;
-                in vec2 z;
-                out vec4 f_color;
-
-                void main() {
-                    float zx = z.x;
-                    float zy = z.y;
-                    int maxiter = 64;
-                    int iter = maxiter;
-                    while (iter > 0) {
-                        float zx2 = zx * zx;
-                        float zy2 = zy * zy;
-                        if (zx2 * zy2 > 4.0) {
-                          float index = float(iter) / float(maxiter);
-                          f_color = vec4(index, 0.1, 0.5 - index / 2, 0.8 - index);
-                          return;
-                        }
-                        zy = zx * zy * 2.0 + c.y;
-                        zx = zx2 - zy2 + c.x;
-                        iter -= 1;
-                    }
-                    f_color = vec4((sin(z.y) + 1.0) / 2,
-                                   (sin(c.y) + 1.0) / 2,
-                                   (sin(c.x) + 1.0) / 2,
-                                   1.0);
-                }
-            "#
-        }).unwrap();
+pub fn program(display: &Display) -> Program {
+    Program::from_source(
+            display,
+            include_str!("shaders/mandelwow.vert"),
+            include_str!("shaders/mandelwow.frag"), None)
+        .unwrap()
 }
 
-fn mandel<U>(display: &glium::Display,
+fn mandel<U>(display: &Display,
           frame: &mut glium::Frame,
-          program: &glium::Program,
+          program: &Program,
           uniforms: &U,
           bounds: &Cube,
           z: [f32; 2]) where U: glium::uniforms::Uniforms {
@@ -150,9 +103,9 @@ fn mandel<U>(display: &glium::Display,
     frame.draw(&vb, &indices, program, uniforms, &params).unwrap();
 }
 
-pub fn draw(display: &glium::Display,
+pub fn draw(display: &Display,
              mut frame: &mut glium::Frame,
-             program: &glium::Program,
+             program: &Program,
              model: [[f32; 4]; 4],
              camera: &support::camera::CameraState,
              bounds: &Cube,
@@ -175,6 +128,6 @@ pub fn draw(display: &glium::Display,
             perspective: camera.get_perspective(),
         };
 
-        mandel(&display, &mut frame, &program, &uniforms, bounds, z0);
+        mandel(display, &mut frame, program, &uniforms, bounds, z0);
     }
 }