Fix #26807: glsl diffuse/specular was not clamping negative values, giving
some inconsistent results with the renderer.
This commit is contained in:
parent
7f4b4bbaf0
commit
14d7d480df
@ -557,7 +557,7 @@ static void add_to_diffuse(GPUMaterial *mat, Material *ma, GPUShadeInput *shi, G
|
|||||||
addcol = shi->rgb;
|
addcol = shi->rgb;
|
||||||
|
|
||||||
/* output to */
|
/* output to */
|
||||||
GPU_link(mat, "shade_madd", *diff, rgb, addcol, diff);
|
GPU_link(mat, "shade_madd_clamped", *diff, rgb, addcol, diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ramp_spec_result(GPUShadeInput *shi, GPUNodeLink **spec)
|
static void ramp_spec_result(GPUShadeInput *shi, GPUNodeLink **spec)
|
||||||
@ -730,7 +730,7 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
|
|||||||
if(lamp->type == LA_HEMI) {
|
if(lamp->type == LA_HEMI) {
|
||||||
GPU_link(mat, "shade_hemi_spec", vn, lv, view, GPU_uniform(&ma->spec), shi->har, visifac, &t);
|
GPU_link(mat, "shade_hemi_spec", vn, lv, view, GPU_uniform(&ma->spec), shi->har, visifac, &t);
|
||||||
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
|
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
|
||||||
GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
|
GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(ma->spec_shader==MA_SPEC_PHONG)
|
if(ma->spec_shader==MA_SPEC_PHONG)
|
||||||
@ -753,11 +753,11 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
|
|||||||
GPUNodeLink *spec;
|
GPUNodeLink *spec;
|
||||||
do_specular_ramp(shi, specfac, t, &spec);
|
do_specular_ramp(shi, specfac, t, &spec);
|
||||||
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), spec, &outcol);
|
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), spec, &outcol);
|
||||||
GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
|
GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
|
GPU_link(mat, "shade_add_spec", t, GPU_dynamic_uniform(lamp->dyncol), shi->specrgb, &outcol);
|
||||||
GPU_link(mat, "shade_add", shr->spec, outcol, &shr->spec);
|
GPU_link(mat, "shade_add_clamped", shr->spec, outcol, &shr->spec);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1686,6 +1686,16 @@ void shade_madd(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
|
|||||||
outcol = col + col1*col2;
|
outcol = col + col1*col2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void shade_add_clamped(vec4 col1, vec4 col2, out vec4 outcol)
|
||||||
|
{
|
||||||
|
outcol = col1 + max(col2, vec4(0.0, 0.0, 0.0, 0.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
void shade_madd_clamped(vec4 col, vec4 col1, vec4 col2, out vec4 outcol)
|
||||||
|
{
|
||||||
|
outcol = col + max(col1*col2, vec4(0.0, 0.0, 0.0, 0.0));
|
||||||
|
}
|
||||||
|
|
||||||
void shade_maddf(vec4 col, float f, vec4 col1, out vec4 outcol)
|
void shade_maddf(vec4 col, float f, vec4 col1, out vec4 outcol)
|
||||||
{
|
{
|
||||||
outcol = col + f*col1;
|
outcol = col + f*col1;
|
||||||
|
Loading…
Reference in New Issue
Block a user