Fix for non spot lamps calculating spot values
Logical error in D1378, also incorrectly used lamp type as a flag.
This commit is contained in:
@@ -2164,22 +2164,17 @@ static void gpu_lamp_calc_winmat(GPULamp *lamp)
|
|||||||
wsize = lamp->la->shadow_frustum_size;
|
wsize = lamp->la->shadow_frustum_size;
|
||||||
orthographic_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
|
orthographic_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
|
||||||
}
|
}
|
||||||
else {
|
else if (lamp->type == LA_SPOT) {
|
||||||
angle = saacos(lamp->spotsi);
|
angle = saacos(lamp->spotsi);
|
||||||
temp = 0.5f * lamp->size * cosf(angle) / sinf(angle);
|
temp = 0.5f * lamp->size * cosf(angle) / sinf(angle);
|
||||||
pixsize = lamp->d / temp;
|
pixsize = lamp->d / temp;
|
||||||
wsize = pixsize * 0.5f * lamp->size;
|
wsize = pixsize * 0.5f * lamp->size;
|
||||||
if (lamp->type & LA_SPOT) {
|
/* compute shadows according to X and Y scaling factors */
|
||||||
/* compute shadows according to X and Y scaling factors */
|
perspective_m4(
|
||||||
perspective_m4(
|
lamp->winmat,
|
||||||
lamp->winmat,
|
-wsize * lamp->spotvec[0], wsize * lamp->spotvec[0],
|
||||||
-wsize * lamp->spotvec[0], wsize * lamp->spotvec[0],
|
-wsize * lamp->spotvec[1], wsize * lamp->spotvec[1],
|
||||||
-wsize * lamp->spotvec[1], wsize * lamp->spotvec[1],
|
lamp->d, lamp->clipend);
|
||||||
lamp->d, lamp->clipend);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
perspective_m4(lamp->winmat, -wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user