From 2fbe1b43048f5d97bd93b7b161a406892eda67b2 Mon Sep 17 00:00:00 2001 From: Jerome St-Louis Date: Sat, 18 Apr 2015 00:55:28 -0400 Subject: [PATCH] ecere/gfx3D/Object: Fixed crashes on light without target --- ecere/src/gfx/3D/Object.ec | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ecere/src/gfx/3D/Object.ec b/ecere/src/gfx/3D/Object.ec index b6aef7a..39e593c 100644 --- a/ecere/src/gfx/3D/Object.ec +++ b/ecere/src/gfx/3D/Object.ec @@ -1303,7 +1303,7 @@ private: // Cameras / Spot Lights must update their target first if(flags.camera && cameraTarget && cameraTarget.flags.transform) cameraTarget.UpdateTransform(); - else if(flags.light && light.flags.spot && light.target.flags.transform) + else if(flags.light && light.flags.spot && light.target && light.target.flags.transform) light.target._UpdateTransform(); if(flags.camera && cameraTarget) @@ -1324,14 +1324,18 @@ private: if(flags.light && light.flags.spot) { - // DeterMine angle to look at target + // Determine angle to look at target Vector3D position; if(flags.root || !parent) position = transform.position; else position.MultMatrix(transform.position, parent.matrix); - light.direction.Subtract((Vector3D *) light.target.matrix.m[3], position); + if(light.target) + light.direction.Subtract((Vector3D *) light.target.matrix.m[3], position); + else + light.direction = position; // TOCHECK: Why does this happen? + light.direction.Normalize(light.direction); transform.orientation.RotationDirection(light.direction); } -- 1.8.3.1