add disable opengl masking, switch shift/ctrl op in mask gui
[goodguy/history.git] / cinelerra-5.1 / cinelerra / playback3d.C
index f733105ff231bb18b1b648c69b860f3fb7895701..35f4fd0ee1a6bfe269590aee30ad9660f8ae746c 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,13 +195,12 @@ 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"
-       "       if(!canvas.g) result.g = 1.0;\n"
-       "       if(!canvas.b) result.b = 1.0;\n"
-       "       if(!canvas.a) result.a = 1.0;\n"
+       "       if(canvas.r == 0.) result.r = 1.0;\n"
+       "       if(canvas.g == 0.) result.g = 1.0;\n"
+       "       if(canvas.b == 0.) result.b = 1.0;\n"
+       "       if(canvas.a == 0.) result.a = 1.0;\n"
        "       result = clamp(result, 0.0, 1.0);\n"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\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,10 +217,8 @@ 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"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\n";
 
@@ -236,10 +228,8 @@ 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"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\n";
 
@@ -249,10 +239,8 @@ 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"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\n";
 
@@ -262,7 +250,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 +265,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 +280,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 +292,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 +304,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 +315,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 +326,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 +338,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 +349,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 +361,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 +372,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 +383,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,10 +395,8 @@ 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"
        "       gl_FragColor = mix(canvas, result, alpha);\n"
        "}\n";
 
@@ -432,7 +406,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, "
@@ -762,7 +735,7 @@ void Playback3D::copy_from_sync(Playback3DCommand *command)
 //                     command->frame->get_h(),
 //                     BC_RGB888,
 //                     -1);
-//             command->frame->to_ram();
+//             command->frame->screen_to_ram();
 //
 //             window->clear_box(0,
 //                                             0,