summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--shaders/stretcher.fs51
1 files changed, 51 insertions, 0 deletions
diff --git a/shaders/stretcher.fs b/shaders/stretcher.fs
new file mode 100644
index 0000000..e46afe2
--- /dev/null
+++ b/shaders/stretcher.fs
@@ -0,0 +1,51 @@
+#version 330
+
+#define PI 3.1415926538
+
+// Input vertex attributes (from vertex shader)
+in vec2 fragTexCoord;
+in vec4 fragColor;
+
+// Input uniform values
+uniform sampler2D texture0;
+uniform vec4 colDiffuse;
+
+// Output fragment color
+out vec4 finalColor;
+
+// Imported variables from code
+uniform float renderWidth;
+uniform float renderHeight;
+uniform float stretch_amount;
+
+// Variable set up
+vec2 flipped = vec2(fragTexCoord.x, 1 - fragTexCoord.y); // flipping
+vec2 textureResolution = vec2(renderWidth, renderHeight);
+//vec2 onePixel = vec2(1.0, 1.0) / textureResolution; // distance of a single pixel in texels
+vec2 pixelCoor = flipped * textureResolution;
+
+//float gridify(float coordinate, float spacing) {
+// return clamp(floor(((-cos( coordinate * 2 * PI)) / 2) + spacing), 0.0, 1.0);
+//}
+
+//float is_pixel(vec2 coordinate, float spacing) {
+// return gridify(coordinate.x, spacing) * gridify(coordinate.y, spacing);
+//}
+
+float stretch(float coordinate, float intensity) {
+ return (-pow(((2.0 * coordinate * intensity) - stretch_amount), 3.0));
+}
+
+void main()
+{
+ //float is_pixel = gridify(pixelCoor.x, 1.0) * gridify(pixelCoor.y, 1.0);
+ flipped.y += stretch(flipped.y, stretch_amount) * (pow(flipped.x - 0.5, 2) * 2);
+ flipped.x += stretch(flipped.x, stretch_amount) * (pow(flipped.y - 0.5, 2) * 2);
+ vec4 texelColor = texture(texture0, flipped);
+ if (flipped.y > 1.0 || flipped.y < 0.0 || flipped.x < 0.0 || flipped.x > 1.0) {
+ texelColor = vec4(0.0,0.0,0.0,1.0);
+ }
+
+ // NOTE: Implement here your fragment shader code
+ finalColor = texelColor*colDiffuse;
+}