aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2009-05-31 11:34:07 -0700
committerChris Robinson <[email protected]>2009-05-31 11:34:07 -0700
commit7940003d0624d76e798523577d3d97cf99b73c83 (patch)
tree1793ffbd867da33728f5df7855b6eeccacb1e912
parent45b16ff4561aea91e462035c5e6349db38b35bf2 (diff)
Set an error if NaN is given for panning values
-rw-r--r--CMakeLists.txt12
-rw-r--r--OpenAL32/alEffect.c23
2 files changed, 29 insertions, 6 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b9c51917..af68accb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -10,6 +10,7 @@ INCLUDE(CheckFunctionExists)
INCLUDE(CheckLibraryExists)
INCLUDE(CheckIncludeFile)
INCLUDE(CheckIncludeFiles)
+INCLUDE(CheckSymbolExists)
INCLUDE(CheckCCompilerFlag)
INCLUDE(CheckCSourceCompiles)
INCLUDE(CheckTypeSize)
@@ -167,6 +168,17 @@ IF(NOT HAVE_SNPRINTF)
ADD_DEFINITIONS(-Dsnprintf=_snprintf)
ENDIF()
+CHECK_SYMBOL_EXISTS(isnan math.h HAVE_ISNAN)
+IF(NOT HAVE_ISNAN)
+ CHECK_FUNCTION_EXISTS(_isnan HAVE__ISNAN)
+ IF(NOT HAVE__ISNAN)
+ MESSAGE(FATAL_ERROR "No isnan function found, please report!")
+ ENDIF()
+
+ ADD_DEFINITIONS(-Disnan=_isnan)
+ENDIF()
+
+
# Check for the dlopen API (for dynamicly loading backend libs)
IF(DLOPEN)
CHECK_INCLUDE_FILE(dlfcn.h HAVE_DLFCN_H)
diff --git a/OpenAL32/alEffect.c b/OpenAL32/alEffect.c
index fe5897c9..f41c769e 100644
--- a/OpenAL32/alEffect.c
+++ b/OpenAL32/alEffect.c
@@ -21,6 +21,7 @@
#include "config.h"
#include <stdlib.h>
+#include <math.h>
#include "AL/al.h"
#include "AL/alc.h"
@@ -666,14 +667,24 @@ ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, ALfloat *pflValues)
break;
case AL_EAXREVERB_REFLECTIONS_PAN:
- ALEffect->Reverb.ReflectionsPan[0] = pflValues[0];
- ALEffect->Reverb.ReflectionsPan[1] = pflValues[1];
- ALEffect->Reverb.ReflectionsPan[2] = pflValues[2];
+ if(!isnan(pflValues[0]) && !isnan(pflValues[1]) && !isnan(pflValues[2]))
+ {
+ ALEffect->Reverb.ReflectionsPan[0] = pflValues[0];
+ ALEffect->Reverb.ReflectionsPan[1] = pflValues[1];
+ ALEffect->Reverb.ReflectionsPan[2] = pflValues[2];
+ }
+ else
+ alSetError(AL_INVALID_VALUE);
break;
case AL_EAXREVERB_LATE_REVERB_PAN:
- ALEffect->Reverb.LateReverbPan[0] = pflValues[0];
- ALEffect->Reverb.LateReverbPan[1] = pflValues[1];
- ALEffect->Reverb.LateReverbPan[2] = pflValues[2];
+ if(!isnan(pflValues[0]) && !isnan(pflValues[1]) && !isnan(pflValues[2]))
+ {
+ ALEffect->Reverb.LateReverbPan[0] = pflValues[0];
+ ALEffect->Reverb.LateReverbPan[1] = pflValues[1];
+ ALEffect->Reverb.LateReverbPan[2] = pflValues[2];
+ }
+ else
+ alSetError(AL_INVALID_VALUE);
break;
default: