change popupmenu behaviour, few minor fixups
[goodguy/history.git] / cinelerra-5.1 / cinelerra / playback3d.C
index f733105ff231bb18b1b648c69b860f3fb7895701..3b9cd6901edb6cf3461a808713693c2a95c66faf 100644 (file)
@@ -53,6 +53,7 @@
 // Can't hard code sampler2D
 
 
+#ifdef HAVE_GL
 static const char *yuv_to_rgb_frag =
        "uniform sampler2D tex;\n"
        "void main()\n"
@@ -149,9 +150,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 +161,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 +173,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 +185,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 +196,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 +210,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 +218,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 +229,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 +240,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 +251,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 +266,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 +281,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 +293,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 +305,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 +316,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 +327,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 +339,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 +350,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 +362,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 +373,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 +384,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 +396,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 +407,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, "
@@ -504,11 +478,7 @@ static const char *fade_yuv_frag =
        "       gl_FragColor.gb += vec2(0.5, 0.5);\n"
        "}\n";
 
-
-
-
-
-
+#endif
 
 
 Playback3DCommand::Playback3DCommand()
@@ -762,7 +732,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,