]> git.mxchange.org Git - simgear.git/blobdiff - simgear/sound/soundmgr_openal.cxx
Pass current-dir down through XMLSound
[simgear.git] / simgear / sound / soundmgr_openal.cxx
index 16d9e7948f9c6ca8e08562d17430887ec688a0bd..c3eda45a0568e7cb2e9037a23b0f9a8cc9af6fb0 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <iostream>
 #include <algorithm>
+#include <cstring>
 
 #include "soundmgr_openal.hxx"
 
@@ -89,7 +90,7 @@ SGSoundMgr::SGSoundMgr() :
     }
     _alut_init++;
 #else
-  #error ALUT 1.1 required, ALUT 1.0 is no longer supported, please upgrade
+  //#error ALUT 1.1 required, ALUT 1.0 is no longer supported, please upgrade
 #endif
 }
 
@@ -469,11 +470,15 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
         if ( sample->is_file() ) {
             int freq, format;
             size_t size;
-            bool res;
-
-            res = load(sample_name, &sample_data, &format, &size, &freq);
-            if (res == false) return buffer;
 
+            try {
+              bool res = load(sample_name, &sample_data, &format, &size, &freq);
+              if (res == false) return buffer;
+            } catch (sg_exception& e) {
+              SG_LOG(SG_GENERAL, SG_ALERT, "failed to load sound buffer:" << e.getFormattedMessage());
+              return NO_BUFFER;
+            }
+            
             sample->set_frequency( freq );
             sample->set_format( format );
             sample->set_size( size );
@@ -508,20 +513,23 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample)
 
 void SGSoundMgr::release_buffer(SGSoundSample *sample)
 {
-    string sample_name = sample->get_sample_name();
-    buffer_map_iterator buffer_it = _buffers.find( sample_name );
-    if ( buffer_it == _buffers.end() ) {
-        // buffer was not found
-        return;
-    }
+    if ( !sample->is_queue() )
+    {
+        string sample_name = sample->get_sample_name();
+        buffer_map_iterator buffer_it = _buffers.find( sample_name );
+        if ( buffer_it == _buffers.end() ) {
+            // buffer was not found
+            return;
+        }
 
-    sample->no_valid_buffer();
-    buffer_it->second.refctr--;
-    if (buffer_it->second.refctr == 0) {
-        ALuint buffer = buffer_it->second.id;
-        alDeleteBuffers(1, &buffer);
-        _buffers.erase( buffer_it );
-        testForALError("release buffer");
+        sample->no_valid_buffer();
+        buffer_it->second.refctr--;
+        if (buffer_it->second.refctr == 0) {
+            ALuint buffer = buffer_it->second.id;
+            alDeleteBuffers(1, &buffer);
+            _buffers.erase( buffer_it );
+            testForALError("release buffer");
+        }
     }
 }