improve brush preview

This commit is contained in:
2019-02-19 11:33:41 +01:00
parent e4ee87e4c6
commit 08cca154b7
11 changed files with 612 additions and 246 deletions

View File

@@ -63,6 +63,24 @@
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\n"\
"}\n"
#define SHADER_FUNCTION_COLOR \
"mediump vec3 brightness3(mediump vec3 c, mediump float val) {\n"\
" return c + vec3(val * 2.0 - 1.0);\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"\
"}\n"\
"mediump float brightness1(mediump float c, mediump float val) {\n"\
" return c + (val * 2.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"\
"}\n"
// http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/
#define SHADER_FUNCTION_RAND \
"highp float rand(mediump vec2 co)\n"\
@@ -226,6 +244,9 @@ void App::initShaders()
"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 bool lock;\n"
"uniform bool mask;\n"
"uniform bool fragUV2;\n"
@@ -236,12 +257,18 @@ void App::initShaders()
SHADER_FUNCTION_BLUR
SHADER_FUNCTION_BLEND
SHADER_FUNCTION_BLEND_STROKE
SHADER_FUNCTION_COLOR
"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"
" if (use_pattern){\n"
" stroke.a *= 1.0 - texture(tex_pattern, uv2 * 5.0).r * pattern_alpha;\n"
" mediump float patt = texture(tex_pattern, uv2 * pattern_scale * 10.0).r;\n"
" if (pattern_bright != 0.5)\n"
" patt = brightness1(patt, 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"
@@ -453,6 +480,7 @@ void App::initShaders()
"}\n";
static const char* shader_checkerboard_f =
SHADER_VERSION
"uniform bool colorize;\n"
"in mediump vec2 uv;\n"
"out mediump vec4 frag;\n"
"void main() {\n"
@@ -460,7 +488,8 @@ void App::initShaders()
" const mediump vec4 c2 = vec4(0.9, 0.9, 0.9, 1.0);\n"
" mediump vec2 c = floor(fract(uv * 10.0) * 2.0);\n"
" mediump float alpha = mix(c.x, 1.0 - c.x, c.y);\n"
" frag = mix(c1, c2, alpha);\n"
" if (colorize) frag = mix(c1, c2, alpha) * vec4(fract(uv.x * 5.0), uv.y, 1.0, 1.0);\n"
" else frag = mix(c1, c2, alpha);\n"
"}\n";
static const char* shader_equirect_v =