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.
108 lines
4.1 KiB
108 lines
4.1 KiB
#extension GL_OES_EGL_image_external : require
|
|
|
|
precision highp float;
|
|
|
|
varying highp vec2 textureCoordinate;
|
|
|
|
uniform samplerExternalOES inputImageTexture;
|
|
uniform sampler2D curve;
|
|
uniform sampler2D curve2;
|
|
uniform highp float texelWidthOffset;
|
|
uniform highp float texelHeightOffset;
|
|
uniform highp float blurSize;
|
|
|
|
vec4 OverlayBlendingVec4(vec4 down, vec4 up, float fAlpha)
|
|
{
|
|
if ( down.r < 0.5 )
|
|
{
|
|
up.r = up.r * down.r * 2.0;
|
|
}
|
|
else
|
|
{
|
|
up.r = 1.0 - ( ( 1.0 - down.r) * ( 1.0 - up.r ) * 2.0 );
|
|
}
|
|
if ( down.g < 0.5 )
|
|
{
|
|
up.g = up.g * down.g * 2.0;
|
|
}
|
|
else
|
|
{
|
|
up.g = 1.0 - ( ( 1.0 - down.g) * ( 1.0 - up.g ) * 2.0 );
|
|
}
|
|
|
|
if ( down.b < 0.5 )
|
|
{
|
|
up.b = up.b * down.b * 2.0;
|
|
}
|
|
else
|
|
{
|
|
up.b = 1.0 - ( ( 1.0 - down.b) * ( 1.0 - up.b ) * 2.0 );
|
|
}
|
|
|
|
down = ( up - down ) * fAlpha + down;
|
|
|
|
return down;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
float xCoordinate = textureCoordinate.x;
|
|
float yCoordinate = textureCoordinate.y;
|
|
|
|
vec4 textureColor = texture2D( inputImageTexture, vec2(xCoordinate, yCoordinate));
|
|
highp vec2 firstOffset = vec2(1.3846153846 * texelWidthOffset, 1.3846153846 * texelHeightOffset) * blurSize;
|
|
highp vec2 secondOffset = vec2(3.2307692308 * texelWidthOffset, 3.2307692308 * texelHeightOffset) * blurSize;
|
|
|
|
highp vec2 centerTextureCoordinate = vec2(xCoordinate, yCoordinate);
|
|
highp vec2 oneStepLeftTextureCoordinate = vec2(xCoordinate, yCoordinate) - firstOffset;
|
|
highp vec2 twoStepsLeftTextureCoordinate = vec2(xCoordinate, yCoordinate) - secondOffset;
|
|
highp vec2 oneStepRightTextureCoordinate = vec2(xCoordinate, yCoordinate) + firstOffset;
|
|
highp vec2 twoStepsRightTextureCoordinate = vec2(xCoordinate, yCoordinate) + secondOffset;
|
|
|
|
lowp vec4 fragmentColor = texture2D(inputImageTexture, vec2(centerTextureCoordinate.x, centerTextureCoordinate.y)) * 0.2270270270;
|
|
fragmentColor += texture2D(inputImageTexture, vec2(oneStepLeftTextureCoordinate.x, oneStepLeftTextureCoordinate.y)) * 0.3162162162;
|
|
fragmentColor += texture2D(inputImageTexture, vec2(oneStepRightTextureCoordinate.x, oneStepRightTextureCoordinate.y)) * 0.3162162162;
|
|
fragmentColor += texture2D(inputImageTexture, vec2(twoStepsLeftTextureCoordinate.x, twoStepsLeftTextureCoordinate.y)) * 0.0702702703;
|
|
fragmentColor += texture2D(inputImageTexture, vec2(twoStepsRightTextureCoordinate.x, twoStepsRightTextureCoordinate.y)) * 0.0702702703;
|
|
|
|
lowp vec4 blurColor = fragmentColor;
|
|
|
|
// step1 ScreenBlending
|
|
blurColor = 1.0 - ((1.0 - textureColor) * (1.0 - blurColor));
|
|
blurColor = clamp(blurColor, 0.0, 1.0);
|
|
textureColor = (blurColor - textureColor) * 0.7 + textureColor;
|
|
textureColor = clamp(textureColor, 0.0, 1.0);
|
|
|
|
// step2 OverlayBlending
|
|
textureColor = OverlayBlendingVec4(textureColor, vec4(0.0, 0.0, 0.0, 1.0), 0.3);
|
|
textureColor = clamp(textureColor, vec4(0.0, 0.0, 0.0, 1.0), vec4(1.0, 1.0, 1.0, 1.0));
|
|
|
|
// step3 curve
|
|
highp float redCurveValue = texture2D(curve, vec2(textureColor.r, 0.0)).r;
|
|
highp float greenCurveValue = texture2D(curve, vec2(textureColor.g, 0.0)).g;
|
|
highp float blueCurveValue = texture2D(curve, vec2(textureColor.b, 0.0)).b;
|
|
|
|
// step4 curve
|
|
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).r;
|
|
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).r;
|
|
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).r;
|
|
|
|
// step5 level
|
|
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).g;
|
|
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).g;
|
|
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).g;
|
|
|
|
// step6 curve
|
|
redCurveValue = texture2D(curve2, vec2(redCurveValue, 1.0)).r;
|
|
greenCurveValue = texture2D(curve2, vec2(greenCurveValue, 1.0)).g;
|
|
blueCurveValue = texture2D(curve2, vec2(blueCurveValue, 1.0)).b;
|
|
|
|
// step7 curve
|
|
redCurveValue = texture2D(curve, vec2(redCurveValue, 1.0)).b;
|
|
greenCurveValue = texture2D(curve, vec2(greenCurveValue, 1.0)).b;
|
|
|
|
blueCurveValue = texture2D(curve, vec2(blueCurveValue, 1.0)).b;
|
|
|
|
lowp vec4 BCSColor = vec4(redCurveValue, greenCurveValue, blueCurveValue, 1.0);
|
|
gl_FragColor = vec4(BCSColor.r,BCSColor.g,BCSColor.b,1.0);
|
|
} |