diff options
Diffstat (limited to 'source/blender/gpu/intern/gpu_shader_material.glsl')
-rw-r--r-- | source/blender/gpu/intern/gpu_shader_material.glsl | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_shader_material.glsl b/source/blender/gpu/intern/gpu_shader_material.glsl index 0d7e00a541b..e59be0217b5 100644 --- a/source/blender/gpu/intern/gpu_shader_material.glsl +++ b/source/blender/gpu/intern/gpu_shader_material.glsl @@ -563,6 +563,38 @@ void mix_color(float fac, vec4 col1, vec4 col2, out vec4 outcol) } } +void mix_soft(float fac, vec4 col1, vec4 col2, out vec4 outcol) +{ + fac = clamp(fac, 0.0, 1.0); + float facm = 1.0 - fac; + + vec4 one= vec4(1.0); + vec4 scr= one - (one - col2)*(one - col1); + outcol = facm*col1 + fac*((one - col1)*col2*col1 + col1*scr); +} + +void mix_linear(float fac, vec4 col1, vec4 col2, out vec4 outcol) +{ + fac = clamp(fac, 0.0, 1.0); + + outcol = col1; + + if(col2.r > 0.5) + outcol.r= col1.r + fac*(2.0*(col2.r - 0.5)); + else + outcol.r= col1.r + fac*(2.0*(col2.r) - 1.0); + + if(col2.g > 0.5) + outcol.g= col1.g + fac*(2.0*(col2.g - 0.5)); + else + outcol.g= col1.g + fac*(2.0*(col2.g) - 1.0); + + if(col2.b > 0.5) + outcol.b= col1.b + fac*(2.0*(col2.b - 0.5)); + else + outcol.b= col1.b + fac*(2.0*(col2.b) - 1.0); +} + void valtorgb(float fac, sampler1D colormap, out vec4 outcol, out float outalpha) { outcol = texture1D(colormap, fac); |