#version 330 core out vec4 FragColor; in vec3 ourColor; in vec2 TexCoord; uniform float time; uniform bool fusion; uniform sampler2D bgMap; uniform sampler2D maskMap; uniform sampler2D sourceMap; uniform sampler2D colorMaskMap; void main() { vec3 bgColor = texture2D( bgMap, TexCoord ).rgb; vec3 frgColor = vec3(0.0); if (fusion) { vec2 normalizedTexCoord = TexCoord - vec2(0.5); float angle = time ; mat2 rotationMatrix = mat2(cos(radians(angle)), -sin(radians(angle)), sin(radians(angle)), cos(radians(angle))); vec2 rotatedTexCoord = rotationMatrix * normalizedTexCoord; vec2 finalTexCoord = rotatedTexCoord + vec2(0.5); vec3 sourceColor = texture2D(sourceMap, finalTexCoord).rgb; //vec3 sourceColor = texture2D(sourceMap, TexCoord).rgb; vec3 colorMaskColor = texture2D(colorMaskMap, TexCoord).rgb; vec3 maskColor = texture2D(maskMap, TexCoord).rgb; float gray = dot(sourceColor, vec3(0.299, 0.587, 0.114)); vec3 grayColor = vec3(gray); vec3 color = maskColor * grayColor; vec3 invBaseColor = 1 - maskColor; vec2 offsetTexcoord = TexCoord ; vec3 maskOffsetColor = texture2D(maskMap, offsetTexcoord).rgb; vec3 offsetColor = maskOffsetColor * sourceColor; vec3 maskGrayColor = grayColor + invBaseColor; vec3 maskColorColor = colorMaskColor * sourceColor; frgColor = mix(bgColor, mix(maskGrayColor, maskColorColor, colorMaskColor), maskColor); } else { frgColor = bgColor; } FragColor = vec4(frgColor, 1.0); }