mask mousewheel segv bug, mask opengl sw fallback read to ram, fix tiff config withou...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / virtualvnode.C
index bd32638c35e5ba5ad4f41fc34c519a9ee7c81c4e..ba2aae69115fb4991707a685266702fbeb18ece8 100644 (file)
@@ -64,14 +64,14 @@ VirtualVNode::VirtualVNode(RenderEngine *renderengine,
                track, parent_node)
 {
        //VRender *vrender = ((VirtualVConsole*)vconsole)->vrender;
-       fader = new FadeEngine(renderengine->preferences->processors);
+       //fader = new FadeEngine(renderengine->preferences->processors);
        masker = new MaskEngine(renderengine->preferences->processors);
        alpha = 1;
 }
 
 VirtualVNode::~VirtualVNode()
 {
-       delete fader;
+       //delete fader;
        delete masker;
 }
 
@@ -324,41 +324,30 @@ void VirtualVNode::render_mask(VFrame *output_temp,
        MaskAuto *keyframe = (MaskAuto*)keyframe_set->
                get_prev_auto(start_position_project, PLAY_FORWARD, current);
        if( keyframe->apply_before_plugins ) return;
-
-       int total_points = 0;
-       for(int i = 0; i < keyframe->masks.total; i++)
-       {
-               SubMask *mask = keyframe->get_submask(i);
-               int submask_points = mask->points.total;
-               if(submask_points > 1) total_points += submask_points;
-       }
-
-//printf("VirtualVNode::render_mask 1 %d %d\n", total_points, keyframe->value);
-// Ignore certain masks
-       if(total_points <= 2 ||
-               (keyframe->value == 0 && keyframe->mode == MASK_SUBTRACT_ALPHA))
-       {
-               return;
-       }
-
+       if( !keyframe->has_active_mask() ) return;
+/*
 // Fake certain masks
        if(keyframe->value == 0 && keyframe->mode == MASK_MULTIPLY_ALPHA)
        {
                output_temp->clear_frame();
                return;
        }
-
-       if(use_opengl) {
-               if( !((VDeviceX11*)((VirtualVConsole*)vconsole)->get_vdriver())->can_mask(
-                               start_position_project, keyframe_set) )
+*/
+       VDeviceX11 *x11_device = 0;
+       if( use_opengl ) {
+               x11_device = (VDeviceX11*)((VirtualVConsole*)vconsole)->get_vdriver();
+               if( !x11_device->can_mask(start_position_project, keyframe_set) ) {
+                       if( output_temp->get_opengl_state() != VFrame::RAM ) {
+                               int w = output_temp->get_w(), h = output_temp->get_h();
+                               x11_device->do_camera(output_temp, output_temp,
+                                       0,0,w,h, 0,0,w,h); // copy to ram
+                       }
                        use_opengl = 0;
-
+               }
        }
-       if(use_opengl) {
-               ((VDeviceX11*)((VirtualVConsole*)vconsole)->get_vdriver())->do_mask(
-                               output_temp, start_position_project, keyframe_set,
+       if( use_opengl )
+               x11_device->do_mask(output_temp, start_position_project, keyframe_set,
                                keyframe, keyframe);
-       }
        else {
 // Revert to software
                masker->do_mask(output_temp, start_position_project,