]> git.mxchange.org Git - simgear.git/commitdiff
re-enable sound positioning and velocity, test for NaN's and print a message when...
authorehofman <ehofman>
Mon, 26 Oct 2009 10:47:31 +0000 (10:47 +0000)
committerTim Moore <timoore@redhat.com>
Mon, 26 Oct 2009 17:50:00 +0000 (18:50 +0100)
simgear/sound/sample_group.cxx
simgear/sound/soundmgr_openal.cxx
simgear/sound/xmlsound.cxx

index f9813fecd5a9222a5da0f0146413918d8562d68c..d3ee7fb7042ccd49acdbb52b6d30a91baea07150 100644 (file)
 
 #include <simgear/compiler.h>
 
-#if defined (__APPLE__)
-#  ifdef __GNUC__
-#    if ( __GNUC__ >= 3 ) && ( __GNUC_MINOR__ >= 3 )
-//  #        include <math.h>
-inline int (isnan)(double r) { return !(r <= 0 || r >= 0); }
-#    else
-    // any C++ header file undefines isinf and isnan
-    // so this should be included before <iostream>
-    // the functions are STILL in libm (libSystem on mac os x)
-extern "C" int isnan (double);
-extern "C" int isinf (double);
-#    endif
-#  else
-//    inline int (isinf)(double r) { return isinf(r); }
-//    inline int (isnan)(double r) { return isnan(r); }
-#  endif
-#endif
-
-#if defined (__FreeBSD__)
-#  if __FreeBSD_version < 500000
-     extern "C" {
-       inline int isnan(double r) { return !(r <= 0 || r >= 0); }
-     }
-#  endif
-#endif
-
-#if defined (__CYGWIN__)
-#  include <ieeefp.h>
-#endif
-
-#if defined(__MINGW32__)
-#  define isnan(x) _isnan(x)
-#endif
-
 #include "soundmgr_openal.hxx"
 #include "sample_group.hxx"
 
@@ -195,6 +161,7 @@ void SGSampleGroup::update( double dt ) {
                 sample->no_valid_source();
                 _smgr->release_source( source );
                 _smgr->release_buffer( sample );
+                remove( sample->get_sample_name() );
             }
         }
         testForALError("update");
@@ -392,15 +359,23 @@ void SGSampleGroup::update_sample_config( SGSoundSample *sample ) {
     if ( sample->is_valid_source() ) {
         unsigned int source = sample->get_source();
 
-#if 0
+#if 1
         if ( _tied_to_listener && _smgr->has_changed() ) {
             alSourcefv( source, AL_POSITION, _smgr->get_position().data() );
-            alSourcefv( source, AL_DIRECTION, _smgr->get_direction().data() );
             alSourcefv( source, AL_VELOCITY, _smgr->get_velocity().data() );
+#if 0
+            alSourcefv( source, AL_DIRECTION, _smgr->get_direction().data() );
+#endif
         } else {
+float *pos = sample->get_position();
+if (isnan(pos[0]) || isnan(pos[1]) || isnan(pos[2])) printf("NaN detected in source position\n");
             alSourcefv( source, AL_POSITION, sample->get_position() );
-            alSourcefv( source, AL_DIRECTION, sample->get_orientation() );
+float *vel = sample->get_velocity();
+if (isnan(vel[0]) || isnan(vel[1]) || isnan(vel[2])) printf("NaN detected in source velocity\n");
             alSourcefv( source, AL_VELOCITY, sample->get_velocity() );
+#if 0
+            alSourcefv( source, AL_DIRECTION, sample->get_orientation() );
+#endif
         }
 #else
         alSourcefv( source, AL_POSITION, SGVec3f::zeros().data() );
index 37b138c54710df284ad27bd2ba1175c97bd56711..bfe0a2e7d91cde00807ca097fe33ea1a8a7641d0 100644 (file)
@@ -254,9 +254,14 @@ void SGSoundMgr::update_late( double dt ) {
             alListenerf( AL_GAIN, _volume );
 #if 0
             alListenerfv( AL_ORIENTATION, _at_up_vec );
+#endif
+double *pos = _position.data();
+if (isnan(pos[0]) || isnan(pos[1]) || isnan(pos[2])) printf("NaN detected in listener position\n");
             alListenerfv( AL_POSITION, toVec3f(_position).data() );
+
+double *vel = _velocity.data();
+if (isnan(vel[0]) || isnan(vel[1]) || isnan(vel[2])) printf("NaN detected in listener velocity\n");
             alListenerfv( AL_VELOCITY, toVec3f(_velocity).data() );
-#endif
             // alDopplerVelocity(340.3);       // TODO: altitude dependent
             testForALError("update");
             _changed = false;
index 39cfdfe00e8fff15b20c054eb08b6b6fc2f0a0b4..9e3ae8137ecdffe5002ccb7627948f32697d5d1c 100644 (file)
@@ -101,9 +101,6 @@ SGXmlSound::init(SGPropertyNode *root, SGPropertyNode *node,
 
    } else {
       _mode = SGXmlSound::ONCE;
-
-      if ( strcmp(mode_str, "") )
-         SG_LOG(SG_GENERAL,SG_INFO, "Unknown sound mode for '" << _name << "', default to 'once'");
    }
 
    _property = root->getNode(node->getStringValue("property", ""), true);