diff options
author | Antonioya <blendergit@gmail.com> | 2018-11-27 00:52:28 +0300 |
---|---|---|
committer | Antonioya <blendergit@gmail.com> | 2018-11-27 00:52:28 +0300 |
commit | f753fd17799cc92410b6115ea5ad9f3c2151072f (patch) | |
tree | d0bfe829b64251a6fea65cbb9af545689f79733c /source/blender/draw/engines/gpencil/shaders | |
parent | 26df95cff6620f17d6631c83efe05177b7a90e87 (diff) |
GP: Correct Tonemapping for Blend Layers
Diffstat (limited to 'source/blender/draw/engines/gpencil/shaders')
-rw-r--r-- | source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl index 8eeb0b8bc7f..877693724f9 100644 --- a/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl +++ b/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl @@ -9,6 +9,7 @@ uniform sampler2D blendDepth; uniform int mode; uniform int clamp_layer; uniform float blend_opacity; +uniform int tonemapping; #define ON 1 #define OFF 0 @@ -76,6 +77,28 @@ vec4 get_blend_color(int mode, vec4 src_color, vec4 blend_color) return outcolor; } +float linearrgb_to_srgb(float c) +{ + if (c < 0.0031308) + return (c < 0.0) ? 0.0 : c * 12.92; + else + return 1.055 * pow(c, 1.0 / 2.4) - 0.055; +} + +vec4 tone(vec4 stroke_color) +{ + if (tonemapping == 1) { + vec4 color = vec4(0, 0, 0, stroke_color.a); + color.r = linearrgb_to_srgb(stroke_color.r); + color.g = linearrgb_to_srgb(stroke_color.g); + color.b = linearrgb_to_srgb(stroke_color.b); + return color; + } + else { + return stroke_color; + } +} + void main() { vec4 outcolor; @@ -115,17 +138,18 @@ void main() gl_FragDepth = mix_depth; } } + FragColor = tone(FragColor); return; } /* if not using mask, return mix color */ if ((stroke_color.a == 0) && (clamp_layer == OFF)) { - FragColor = mix_color; + FragColor = tone(mix_color); gl_FragDepth = mix_depth; return; } /* apply blend mode */ - FragColor = get_blend_color(mode, stroke_color, mix_color); + FragColor = tone(get_blend_color(mode, stroke_color, mix_color)); gl_FragDepth = stroke_depth; } |