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=20efff4268d4adbe0b535bf14ded81757415ce60;hb=abf5c6bb4dec2c2d03df2872e1d337e3905b3619;hpb=59e74f262d7b6be235f2bbfaac35ef4274f52dc9 diff --git a/cinelerra-5.1/cinelerra/virtualvnode.C b/cinelerra-5.1/cinelerra/virtualvnode.C index 20efff42..ba2aae69 100644 --- a/cinelerra-5.1/cinelerra/virtualvnode.C +++ b/cinelerra-5.1/cinelerra/virtualvnode.C @@ -333,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,