Differential D2889 Diff 11446 source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_colorize_frag.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/gpencil/shaders/fx/gpencil_fx_colorize_frag.glsl
- This file was added.
| uniform sampler2D strokeColor; | |||||
| uniform sampler2D strokeDepth; | |||||
| uniform vec4 low_color; | |||||
| uniform vec4 high_color; | |||||
| uniform int mode; | |||||
| uniform float factor; | |||||
| out vec4 FragColor; | |||||
| #define MODE_GRAYSCALE 0 | |||||
| #define MODE_SEPIA 1 | |||||
| #define MODE_BITONE 2 | |||||
| #define MODE_CUSTOM 3 | |||||
| #define MODE_TRANSPARENT 4 | |||||
| float get_luminance(vec4 color) | |||||
| { | |||||
| float lum = (color.r * 0.2126) + (color.g * 0.7152) + (color.b * 0.723); | |||||
| return lum; | |||||
| } | |||||
| void main() | |||||
| { | |||||
| ivec2 uv = ivec2(gl_FragCoord.xy); | |||||
| float stroke_depth = texelFetch(strokeDepth, uv.xy, 0).r; | |||||
| vec4 src_pixel= texelFetch(strokeColor, uv.xy, 0); | |||||
| float luminance = get_luminance(src_pixel); | |||||
| vec4 outcolor; | |||||
| /* is transparent */ | |||||
| if (src_pixel.a == 0.0f) { | |||||
| discard; | |||||
| } | |||||
| switch(mode) { | |||||
| case MODE_GRAYSCALE: | |||||
| { | |||||
| outcolor = vec4(luminance, luminance, luminance, src_pixel.a); | |||||
| break; | |||||
| } | |||||
| case MODE_SEPIA: | |||||
| { | |||||
| float Red = (src_pixel.r * 0.393) + (src_pixel.g * 0.769) + (src_pixel.b * 0.189); | |||||
| float Green = (src_pixel.r * 0.349) + (src_pixel.g * 0.686) + (src_pixel.b * 0.168); | |||||
| float Blue = (src_pixel.r * 0.272) + (src_pixel.g * 0.534) + (src_pixel.b * 0.131); | |||||
| outcolor = vec4(Red, Green, Blue, src_pixel.a); | |||||
| break; | |||||
| } | |||||
| case MODE_BITONE: | |||||
| { | |||||
| if (luminance <= factor) { | |||||
| outcolor = low_color; | |||||
| } | |||||
| else { | |||||
| outcolor = high_color; | |||||
| } | |||||
| break; | |||||
| } | |||||
| case MODE_CUSTOM: | |||||
| { | |||||
| /* if below umbral, force custom color */ | |||||
| if (luminance <= factor) { | |||||
| outcolor = low_color; | |||||
| } | |||||
| else { | |||||
| outcolor = vec4(luminance * low_color.r, luminance * low_color.b, luminance * low_color.b, src_pixel.a); | |||||
| } | |||||
| break; | |||||
| } | |||||
| case MODE_TRANSPARENT: | |||||
| { | |||||
| outcolor = vec4(src_pixel.rgb, src_pixel.a * factor); | |||||
| break; | |||||
| } | |||||
| default: | |||||
| { | |||||
| outcolor = src_pixel; | |||||
| } | |||||
| } | |||||
| gl_FragDepth = stroke_depth; | |||||
| FragColor = outcolor; | |||||
| } | |||||