Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-05-30 11:57:15 +0400
committerIRIE Shinsuke <irieshinsuke@yahoo.co.jp>2014-05-30 12:11:41 +0400
commit8008d9bdfd5730b15727d0fb16f4417a4b8a85cc (patch)
treeb636cb1dde3723f12c55de156367829de5b41d08 /source/blender/gpu/shaders
parent50a7843ab1f339755a807a712280bb9e364b130e (diff)
Fix T40078: GLSL Lamp with OnlyShadow makes weird colors in object.
To prevent only shadow lamps from producing negative colors, shr->diff and shr->spec should've been clamped to positive values after lamp loop.
Diffstat (limited to 'source/blender/gpu/shaders')
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl17
1 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index a224f8e979a..44119d4a913 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -1921,19 +1921,24 @@ void ramp_rgbtobw(vec3 color, out float outval)
outval = color.r*0.3 + color.g*0.58 + color.b*0.12;
}
-void shade_only_shadow(float i, float shadfac, float energy, out float outshadfac)
+void shade_only_shadow(float i, float shadfac, float energy, vec3 shadcol, out vec3 outshadrgb)
{
- outshadfac = i*energy*(1.0 - shadfac);
+ outshadrgb = i*energy*(1.0 - shadfac)*(vec3(1.0)-shadcol);
}
-void shade_only_shadow_diffuse(float shadfac, vec3 rgb, vec4 diff, out vec4 outdiff)
+void shade_only_shadow_diffuse(vec3 shadrgb, vec3 rgb, vec4 diff, out vec4 outdiff)
{
- outdiff = diff - vec4(rgb*shadfac, 0.0);
+ outdiff = diff - vec4(rgb*shadrgb, 0.0);
}
-void shade_only_shadow_specular(float shadfac, vec3 specrgb, vec4 spec, out vec4 outspec)
+void shade_only_shadow_specular(vec3 shadrgb, vec3 specrgb, vec4 spec, out vec4 outspec)
{
- outspec = spec - vec4(specrgb*shadfac, 0.0);
+ outspec = spec - vec4(specrgb*shadrgb, 0.0);
+}
+
+void shade_clamp_positive(vec4 col, out vec4 outcol)
+{
+ outcol = max(col, vec4(0.0));
}
void test_shadowbuf(vec3 rco, sampler2DShadow shadowmap, mat4 shadowpersmat, float shadowbias, float inp, out float result)