pattern tweaks

This commit is contained in:
2019-02-20 01:26:38 +01:00
parent 7954e4d900
commit c752434e98
7 changed files with 60 additions and 34 deletions

View File

@@ -65,20 +65,20 @@
#define SHADER_FUNCTION_COLOR \
"mediump vec3 brightness3(mediump vec3 c, mediump float val) {\n"\
" return c + vec3(val * 2.0 - 1.0);\n"\
" return clamp(c + vec3(val * 2.0 - 1.0), vec3(0), vec3(1));\n"\
"}\n"\
"mediump vec3 contrast3(mediump vec3 c, mediump float val) {\n"\
" val = val * 2.0 - 1.0;\n"\
" mediump float factor = ((259.0 / 255.0) * (val + 1.0)) / (1.0 * ((259.0 / 255.0) - val));\n"\
" return factor * (c - 0.5) + 0.5;\n"\
" return clamp(factor * (c - 0.5) + 0.5, vec3(0), vec3(1));\n"\
"}\n"\
"mediump float brightness1(mediump float c, mediump float val) {\n"\
" return c + (val * 2.0 - 1.0);\n"\
" return clamp(c + (val * 2.0 - 1.0), 0.0, 1.0);\n"\
"}\n"\
"mediump float contrast1(mediump float c, mediump float val) {\n"\
" val = val * 2.0 - 1.0;\n"\
" mediump float factor = ((259.0 / 255.0) * (val + 1.0)) / (1.0 * ((259.0 / 255.0) - val));\n"\
" return factor * (c - 0.5) + 0.5;\n"\
" return clamp(factor * (c - 0.5) + 0.5, 0.0, 1.0);\n"\
"}\n"
// http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
@@ -236,23 +236,27 @@ void App::initShaders()
"uniform sampler2D tex;\n"
"uniform sampler2D tex_stroke;\n"
"uniform sampler2D tex_mask;\n"
"uniform sampler2D tex_dual;\n"
"uniform sampler2D tex_pattern;\n"
"uniform mediump float alpha;\n"
"uniform mediump float stroke_alpha;\n"
"uniform mediump float pattern_alpha;\n"
"uniform mediump int blend_mode;\n"
"uniform mediump int dual_blend_mode;\n"
"uniform mediump vec2 resolution;\n"
"uniform mediump vec2 pattern_scale;\n"
"uniform mediump float pattern_bright;\n"
"uniform mediump float pattern_contr;\n"
"uniform mediump float dual_alpha;\n"
"uniform bool lock;\n"
"uniform bool mask;\n"
"uniform bool fragUV2;\n"
"uniform bool use_dual;\n"
"uniform sampler2D tex_dual;\n"
"uniform mediump float dual_alpha;\n"
"uniform mediump int dual_blend_mode;\n"
"uniform bool use_pattern;\n"
"uniform sampler2D tex_pattern;\n"
"uniform mediump float pattern_alpha;\n"
"uniform mediump vec2 pattern_scale;\n"
"uniform mediump float pattern_bright;\n"
"uniform mediump float pattern_contr;\n"
"uniform mediump vec2 pattern_offset;\n"
"in mediump vec2 uv;\n"
"out mediump vec4 frag;\n"
SHADER_FUNCTION_BLUR
@@ -264,16 +268,16 @@ void App::initShaders()
" mediump vec4 base = texture(tex, uv2);\n"
" mediump vec4 stroke = texture(tex_stroke, uv);\n"
" if (use_pattern){\n"
" mediump float patt = texture(tex_pattern, uv2 * pattern_scale * 10.0).r;\n"
" mediump vec2 rscale = resolution / vec2(512.0);\n"
" mediump float patt = texture(tex_pattern, uv2 * (0.5 / pattern_scale) * rscale + pattern_offset).r;\n"
" if (pattern_bright != 0.5)\n"
" patt = brightness1(patt, pattern_bright);\n"
" patt = brightness1(patt, 1.0 - pattern_bright);\n"
" if (pattern_contr != 0.5)\n"
" patt = contrast1(patt, pattern_contr);\n"
" stroke.a = mix(stroke.a, stroke.a * patt, pattern_alpha);\n"
" }\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_alpha, dual_blend_mode);\n"
" }\n"
" stroke.a = mask ? stroke.a * stroke_alpha * blur(tex_mask, uv2).r : stroke.a * stroke_alpha;\n"
@@ -418,17 +422,22 @@ void App::initShaders()
SHADER_EXT_FB_FETCH
"uniform mediump sampler2D tex;\n"
"uniform mediump sampler2D tex_bg;\n"
"uniform mediump sampler2D tex_pattern;\n"
"uniform mediump sampler2D tex_mix;\n"
"uniform mediump vec4 col;\n"
"uniform mediump vec2 resolution;\n"
"uniform mediump float alpha;\n"
"uniform mediump float noise;\n"
"uniform mediump vec2 pattern_offset;\n"
"uniform mediump float pattern_alpha;\n"
"uniform mediump float mix_alpha;\n"
"uniform mediump float wet;\n"
"uniform bool use_pattern;\n"
"uniform mediump sampler2D tex_pattern;\n"
"uniform mediump float pattern_alpha;\n"
"uniform mediump vec2 pattern_scale;\n"
"uniform mediump float pattern_bright;\n"
"uniform mediump float pattern_contr;\n"
"uniform mediump vec2 pattern_offset;\n"
"in mediump vec2 uv;\n"
"in mediump vec2 uv_2;\n"
"in mediump float q;\n"
@@ -438,11 +447,20 @@ void App::initShaders()
" out mediump vec4 frag;\n"
"#endif\n"
SHADER_FUNCTION_RAND
SHADER_FUNCTION_COLOR
"void main() {\n"
" mediump vec2 uv2 = gl_FragCoord.st / resolution;\n"
" mediump float pattern = use_pattern ? 1.0 - (texture(tex_pattern, (uv2+pattern_offset) * 5.0).r) * pattern_alpha : 1.0;\n"
" mediump float brush_alpha = ( 1.0 - texture(tex, uv/q).r ) * alpha;\n"
" mediump vec4 fg = vec4(col.rgb, brush_alpha * pattern);\n"
" mediump vec4 fg = vec4(col.rgb, brush_alpha);\n"
" if (use_pattern){\n"
" mediump vec2 rscale = resolution / vec2(512.0);\n"
" mediump float patt = texture(tex_pattern, uv2 * (0.5 / pattern_scale) * rscale + pattern_offset).r;\n"
" if (pattern_bright != 0.5)\n"
" patt = brightness1(patt, 1.0 - pattern_bright);\n"
" if (pattern_contr != 0.5)\n"
" patt = contrast1(patt, pattern_contr);\n"
" fg.a = mix(fg.a, fg.a * patt, pattern_alpha);\n"
" }\n"
"#if defined(GL_EXT_shader_framebuffer_fetch)\n"
" mediump vec4 bg = frag;\n"
"#elif defined(GL_ARM_shader_framebuffer_fetch)\n"
@@ -464,9 +482,6 @@ void App::initShaders()
" mediump vec4 frag_wet = vec4(rgb, max(bg.a, fg.a * 1.2));\n"
" mediump vec4 frag_dry = vec4(rgb, alpha_tot);\n"
" frag = mix(frag_dry, frag_wet, wet);\n"
// " mediump vec4 mbg = texture(tex_mix, uv_2 / q);\n"
// " frag.rgb = mix(frag.rgb, mbg.rgb, mix_alpha * mbg.a);\n"
"}\n";
static const char* shader_checkerboard_v =