summaryrefslogtreecommitdiff
path: root/advanced_opengl/8.geometry_shader/shaders
diff options
context:
space:
mode:
Diffstat (limited to 'advanced_opengl/8.geometry_shader/shaders')
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/base.fs11
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/base.gs27
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/base.vs14
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/basic.fs13
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/basic.vs16
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/explosion.fs13
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/explosion.gs44
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/explosion.vs18
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/normals.fs9
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/normals.gs44
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/normals.vs18
11 files changed, 227 insertions, 0 deletions
diff --git a/advanced_opengl/8.geometry_shader/shaders/base.fs b/advanced_opengl/8.geometry_shader/shaders/base.fs
new file mode 100644
index 0000000..283d885
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/base.fs
@@ -0,0 +1,11 @@
+#version 330 core
+
+in vec3 fcolor;
+
+out vec4 frag_color;
+
+void
+main(void)
+{
+ frag_color = vec4(fcolor, 1.0f);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/base.gs b/advanced_opengl/8.geometry_shader/shaders/base.gs
new file mode 100644
index 0000000..6b140c5
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/base.gs
@@ -0,0 +1,27 @@
+#version 330 core
+layout(points) in;
+layout(triangle_strip, max_vertices = 5) out;
+
+in VS_OUT {
+ vec3 color;
+} gs_in[];
+
+out vec3 fcolor;
+
+void
+main(void)
+{
+ fcolor = gs_in[0].color;
+ gl_Position = gl_in[0].gl_Position+vec4(-0.2, -0.2, 0.0, 0.0);
+ EmitVertex();
+ gl_Position = gl_in[0].gl_Position+vec4(0.2, -0.2, 0.0, 0.0);
+ EmitVertex();
+ gl_Position = gl_in[0].gl_Position+vec4(-0.2, 0.2, 0.0, 0.0);
+ EmitVertex();
+ gl_Position = gl_in[0].gl_Position+vec4(0.2, 0.2, 0.0, 0.0);
+ EmitVertex();
+ fcolor = vec3(1.0, 1.0, 1.0);
+ gl_Position = gl_in[0].gl_Position+vec4(0.0, 0.4, 0.0, 0.0);
+ EmitVertex();
+ EndPrimitive();
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/base.vs b/advanced_opengl/8.geometry_shader/shaders/base.vs
new file mode 100644
index 0000000..2924e6c
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/base.vs
@@ -0,0 +1,14 @@
+#version 330 core
+layout(location = 0) in vec2 apos;
+layout(location = 1) in vec3 acolor;
+
+out VS_OUT {
+ vec3 color;
+} vs_out;
+
+void
+main(void)
+{
+ vs_out.color = acolor;
+ gl_Position = vec4(apos, 0.0f, 1.0f);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/basic.fs b/advanced_opengl/8.geometry_shader/shaders/basic.fs
new file mode 100644
index 0000000..bdd4b9a
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/basic.fs
@@ -0,0 +1,13 @@
+#version 330 core
+
+in vec2 tex_coords;
+
+out vec4 frag_color;
+
+uniform sampler2D texture1;
+
+void
+main(void)
+{
+ frag_color = texture(texture1, tex_coords);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/basic.vs b/advanced_opengl/8.geometry_shader/shaders/basic.vs
new file mode 100644
index 0000000..9a630b6
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/basic.vs
@@ -0,0 +1,16 @@
+#version 330 core
+layout(location = 0) in vec3 apos;
+layout(location = 2) in vec2 atex_coords;
+
+out vec2 tex_coords;
+
+uniform mat4 model;
+uniform mat4 view;
+uniform mat4 projection;
+
+void
+main(void)
+{
+ gl_Position = projection*view*model*vec4(apos, 1.0f);
+ tex_coords = atex_coords;
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/explosion.fs b/advanced_opengl/8.geometry_shader/shaders/explosion.fs
new file mode 100644
index 0000000..70e7151
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/explosion.fs
@@ -0,0 +1,13 @@
+#version 330 core
+
+in vec2 ftex_coords;
+
+out vec4 frag_color;
+
+uniform sampler2D texture0;
+
+void
+main(void)
+{
+ frag_color = texture(texture0, ftex_coords);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/explosion.gs b/advanced_opengl/8.geometry_shader/shaders/explosion.gs
new file mode 100644
index 0000000..1883ad2
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/explosion.gs
@@ -0,0 +1,44 @@
+#version 330 core
+layout(triangles) in;
+layout(triangle_strip, max_vertices = 3) out;
+
+in VS_OUT {
+ vec2 gtex_coords;
+} gs_in[];
+
+out vec2 ftex_coords;
+
+uniform float time;
+
+vec3
+get_normal(void)
+{
+ vec3 a = vec3(gl_in[0].gl_Position)-vec3(gl_in[1].gl_Position);
+ vec3 b = vec3(gl_in[2].gl_Position)-vec3(gl_in[1].gl_Position);
+ return(normalize(cross(a, b)));
+}
+
+vec4
+explode(vec4 position, vec3 normal)
+{
+ float magnitude = 0.2f;
+ vec3 direction = normal*magnitude*((sin(time)+1.0f)/2.0f);
+ vec4 result = position+vec4(direction, 0.0f);
+ return(result);
+}
+
+void
+main(void)
+{
+ vec3 normal = get_normal();
+ gl_Position = explode(gl_in[0].gl_Position, normal);
+ ftex_coords = gs_in[0].gtex_coords;
+ EmitVertex();
+ gl_Position = explode(gl_in[1].gl_Position, normal);
+ ftex_coords = gs_in[1].gtex_coords;
+ EmitVertex();
+ gl_Position = explode(gl_in[2].gl_Position, normal);
+ ftex_coords = gs_in[2].gtex_coords;
+ EmitVertex();
+ EndPrimitive();
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/explosion.vs b/advanced_opengl/8.geometry_shader/shaders/explosion.vs
new file mode 100644
index 0000000..5925b8f
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/explosion.vs
@@ -0,0 +1,18 @@
+#version 330 core
+layout(location = 0) in vec3 apos;
+layout(location = 1) in vec2 atex_coords;
+
+out VS_OUT {
+ vec2 gtex_coords;
+} vs_out;
+
+uniform mat4 projection;
+uniform mat4 view;
+uniform mat4 model;
+
+void
+main(void)
+{
+ vs_out.gtex_coords = atex_coords;
+ gl_Position = projection*view*model*vec4(apos, 1.0f);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/normals.fs b/advanced_opengl/8.geometry_shader/shaders/normals.fs
new file mode 100644
index 0000000..fbbafbf
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/normals.fs
@@ -0,0 +1,9 @@
+#version 330 core
+
+out vec4 frag_color;
+
+void
+main(void)
+{
+ frag_color = vec4(1.0, 0.0, 0.0, 1.0);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/normals.gs b/advanced_opengl/8.geometry_shader/shaders/normals.gs
new file mode 100644
index 0000000..3720a5f
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/normals.gs
@@ -0,0 +1,44 @@
+#version 330 core
+layout(triangles) in;
+layout(line_strip, max_vertices = 6) out;
+
+in VS_OUT {
+ vec3 normal;
+} gs_in[];
+
+uniform mat4 projection;
+
+const float MAGNITUDE = 0.4;
+
+void
+generate_line(int index)
+{
+ gl_Position = projection*gl_in[index].gl_Position;
+ EmitVertex();
+ gl_Position = projection*(gl_in[index].gl_Position+
+ vec4(gs_in[index].normal, 0.0)*MAGNITUDE);
+ EmitVertex();
+ EndPrimitive();
+}
+
+void
+main(void)
+{
+ /*
+ vec4 center = (gl_in[0].gl_Position+
+ gl_in[1].gl_Position+
+ gl_in[2].gl_Position)/3.0;
+ vec4 end = center+vec4(((gs_in[0].normal+
+ gs_in[1].normal+
+ gs_in[2].normal)/3.0),
+ 0.0)*MAGNITUDE;
+ gl_Position = projection*center;
+ EmitVertex();
+ gl_Position = projection*end;
+ EmitVertex();
+ EndPrimitive();
+ */
+ generate_line(0);
+ generate_line(1);
+ generate_line(2);
+}
diff --git a/advanced_opengl/8.geometry_shader/shaders/normals.vs b/advanced_opengl/8.geometry_shader/shaders/normals.vs
new file mode 100644
index 0000000..3b728e5
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/normals.vs
@@ -0,0 +1,18 @@
+#version 330 core
+layout(location = 0) in vec3 apos;
+layout(location = 1) in vec3 anormal;
+
+out VS_OUT {
+ vec3 normal;
+} vs_out;
+
+uniform mat4 view;
+uniform mat4 model;
+
+void
+main(void)
+{
+ mat3 normal_matrix = mat3(transpose(inverse(view*model)));
+ vs_out.normal = normalize(normal_matrix*anormal);
+ gl_Position = view*model*vec4(apos, 1.0);
+}