dual-brush blend modes
This commit is contained in:
@@ -38,6 +38,16 @@
|
||||
" else return vec4(1, 0, 0, 1);\n"\
|
||||
"}\n"
|
||||
|
||||
#define SHADER_FUNCTION_BLEND_STROKE \
|
||||
"mediump float blend_stroke(mediump float base, mediump float stroke, int mode) {\n"\
|
||||
" if (mode == 0) return (base + stroke) * 0.5;\n"\
|
||||
" else if (mode == 1) return base * stroke;\n"\
|
||||
" else if (mode == 2) return 1.0-(1.0-base)*(1.0-stroke);\n"\
|
||||
" else if (mode == 3) return base/(1.0-stroke);\n"\
|
||||
" else if (mode == 4) return mix(2.0*base*stroke, 1.0-2.0*(1.0-base)*(1.0-stroke), floor(base*2.0));\n"\
|
||||
" else return 1;\n"\
|
||||
"}\n"
|
||||
|
||||
#define SHADER_FUNCTION_HSV \
|
||||
"mediump vec3 rgb2hsv(mediump vec3 c) {\n"\
|
||||
" mediump vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n"\
|
||||
@@ -223,13 +233,16 @@ void App::initShaders()
|
||||
"out mediump vec4 frag;\n"
|
||||
SHADER_FUNCTION_BLUR
|
||||
SHADER_FUNCTION_BLEND
|
||||
SHADER_FUNCTION_BLEND_STROKE
|
||||
"void main() {\n"
|
||||
" mediump vec2 uv2 = fragUV2 ? (gl_FragCoord.st / resolution) : uv;\n"
|
||||
" mediump vec4 base = texture(tex, uv2);\n"
|
||||
" mediump vec4 stroke = texture(tex_stroke, uv);\n"
|
||||
" mediump vec4 dual = texture(tex_dual, uv);\n"
|
||||
" if (use_dual)\n"
|
||||
" stroke.a = stroke.a * dual.a;\n"
|
||||
" if (use_dual){\n"
|
||||
" mediump vec4 dual = texture(tex_dual, uv);\n"
|
||||
//" stroke.a = stroke.a * dual.a;\n"
|
||||
" stroke.a = blend_stroke(stroke.a, dual.a, dual_blend_mode);\n"
|
||||
" }\n"
|
||||
" stroke.a = mask ? stroke.a * stroke_alpha * blur(tex_mask, uv2).r : stroke.a * stroke_alpha;\n"
|
||||
" if (!lock && base.a == 0.0) { frag = stroke * vec4(1.0, 1.0, 1.0, alpha); return; }\n"
|
||||
" mediump vec4 blended = blend(base, stroke, blend_mode);\n"
|
||||
|
||||
Reference in New Issue
Block a user