X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fcinelerra%2Fvmodule.C;fp=cinelerra-5.1%2Fcinelerra%2Fvmodule.C;h=6d69dc3c454acad0f656caed4f423ecd79da85f2;hb=87141f1b454130848c34efdea9cf832d17463830;hp=48f2643dafb6ecb42c1e1c488ebc12b04730d5bf;hpb=b3ab80e6d0aff2c9971b7837d6bea590f78c3189;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/vmodule.C b/cinelerra-5.1/cinelerra/vmodule.C index 48f2643d..6d69dc3c 100644 --- a/cinelerra-5.1/cinelerra/vmodule.C +++ b/cinelerra-5.1/cinelerra/vmodule.C @@ -50,6 +50,7 @@ #include "vedit.h" #include "vframe.h" #include "videodevice.h" +#include "virtualvconsole.h" #include "vmodule.h" #include "vrender.h" #include "vplugin.h" @@ -1083,21 +1084,34 @@ int VModule::render(VFrame *output, use_opengl); } - int64_t mask_position = !renderengine ? start_position : - renderengine->vrender->current_position; Auto *current = 0; MaskAutos *keyframe_set = (MaskAutos*)track->automation->autos[AUTOMATION_MASK]; - MaskAuto *keyframe = + int64_t mask_position = !renderengine ? start_position : + renderengine->vrender->current_position; + MaskAuto *keyframe = (MaskAuto*)keyframe_set->get_prev_auto(mask_position, direction, current); + if( keyframe->apply_before_plugins ) { - if( !masker ) { - int cpus = renderengine ? - renderengine->preferences->processors : - plugin_array->mwindow->preferences->processors; - masker = new MaskEngine(cpus); + VDeviceX11 *x11_device = 0; + if(use_opengl && renderengine && renderengine->video) { + x11_device = (VDeviceX11*)renderengine->video->get_output_base(); + if( !x11_device->can_mask(mask_position, keyframe_set) ) + use_opengl = 0; + } + if( use_opengl && x11_device ) { + x11_device->do_mask(output, mask_position, keyframe_set, + keyframe, keyframe); + } + else { + if( !masker ) { + int cpus = renderengine ? + renderengine->preferences->processors : + plugin_array->mwindow->preferences->processors; + masker = new MaskEngine(cpus); + } + masker->do_mask(output, mask_position, keyframe_set, keyframe, keyframe); } - masker->do_mask(output, mask_position, keyframe_set, keyframe, keyframe); } return result;