X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=simgear%2Fsound%2Fsoundmgr_openal.cxx;h=ea5e44db0f4c69100b24ceb8a4a8ca9bb47f3f0a;hb=1fe9755d01b9b0c06e8cfd05272e17a3ce0f1bf3;hp=2cba97807b1924f1a38d48df5f250b5d36c02ea0;hpb=f3c591469b12bb5ec9ad29181fda0faeee5ab144;p=simgear.git diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index 2cba9780..ea5e44db 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -437,6 +437,7 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample) if ( !sample->is_valid_buffer() ) { // sample was not yet loaded or removed again string sample_name = sample->get_sample_name(); + void *sample_data = NULL; // see if the sample name is already cached buffer_map_iterator buffer_it = _buffers.find( sample_name ); @@ -449,32 +450,31 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample) // sample name was not found in the buffer cache. if ( sample->is_file() ) { - size_t size; int freq, format; - void *data; + size_t size; + bool res; + + res = load(sample_name, &sample_data, &format, &size, &freq); + if (res == false) return buffer; - load(sample_name, &data, &format, &size, &freq); - sample->set_data( &data ); sample->set_frequency( freq ); sample->set_format( format ); sample->set_size( size ); } + else + sample_data = sample->get_data(); // create an OpenAL buffer handle alGenBuffers(1, &buffer); if ( !testForALError("generate buffer") ) { // Copy data to the internal OpenAL buffer - const ALvoid *data = sample->get_data(); ALenum format = sample->get_format(); ALsizei size = sample->get_size(); ALsizei freq = sample->get_frequency(); - alBufferData( buffer, format, data, size, freq ); + alBufferData( buffer, format, sample_data, size, freq ); - // If this sample was read from a file we have all the information - // needed to read it again. For data buffers provided by the - // program we don't; so don't delete it's data. - if ( sample->is_file() ) sample->free_data(); + if ( sample->is_file() ) free(sample_data); if ( !testForALError("buffer add data") ) { sample->set_buffer(buffer);