X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvirtualvnode.C;h=f8c032a16715a02b0fb1ea4cb15a1a36b25e2bb4;hb=49f85559268fc040fe7ba5611cc0520793cf728b;hp=141a2a0c7b461197bf8ed528740538a0986ce681;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/virtualvnode.C b/cinelerra-5.1/cinelerra/virtualvnode.C index 141a2a0c..f8c032a1 100644 --- a/cinelerra-5.1/cinelerra/virtualvnode.C +++ b/cinelerra-5.1/cinelerra/virtualvnode.C @@ -353,17 +353,21 @@ void VirtualVNode::render_mask(VFrame *output_temp, return; } - if(use_opengl) - { + if(use_opengl) { + if( !((VDeviceX11*)((VirtualVConsole*)vconsole)->get_vdriver())->can_mask( + start_position_project, keyframe_set) ) + use_opengl = 0; + + } + if(use_opengl) { ((VDeviceX11*)((VirtualVConsole*)vconsole)->get_vdriver())->do_mask( - output_temp, start_position_project, - keyframe_set, keyframe, keyframe); + output_temp, start_position_project, keyframe_set, + keyframe, keyframe); } - else - { + else { // Revert to software masker->do_mask(output_temp, start_position_project, - keyframe_set, keyframe, keyframe); + keyframe_set, keyframe, keyframe); } } @@ -387,8 +391,9 @@ int VirtualVNode::render_projector(VFrame *input, VFrame *output, if(output) { - ((VTrack*)track)->calculate_output_transfer(start_position_project, - renderengine->command->get_direction(), + int direction = renderengine->command->get_direction(); + ((VTrack*)track)->calculate_output_transfer( + start_position_project, direction, in_x1, in_y1, in_x2, in_y2, out_x1, out_y1, out_x2, out_y2); @@ -401,11 +406,10 @@ int VirtualVNode::render_projector(VFrame *input, VFrame *output, if(out_x2 > out_x1 && out_y2 > out_y1 && in_x2 > in_x1 && in_y2 > in_y1) { - int direction = renderengine->command->get_direction(); - IntAuto *mode_keyframe = 0; - mode_keyframe = + Auto *auto_keyframe = 0; + IntAuto *mode_keyframe = (IntAuto*)track->automation->autos[AUTOMATION_MODE]->get_prev_auto( - start_position_project, direction, (Auto* &)mode_keyframe); + start_position_project, PLAY_FORWARD, auto_keyframe); int mode = mode_keyframe->value; @@ -414,7 +418,7 @@ int VirtualVNode::render_projector(VFrame *input, VFrame *output, // can do dissolves, although a blend equation is still required for 3 component // colormodels since fractional translation requires blending. -// If this is the first playable video track and the mode_keyframe is "src_over" +// If this is the first playable video track and the mode_keyframe is "src" if(mode == TRANSFER_NORMAL && vconsole->current_exit_node == vconsole->total_exit_nodes - 1) mode = TRANSFER_SRC;