if( --layers > 0 ) { // need 2 layers to do overlay
if( !temp )
- temp = new VFrame(0, -1, frame[0]->get_w(), frame[0]->get_h(),
- frame[0]->get_color_model(), -1);
+ temp = new VFrame(frame[0]->get_w(), frame[0]->get_h(),
+ frame[0]->get_color_model(), 0);
while( --layers >= 0 ) {
current_layer += step;
if(!overlayer)
overlayer = new OverlayFrame(get_project_smp() + 1);
-
+
overlayer->overlay(output, temp,
0, 0, output->get_w(), output->get_h(),
0, 0, output->get_w(), output->get_h(),
#define GL_STD_FRAG(FN) static const char *blend_##FN##_frag = \
" vec4 result;\n" \
- " result.rgb = "SS(COLOR_##FN(1.0, src_color.rgb, src_color.a, dst_color.rgb, dst_color.a))";\n" \
- " result.a = "SS(ALPHA_##FN(1.0, src_color.a, dst_color.a))";\n" \
+ " result.rgb = " SS(COLOR_##FN(1.0, src_color.rgb, src_color.a, dst_color.rgb, dst_color.a)) ";\n" \
+ " result.a = " SS(ALPHA_##FN(1.0, src_color.a, dst_color.a))";\n" \
#define GL_VEC_FRAG(FN) static const char *blend_##FN##_frag = \
" vec4 result;\n" \
- " result.r = "SS(COLOR_##FN(1.0, src_color.r, src_color.a, dst_color.r, dst_color.a))";\n" \
- " result.g = "SS(COLOR_##FN(1.0, src_color.g, src_color.a, dst_color.g, dst_color.a))";\n" \
- " result.b = "SS(COLOR_##FN(1.0, src_color.b, src_color.a, dst_color.b, dst_color.a))";\n" \
- " result.a = "SS(ALPHA_##FN(1.0, src_color.a, dst_color.a))";\n" \
+ " result.r = " SS(COLOR_##FN(1.0, src_color.r, src_color.a, dst_color.r, dst_color.a)) ";\n" \
+ " result.g = " SS(COLOR_##FN(1.0, src_color.g, src_color.a, dst_color.g, dst_color.a)) ";\n" \
+ " result.b = " SS(COLOR_##FN(1.0, src_color.b, src_color.a, dst_color.b, dst_color.a)) ";\n" \
+ " result.a = " SS(ALPHA_##FN(1.0, src_color.a, dst_color.a)) ";\n" \
" result = clamp(result, 0.0, 1.0);\n" \
#undef mabs
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);
}
-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; }