Module: wine
Branch: master
Commit: a8d4779f7f0c74573efef72434fd5e831d85b049
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a8d4779f7f0c74573efef7243…
Author: Stefan Dösinger <stefan(a)codeweavers.com>
Date: Mon Aug 20 22:10:36 2007 +0200
wined3d: Fix the spot light falloff == 0.0 case.
---
dlls/wined3d/device.c | 11 ++++++++---
1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index d14ad30..4544bf8 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -2557,12 +2557,17 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetLight(IWineD3DDevice *iface, DWORD I
* furthermore if still used, probably nobody pays attention to such details.
*/
if (pLight->Falloff == 0) {
- rho = 6.28f;
+ /* Falloff = 0 is easy, because d3d's and opengl's spot light equations have the
+ * falloff resp. exponent parameter as an exponent, so the spot light lighting
+ * will always be 1.0 for both of them, and we don't have to care for the
+ * rest of the rather complex calculation
+ */
+ object->exponent = 0;
} else {
rho = pLight->Theta + (pLight->Phi - pLight->Theta)/(2*pLight->Falloff);
+ if (rho < 0.0001) rho = 0.0001f;
+ object->exponent = -0.3/log(cos(rho/2));
}
- if (rho < 0.0001) rho = 0.0001f;
- object->exponent = -0.3/log(cos(rho/2));
if (object->exponent > 128.0) {
object->exponent = 128.0;
}