From: Bernie Innocenti Date: Sat, 8 Apr 2017 20:33:50 +0000 (-0400) Subject: Move GLSL shaders to external files and use include_str!() to load them. X-Git-Tag: v0.5.0~5 X-Git-Url: https://codewiz.org/gitweb?a=commitdiff_plain;h=1124bb2dc1b8381bf4bfc437ab1689ec1b30d99b;p=mandelwow.git Move GLSL shaders to external files and use include_str!() to load them. --- diff --git a/bounding_box.rs b/bounding_box.rs index 657b206..95d3608 100644 --- a/bounding_box.rs +++ b/bounding_box.rs @@ -4,29 +4,8 @@ use glium::{Display, Program, Surface}; 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(); } diff --git a/mandelwow.frag b/mandelwow.frag new file mode 100644 index 0000000..3795fd4 --- /dev/null +++ b/mandelwow.frag @@ -0,0 +1,28 @@ +#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); +} diff --git a/mandelwow.rs b/mandelwow.rs index 76ca54e..d3b86e6 100644 --- a/mandelwow.rs +++ b/mandelwow.rs @@ -31,54 +31,8 @@ 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); - } - "# + vertex: include_str!("mandelwow.vert"), + fragment: include_str!("mandelwow.frag"), }).unwrap(); } diff --git a/mandelwow.vert b/mandelwow.vert new file mode 100644 index 0000000..9c3e5f8 --- /dev/null +++ b/mandelwow.vert @@ -0,0 +1,15 @@ +#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); +} diff --git a/solid.frag b/solid.frag new file mode 100644 index 0000000..7d1a7c7 --- /dev/null +++ b/solid.frag @@ -0,0 +1,7 @@ +#version 140 + +out vec4 color; + +void main() { + color = vec4(1.0, 1.0, 1.0, 1.0); +} diff --git a/solid.vert b/solid.vert new file mode 100644 index 0000000..aaacaa9 --- /dev/null +++ b/solid.vert @@ -0,0 +1,10 @@ +#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); +}