use glium::index::{IndexBuffer, PrimitiveType};
pub fn solid_fill_program(display: &Display) -> Program {
- let vertex_shader_src = r#"
- #version 140
- in vec3 position;
- uniform mat4 perspective;
- uniform mat4 view;
- uniform mat4 model;
-
- void main() {
- mat4 modelview = view * model;
- gl_Position = perspective * modelview * vec4(position, 1.0);
- }
- "#;
-
- let fragment_shader_src = r#"
- #version 140
-
- out vec4 color;
-
- void main() {
- color = vec4(1.0, 1.0, 1.0, 1.0);
- }
- "#;
-
+ let vertex_shader_src = include_str!("solid.vert");
+ let fragment_shader_src = include_str!("solid.frag");
return Program::from_source(display, vertex_shader_src, fragment_shader_src, None).unwrap();
}
--- /dev/null
+#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);
+}
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);
- }
- "#
+ vertex: include_str!("mandelwow.vert"),
+ fragment: include_str!("mandelwow.frag"),
}).unwrap();
}
--- /dev/null
+#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);
+}
--- /dev/null
+#version 140
+
+out vec4 color;
+
+void main() {
+ color = vec4(1.0, 1.0, 1.0, 1.0);
+}
--- /dev/null
+#version 140
+in vec3 position;
+uniform mat4 perspective;
+uniform mat4 view;
+uniform mat4 model;
+
+void main() {
+ mat4 modelview = view * model;
+ gl_Position = perspective * modelview * vec4(position, 1.0);
+}