Back to shaders

Shader test bench

Corner Color Tint.fs

vidvox-isf-files color glsl runnable fragment MIT
Source
runnable fragment

Complete GLSL fragment shader. Stronghold runs it directly when the browser can compile it.

Code

uniform sampler2D inputImage;
uniform vec4 color1;
uniform vec4 color2;
uniform vec4 color3;
uniform vec4 color4;
uniform float rotationAngle;
precision mediump float;
/*
{
  "CATEGORIES" : [
    "Color Effect"
  ],
  "DESCRIPTION" : "Tints the corners of the image in different colors.",
  "ISFVSN" : "2",
  "INPUTS" : [
    {
      "NAME" : "inputImage",
      "TYPE" : "image"
    },
    {
      "NAME" : "color1",
      "TYPE" : "color",
      "DEFAULT" : [
        1,
        0,
        0,
        1
      ]
    },
    {
      "NAME" : "color2",
      "TYPE" : "color",
      "DEFAULT" : [
        0,
        1,
        0,
        1
      ]
    },
    {
      "NAME" : "color3",
      "TYPE" : "color",
      "DEFAULT" : [
        0,
        0,
        1,
        1
      ]
    },
    {
      "NAME" : "color4",
      "TYPE" : "color",
      "DEFAULT" : [
        1,
        1,
        1,
        1
      ]
    },
    {
      "NAME" : "rotationAngle",
      "TYPE" : "float",
      "MAX" : 1,
      "DEFAULT" : 0,
      "MIN" : 0
    }
  ],
  "CREDIT" : "VIDVOX"
}
*/

const float pi = 3.1415926535897932384626433832795;

vec2 rotatePointNorm(vec2 pt, float rot)	{
	vec2 returnMe = pt;

	float r = distance(vec2(0.50), returnMe);
	float a = atan((returnMe.y-0.5),(returnMe.x-0.5));

	returnMe.x = r * cos(a + 2.0 * pi * rot - pi) + 0.5;
	returnMe.y = r * sin(a + 2.0 * pi * rot - pi) + 0.5;
	
	returnMe = returnMe;
	
	return returnMe;
}

void main()	{
	vec2		pt = (gl_FragCoord.xy / u_resolution.xy);
	vec4		srcPixel = texture2D(inputImage, pt);
	vec4		dist = vec4(0.0);
	pt = rotatePointNorm(pt,rotationAngle+0.5);
	dist.r = max(1.0-distance(vec2(0.0,0.0),pt),0.0);
	dist.g = max(1.0-distance(vec2(1.0,0.0),pt),0.0);
	dist.b = max(1.0-distance(vec2(0.0,1.0),pt),0.0);
	dist.a = max(1.0-distance(vec2(1.0,1.0),pt),0.0);
	
	float		luma1 = (srcPixel.r+srcPixel.g+srcPixel.b)/3.0;
	vec4		resultPixel = (color1 * dist.r + color2 * dist.g + color3 * dist.b + color4 * dist.a) / (dist.r + dist.g + dist.b + dist.a);
	float		luma2 = (resultPixel.r+resultPixel.g+resultPixel.b)/3.0;
	resultPixel.rgb *= luma1 / luma2;
	resultPixel.a *= srcPixel.a;
	
	gl_FragColor = resultPixel;
}