Bugfix for GLSL: no specular/diffuse + only shadow for lamps

didn't work correct.
This commit is contained in:
Brecht Van Lommel 2008-09-05 15:08:01 +00:00
parent f1415bca7e
commit 2e653838c0
3 changed files with 985 additions and 967 deletions

@ -682,8 +682,15 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
if(lamp->mode & LA_ONLYSHADOW) {
GPU_link(mat, "shade_only_shadow", i, shadfac,
GPU_dynamic_uniform(&lamp->dynenergy), shi->rgb, shi->specrgb,
shr->diff, shr->spec, &shr->diff, &shr->spec);
GPU_dynamic_uniform(&lamp->dynenergy), &shadfac);
if(!(lamp->mode & LA_NO_DIFF))
GPU_link(mat, "shade_only_shadow_diffuse", shadfac, shi->rgb,
shr->diff, &shr->diff);
if(!(lamp->mode & LA_NO_SPEC))
GPU_link(mat, "shade_only_shadow_specular", shadfac, shi->specrgb,
shr->spec, &shr->spec);
add_user_list(&mat->lamps, lamp);
add_user_list(&lamp->materials, ma);

@ -1483,11 +1483,18 @@ 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, vec3 rgb, vec3 specrgb, vec4 diff, vec4 spec, out vec4 outdiff, out vec4 outspec)
void shade_only_shadow(float i, float shadfac, float energy, out float outshadfac)
{
shadfac = i*energy*(1.0 - shadfac);
outshadfac = i*energy*(1.0 - shadfac);
}
void shade_only_shadow_diffuse(float shadfac, vec3 rgb, vec4 diff, out vec4 outdiff)
{
outdiff = diff - vec4(rgb*shadfac, 0.0);
}
void shade_only_shadow_specular(float shadfac, vec3 specrgb, vec4 spec, out vec4 outspec)
{
outspec = spec - vec4(specrgb*shadfac, 0.0);
}

File diff suppressed because it is too large Load Diff