mediump float blend_stroke(mediump float base, mediump float stroke, int mode) { if (mode == 0) /* normal */ return (base + stroke) * 0.5; else if (mode == 1) /* multiply */ return base * stroke; else if (mode == 2) /* screen */ return 1.0-(1.0-base)*(1.0-stroke); else if (mode == 3) /* color-dodge */ return base/(1.0-stroke); else if (mode == 4) /* overlay */ return mix(2.0*base*stroke, 1.0-2.0*(1.0-base)*(1.0-stroke), floor(base*2.0)); else return 1.0; }