blob: dbf1ab459184bded39451fde7594d10304aa9ea0 [file] [edit]
export const description = "Color fading";
export const help = "This transition performs fade to/from color of source videos";
export const options = [
{name:"color", value: "black", desc: "fade color"},
{}
];
export function load() { return {
stencil: null,
uni_ratio: null,
uni_use_from: null,
setup: function()
{
this.stencil = new evg.SolidBrush();
this.stencil.set_color(this.color);
},
setup_gl: function(webgl, program, ratio_uniform, first_available_texture_unit)
{
this.uni_ratio =webgl.getUniformLocation(program, 'ratio');
this.uni_use_from =webgl.getUniformLocation(program, 'use_from');
let col_uni = webgl.getUniformLocation(program, 'color');
let a = sys.color_component(this.color, 0);
let r = sys.color_component(this.color, 1);
let g = sys.color_component(this.color, 2);
let b = sys.color_component(this.color, 3);
webgl.uniform4f(col_uni, r, g, b, a);
},
apply: function(canvas, ratio, path, pids)
{
let tx;
let use_from = true;
ratio -= 0.5;
if (ratio<0) {
tx = pids[0].texture;
ratio = 0.5 + ratio;
ratio *= 2;
} else {
tx = pids[1].texture;
ratio = 0.5 - ratio;
ratio *= 2;
use_from = false;
}
if (use_gpu) {
canvas.uniform1f(this.uni_ratio, ratio);
canvas.uniform1i(this.uni_use_from, use_from);
} else {
canvas.path = path;
canvas.fill(GF_EVG_OPERAND_MIX, ratio, tx, this.stencil);
}
},
get_shader_src: function()
{
return `
uniform vec4 color;
uniform bool use_from;
vec4 gf_apply_effect() {
vec4 col_src;
if (use_from) col_src = get_pixel_from(txcoord_from);
else col_src = get_pixel_to(txcoord_to);
return mix(col_src, color, ratio);
}
`;
}
}; }