X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Foverlay%2Foverlay.C;h=8f8cdea5693999439027ac3badb3036f059d7ad2;hb=b2eb290b3f6e5c233393017aa152e67c76243130;hp=5f0ea80f198d92513a97a2706902b6076e163e90;hpb=48c313de28fe6d39d9431dbe2dca6ffb176541ff;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/overlay/overlay.C b/cinelerra-5.1/plugins/overlay/overlay.C index 5f0ea80f..8f8cdea5 100644 --- a/cinelerra-5.1/plugins/overlay/overlay.C +++ b/cinelerra-5.1/plugins/overlay/overlay.C @@ -593,29 +593,26 @@ static const char * const overlay_shaders[TRANSFER_TYPES] = { dst->init_screen(); src->bind_texture(0); dst->bind_texture(1); - const char *shader_stack[] = { 0, 0, 0 }; + + const char *shader_stack[16]; + memset(shader_stack,0, sizeof(shader_stack)); int current_shader = 0; shader_stack[current_shader++] = get_pixels_frag; shader_stack[current_shader++] = overlay_shaders[config.mode]; shader_stack[current_shader++] = put_pixels_frag; - - unsigned int shader_id = 0; - shader_id = VFrame::make_shader(0, - shader_stack[0], - shader_stack[1], - shader_stack[2], - 0); - - glUseProgram(shader_id); - glUniform1i(glGetUniformLocation(shader_id, "src_tex"), 0); - glUniform1i(glGetUniformLocation(shader_id, "dst_tex"), 1); - glUniform2f(glGetUniformLocation(shader_id, "dst_tex_dimensions"), - (float)dst->get_texture_w(), (float)dst->get_texture_h()); - float chroma_offset = BC_CModels::is_yuv(dst->get_color_model()) ? 0.5 : 0.0; - glUniform3f(glGetUniformLocation(shader_id, "chroma_offset"), - 0.0, chroma_offset, chroma_offset); - + shader_stack[current_shader] = 0; + unsigned int shader = VFrame::make_shader(shader_stack); + if( shader > 0 ) { + glUseProgram(shader); + glUniform1i(glGetUniformLocation(shader, "src_tex"), 0); + glUniform1i(glGetUniformLocation(shader, "dst_tex"), 1); + glUniform2f(glGetUniformLocation(shader, "dst_tex_dimensions"), + (float)dst->get_texture_w(), (float)dst->get_texture_h()); + float chroma_offset = BC_CModels::is_yuv(dst->get_color_model()) ? 0.5 : 0.0; + glUniform3f(glGetUniformLocation(shader, "chroma_offset"), + 0.0, chroma_offset, chroma_offset); + } src->draw_texture(); glUseProgram(0); @@ -635,7 +632,7 @@ static const char * const overlay_shaders[TRANSFER_TYPES] = { } -const char* Overlay::plugin_title() { return _("Overlay"); } +const char* Overlay::plugin_title() { return N_("Overlay"); } int Overlay::is_realtime() { return 1; } int Overlay::is_multichannel() { return 1; } int Overlay::is_synthesis() { return 1; } @@ -660,7 +657,7 @@ void Overlay::save_data(KeyFrame *keyframe) FileXML output; // cause data to be stored directly in text - output.set_shared_output(keyframe->get_data(), MESSAGESIZE); + output.set_shared_output(keyframe->xbuf); output.tag.set_title("OVERLAY"); output.tag.set_property("MODE", config.mode); output.tag.set_property("DIRECTION", config.direction); @@ -675,7 +672,7 @@ void Overlay::read_data(KeyFrame *keyframe) { FileXML input; - input.set_shared_input(keyframe->get_data(), strlen(keyframe->get_data())); + input.set_shared_input(keyframe->xbuf); while(!input.read_tag()) {