// 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] {
}
*/
-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 {
frame.draw(&vb, &indices, program, uniforms, ¶ms).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,
perspective: camera.get_perspective(),
};
- mandel(&display, &mut frame, &program, &uniforms, bounds, z0);
+ mandel(display, &mut frame, program, &uniforms, bounds, z0);
}
}