]> git.tdb.fi Git - libs/demoscene.git/blobdiff - data/vignette.glsl
Add a vignette postprocessor
[libs/demoscene.git] / data / vignette.glsl
diff --git a/data/vignette.glsl b/data/vignette.glsl
new file mode 100644 (file)
index 0000000..58822c4
--- /dev/null
@@ -0,0 +1,32 @@
+import postprocess;
+
+uniform Vignette
+{
+       vec2 coord_scale;
+       vec4 optical;
+       vec2 optical_range;
+       float natural;
+};
+
+#pragma MSP stage(fragment)
+void main()
+{
+       vec4 incoming = texture(source, texcoord);
+       vec2 r = vertex.xy*coord_scale;
+       float r_sq = dot(r, r);
+
+       float vignette = 1.0;
+       if(r_sq>=optical_range.y)
+               vignette = 0.0;
+       else if(r_sq>=optical_range.x)
+       {
+               float r = sqrt(r_sq)-optical.x;
+               float v = (optical.z*acos(r/optical.y)-sqrt(optical.z-r*r)*r);
+               vignette = v/optical.w;
+       }
+
+       float c_sq = 1/(1+r_sq*natural);
+       vignette *= c_sq*c_sq;
+
+       frag_color = vec4(incoming.rgb*vignette, incoming.a);
+}