You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
2.4 KiB
92 lines
2.4 KiB
#extension GL_OES_EGL_image_external : require
|
|
|
|
precision highp float;
|
|
|
|
varying highp vec2 textureCoordinate;
|
|
|
|
uniform samplerExternalOES inputImageTexture;
|
|
uniform sampler2D curve;
|
|
uniform sampler2D grey1Frame;
|
|
|
|
void main()
|
|
{
|
|
mediump vec4 textureColor;
|
|
mediump vec4 textureColorRes;
|
|
vec4 grey1Color;
|
|
mediump float satVal = 65.0 / 100.0;
|
|
mediump float mask1R = 29.0 / 255.0;
|
|
mediump float mask1G = 43.0 / 255.0;
|
|
mediump float mask1B = 95.0 / 255.0;
|
|
|
|
highp float xCoordinate = textureCoordinate.x;
|
|
highp float yCoordinate = textureCoordinate.y;
|
|
|
|
highp float redCurveValue;
|
|
highp float greenCurveValue;
|
|
highp float blueCurveValue;
|
|
|
|
textureColor = texture2D( inputImageTexture, vec2(xCoordinate, yCoordinate));
|
|
textureColorRes = textureColor;
|
|
|
|
grey1Color = texture2D(grey1Frame, vec2(xCoordinate, yCoordinate));
|
|
|
|
// step1. saturation
|
|
highp float G = (textureColor.r + textureColor.g + textureColor.b);
|
|
G = G / 3.0;
|
|
|
|
redCurveValue = ((1.0 - satVal) * G + satVal * textureColor.r);
|
|
greenCurveValue = ((1.0 - satVal) * G + satVal * textureColor.g);
|
|
blueCurveValue = ((1.0 - satVal) * G + satVal * textureColor.b);
|
|
|
|
// step2 curve
|
|
redCurveValue = texture2D(curve, vec2(textureColor.r, 0.0)).r;
|
|
greenCurveValue = texture2D(curve, vec2(textureColor.g, 0.0)).g;
|
|
blueCurveValue = texture2D(curve, vec2(textureColor.b, 0.0)).b;
|
|
|
|
// step3 30% opacity ExclusionBlending
|
|
textureColor = vec4(redCurveValue, greenCurveValue, blueCurveValue, 1.0);
|
|
mediump vec4 textureColor2 = vec4(mask1R, mask1G, mask1B, 1.0);
|
|
textureColor2 = textureColor + textureColor2 - (2.0 * textureColor2 * textureColor);
|
|
|
|
textureColor = (textureColor2 - textureColor) * 0.3 + textureColor;
|
|
|
|
mediump vec4 overlay = vec4(0, 0, 0, 1.0);
|
|
mediump vec4 base = vec4(textureColor.r, textureColor.g, textureColor.b, 1.0);
|
|
|
|
// step4 overlay blending
|
|
mediump float ra;
|
|
if (base.r < 0.5)
|
|
{
|
|
ra = overlay.r * base.r * 2.0;
|
|
}
|
|
else
|
|
{
|
|
ra = 1.0 - ((1.0 - base.r) * (1.0 - overlay.r) * 2.0);
|
|
}
|
|
|
|
mediump float ga;
|
|
if (base.g < 0.5)
|
|
{
|
|
ga = overlay.g * base.g * 2.0;
|
|
}
|
|
else
|
|
{
|
|
ga = 1.0 - ((1.0 - base.g) * (1.0 - overlay.g) * 2.0);
|
|
}
|
|
|
|
mediump float ba;
|
|
if (base.b < 0.5)
|
|
{
|
|
ba = overlay.b * base.b * 2.0;
|
|
}
|
|
else
|
|
{
|
|
ba = 1.0 - ((1.0 - base.b) * (1.0 - overlay.b) * 2.0);
|
|
}
|
|
|
|
textureColor = vec4(ra, ga, ba, 1.0);
|
|
base = (textureColor - base) * (grey1Color.r/2.0) + base;
|
|
|
|
gl_FragColor = vec4(base.r, base.g, base.b, 1.0);
|
|
}
|
|
|