From bc6751237c7cdd0277bd0dc864a207f200258201 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Thu, 28 Jun 2012 17:26:00 -0700 Subject: Clamp the Y position before trying to get the elevation --- Alc/ALu.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Alc/ALu.c b/Alc/ALu.c index d3965dfd..7fac1771 100644 --- a/Alc/ALu.c +++ b/Alc/ALu.c @@ -677,8 +677,9 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext) /* Calculate elevation and azimuth only when the source is not at * the listener. This prevents +0 and -0 Z from producing - * inconsistent panning. */ - ev = aluAsin(Position[1]); + * inconsistent panning. Also, clamp Y in case FP precision errors + * cause it to land outside of -1..+1. */ + ev = aluAsin(clampf(Position[1], -1.0f, 1.0f)); az = aluAtan2(Position[0], -Position[2]*ZScale); } -- cgit v1.2.3