53 lines
1.6 KiB
Forth
53 lines
1.6 KiB
Forth
|
#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);
|
||
|
}
|