hard edges rework, add hard edge in gwdw, config.ac nv/cuda tweaks, message log warn...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / virtualvnode.C
index 20efff4268d4adbe0b535bf14ded81757415ce60..ba2aae69115fb4991707a685266702fbeb18ece8 100644 (file)
@@ -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,