#version 330 core out vec4 FragColor; in vec3 ourColor; in vec2 TexCoord; uniform float time; uniform bool fusion; uniform float alpha; uniform sampler2D bgMap; uniform sampler2D maskMap; uniform sampler2D sourceMap; uniform sampler2D textMap; uniform sampler2D movieTextMap; uniform sampler2D bgMapMask; uniform sampler2D sourceAlphaMap; vec3 rgb2hsl(vec3 color) { float h, s, l; float r = color.r; float g = color.g; float b = color.b; float Cmax = max(max(r, g), b); float Cmin = min(min(r, g), b); l = (Cmax + Cmin) / 2.0; if (Cmax == Cmin) { h = 0.0; s = 0.0; } else { float delta = Cmax - Cmin; s = (l > 0.5) ? delta / (2.0 - l * 2.0) : delta / (l * 2.0); if (r > g && r > b) { h = (g - b) / delta + ((g < b) ? 6.0 : 0.0); } else if (g > b) { h = (b - r) / delta + 2.0; } else { h = (r - g) / delta + 4.0; } h = h / 6.0; } return vec3(h, s, l); } float hue2rgb(float M1, float M2, float hue) { float c; if (hue < 0.0) { hue += 1.0; } else if (hue > 1.0) { hue -= 1.0; } if ((6.0 * hue) < 1.0) { c = (M1 + (M2 - M1) * hue * 6.0); } else if ((2.0 * hue) < 1.0) { c = M2; } else if ((3.0 * hue) < 2.0) { c = (M1 + (M2 - M1) * ((2.0/3.0) - hue) * 6.0); } else { c = M1; } return c; } vec3 hsl2rgb(vec3 hsl) { float M1, M2; float hue = hsl.x; float saturation = hsl.y; float lightness = hsl.z; vec3 color; if (saturation == 0.0) { color.r = lightness; color.g = lightness; color.b = lightness; } else { if (lightness < 0.5) { M2 = lightness * (1.0 + saturation); } else { M2 = lightness + saturation - lightness * saturation; } M1 = (2.0 * lightness - M2); color.r = hue2rgb(M1, M2, hue + (1.0/3.0)); color.g = hue2rgb(M1, M2, hue); color.b = hue2rgb(M1, M2, hue - (1.0/3.0)); } return color; } void main() { vec4 bgColor = texture2D( bgMap, TexCoord ); vec4 bgMaskColor = texture2D( bgMapMask, TexCoord ); vec4 movieColor = texture2D( movieTextMap, TexCoord ); // vec3 hsl = rgb2hsl(bgColor); // hsl.y *= 0.4; // bgColor = hsl2rgb(hsl); vec4 frgColor = vec4(1.0); if (fusion) { vec4 sourceColor = texture2D(sourceMap, TexCoord); vec4 sourceColorAlpha = texture2D(sourceAlphaMap, TexCoord); vec4 maskColor = texture2D(maskMap, TexCoord); vec4 textColor = texture2D(textMap, TexCoord); // sourceColor = sourceColor * (1 - maskColor); vec4 sourceBgMask = mix(bgMaskColor, sourceColor, sourceColorAlpha.a ); float a = clamp(bgMaskColor.a * 10, 0.0, 1.0); sourceBgMask = sourceBgMask * maskColor * a; // vec4 maskLevel = level1 * maskColor; // // bgMaskColor.rgb = bgMaskColor.rgb * maskColor.rgb; // vec4 bgFrame = bgColor * (1 - clamp(ceil(bgMaskColor.a * 1.5), 0, 1)); // float x = abs((TexCoord.x - 0.5) * 2); // x = (1 - x * 2.3 + 0.5); // int s = int(sourceColor1.a) ^ int(sourceColor2.a);// + mix(maskLevel, bgMaskColor, bgMaskColor.a * alpha); // float a = s * x; // vec4 sourceAplha = sourceColor * a + sourceColor * (1 -s) ; // vec4 sourceMix = mix(bgColor, bgMaskColor, bgMaskColor.a * alpha); vec4 destAlpha = (1 - sourceColor.a) * maskColor; frgColor = mix(bgColor, sourceBgMask, maskColor * alpha); frgColor = mix(frgColor, sourceBgMask, bgMaskColor * maskColor * alpha) * (1 - textColor * alpha); // float a = clamp(bgMaskColor.a * 10, 0.0, 1.0); // float x = abs((TexCoord.x - 0.5) * 2); // float ssa = sa * (1 - clamp(x * 2.5, 0, 1)); // sourceColor = sourceColor * a;// mix(bgMaskColor.rgb, sourceColor, a); // maskColor = maskColor * a; // vec3 sourceMix = mix(bgMaskColor.rgb, sourceColor, ssa);//, sourceColor * (1 - x ) * maskColor ; // mix(sourceColor, maskColor, maskColor); // sourceMix = sourceMix * (1 - clamp(x * 0.6, 0, 1)) ; // // bgColor = mix(bgColor, bgMaskColor.rgb, bgMaskColor.a * 0.9 * alpha); // // sourceMix = mix(bgColor, sourceMix, (1.5 - x) * maskColor * alpha + 0.3);//bgMaskColor.a * alpha); // float bsa = sa * (1 - x); // sourceMix = mix(bgColor, sourceMix, maskColor * alpha);//); // frgColor = vec4(sourceMix, 1.0) * ((1 - textColor * alpha) );//mix(textColor.rgb, , textColor.a);// (sourceMix * maskColor ) * alpha; // clamp(mix(bgColor, sourceMix, sourceColor.a * alpha) + textColor * alpha + networkTextColor, 0, 1); // if (TexCoord.x <= 0.2 || TexCoord.s >= 0.8) { // frgColor = bgColor; // } else { // frgColor = clamp(mix(bgColor, sourceMix, maskColor * alpha) + textColor * alpha + networkTextColor, 0, 1); // // clamp(mix(bgMix, sourceMix, maskColor * alpha) + textColor * alpha + networkTextColor, 0, 1); // //mix (color, mix(sourceColor, maskColor, invBaseColor), 1); // } } else { vec4 movieColor = texture2D(movieTextMap, TexCoord); frgColor = mix(bgColor, movieColor, movieColor.a); } FragColor = frgColor; }