aboutsummaryrefslogtreecommitdiff
path: root/src/shader/code/geometry.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader/code/geometry.glsl')
-rw-r--r--src/shader/code/geometry.glsl37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/shader/code/geometry.glsl b/src/shader/code/geometry.glsl
new file mode 100644
index 0000000..6701b41
--- /dev/null
+++ b/src/shader/code/geometry.glsl
@@ -0,0 +1,37 @@
+static const std::string GEOMETRY_SHADER_CODE = R"(
+#version 430
+
+layout (points) in;
+layout (triangle_strip, max_vertices=4) out;
+
+uniform mat4 MVP;
+
+in VS_OUT {
+ vec3 color;
+} gs_in[];
+
+out vec3 color;
+
+vec4 project(vec4 v) {
+ return MVP * v;
+}
+
+void emitSquareAt(vec4 position) {
+ const float size = 0.2;
+
+ gl_Position = project(position + vec4(-size, -size, 0.0, 0.0));
+ EmitVertex();
+ gl_Position = project(position + vec4( size, -size, 0.0, 0.0));
+ EmitVertex();
+ gl_Position = project(position + vec4(-size, size, 0.0, 0.0));
+ EmitVertex();
+ gl_Position = project(position + vec4( size, size, 0.0, 0.0));
+ EmitVertex();
+}
+
+void main() {
+ color = gs_in[0].color;
+ emitSquareAt(gl_in[0].gl_Position);
+ EndPrimitive();
+}
+)";