X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvirtualvnode.C;h=ba2aae69115fb4991707a685266702fbeb18ece8;hp=c96b51c906b044085b036b6dfbf480c4526b072f;hb=abf5c6bb4dec2c2d03df2872e1d337e3905b3619;hpb=7ead9f7382846e81c2f8efb25780014e5f8834c3 diff --git a/cinelerra-5.1/cinelerra/virtualvnode.C b/cinelerra-5.1/cinelerra/virtualvnode.C index c96b51c9..ba2aae69 100644 --- a/cinelerra-5.1/cinelerra/virtualvnode.C +++ b/cinelerra-5.1/cinelerra/virtualvnode.C @@ -324,23 +324,8 @@ 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; - } + if( !keyframe->has_active_mask() ) return; /* -//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; - } - // Fake certain masks if(keyframe->value == 0 && keyframe->mode == MASK_MULTIPLY_ALPHA) { @@ -348,17 +333,21 @@ void VirtualVNode::render_mask(VFrame *output_temp, 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,