merge: fixes/rework for fader, single frame ffmpeg, dissolve, silence
[goodguy/history.git] / cinelerra-5.1 / cinelerra / playback3d.C
index f733105ff231bb18b1b648c69b860f3fb7895701..a6a721ba80feb38266e5c60ca0a30c7e2947ba69 100644 (file)
@@ -149,9 +149,8 @@ static const char *blend_normal_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
-       "       vec4 result = canvas * (1.0 - gl_FragColor.a) + gl_FragColor * gl_FragColor.a;\n"
+       "       vec4 result = mix(canvas, gl_FragColor, gl_FragColor.a);\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\n";
 
@@ -161,7 +160,6 @@ static const char *blend_add_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = canvas + gl_FragColor;\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -174,7 +172,6 @@ static const char *blend_subtract_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = gl_FragColor - canvas;\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -187,7 +184,6 @@ static const char *blend_multiply_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = canvas * gl_FragColor;\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -199,7 +195,6 @@ static const char *blend_divide_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = gl_FragColor / canvas;\n"
        "       if(!canvas.r) result.r = 1.0;\n"
@@ -214,7 +209,6 @@ static const char *blend_divide_frag =
 static const char *blend_replace_frag =
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "}\n";
 
 // MAX
@@ -223,7 +217,6 @@ static const char *blend_max_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = max(canvas, gl_FragColor);\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -236,7 +229,6 @@ static const char *blend_min_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = min(canvas, gl_FragColor);\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -249,7 +241,6 @@ static const char *blend_average_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = (canvas + gl_FragColor) * 0.5;\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -262,7 +253,6 @@ static const char *blend_darken_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(canvas.rgb * (1.0 - gl_FragColor.a) +"
                        " gl_FragColor.rgb * (1.0 - canvas.a) +"
@@ -278,7 +268,6 @@ static const char *blend_lighten_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(canvas.rgb * (1.0 - gl_FragColor.a) +"
                        " gl_FragColor.rgb * (1.0 - canvas.a) +"
@@ -294,7 +283,6 @@ static const char *blend_dst_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-//     "       gl_FragColor.a *= alpha;\n"
 //     "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
 //     "       vec4 result = canvas;\n"
 //     "       gl_FragColor = mix(result, canvas, alpha);\n"
@@ -307,7 +295,6 @@ static const char *blend_dst_atop_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(canvas.rgb * gl_FragColor.a + "
                        "(1.0 - canvas.a) * gl_FragColor.rgb, gl_FragColor.a);\n"
@@ -320,7 +307,6 @@ static const char *blend_dst_in_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = canvas * gl_FragColor.a;\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -332,7 +318,6 @@ static const char *blend_dst_out_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = canvas * (1.0 - gl_FragColor.a);\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -344,7 +329,6 @@ static const char *blend_dst_over_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(canvas.rgb + (1.0 - canvas.a) * gl_FragColor.rgb, "
                        " gl_FragColor.a + canvas.a - gl_FragColor.a * canvas.a);\n"
@@ -357,7 +341,6 @@ static const char *blend_src_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = gl_FragColor;\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -369,7 +352,6 @@ static const char *blend_src_atop_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(gl_FragColor.rgb * canvas.a + "
                        "canvas.rgb * (1.0 - gl_FragColor.a), canvas.a);\n"
@@ -382,7 +364,6 @@ static const char *blend_src_in_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = gl_FragColor * canvas.a;\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -394,7 +375,6 @@ static const char *blend_src_out_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = gl_FragColor * (1.0 - canvas.a);\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
@@ -406,7 +386,6 @@ static const char *blend_src_over_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(gl_FragColor.rgb + (1.0 - gl_FragColor.a) * canvas.rgb, "
                                "gl_FragColor.a + canvas.a - gl_FragColor.a * canvas.a);\n"
@@ -419,7 +398,6 @@ static const char *blend_or_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = canvas + gl_FragColor - canvas * gl_FragColor;\n"
        "       result = clamp(result, 0.0, 1.0);\n"
@@ -432,7 +410,6 @@ static const char *blend_xor_frag =
        "uniform vec2 tex2_dimensions;\n"
        "uniform float alpha;\n"
        "void main() {\n"
-       "       gl_FragColor.a *= alpha;\n"
        "       vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
        "       vec4 result = vec4(gl_FragColor.rgb * (1.0 - canvas.a) + "
                        "(1.0 - gl_FragColor.a) * canvas.rgb, "