From ddcd5dad383cdfa2c44c236a5fce691454215624 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 11 Jun 2010 19:31:24 +0200 Subject: [PATCH] Fixed: #974 OpenAL driver did not work anymore because of bad isBufferLoaded implementation. --- .../nel/src/sound/driver/openal/buffer_al.cpp | 20 +++++++++++++------ code/nel/src/sound/driver/openal/buffer_al.h | 2 ++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/code/nel/src/sound/driver/openal/buffer_al.cpp b/code/nel/src/sound/driver/openal/buffer_al.cpp index 63cdd7432..f4b770a29 100644 --- a/code/nel/src/sound/driver/openal/buffer_al.cpp +++ b/code/nel/src/sound/driver/openal/buffer_al.cpp @@ -24,7 +24,7 @@ namespace NLSOUND { CBufferAL::CBufferAL(ALuint buffername) : IBuffer(), _BufferName(buffername), _SampleFormat(AL_INVALID), _Frequency(0), - _DataAligned(NULL), _DataPtr(NULL), _Capacity(0), _Size(0), _StorageMode(IBuffer::StorageAuto) + _DataAligned(NULL), _DataPtr(NULL), _Capacity(0), _Size(0), _StorageMode(IBuffer::StorageAuto), _IsLoaded(false) { } @@ -76,6 +76,8 @@ uint8 *CBufferAL::lock(uint capacity) { nlassert((_SampleFormat != AL_INVALID) && (_Frequency != 0)); + _IsLoaded = false; + if (_DataPtr) { if (capacity > _Capacity) @@ -114,9 +116,12 @@ bool CBufferAL::unlock(uint size) _DataPtr = NULL; _Capacity = 0; } - + // Error handling - return (alGetError() == AL_NO_ERROR); + if (alGetError() == AL_NO_ERROR) + _IsLoaded = true; + + return _IsLoaded; } /// Copy the data with specified size into the buffer. A readable local copy is only guaranteed when OptionLocalBufferCopy is set. Returns true if ok. @@ -153,9 +158,12 @@ bool CBufferAL::fill(const uint8 *src, uint size) // Fill buffer (OpenAL one) alBufferData(_BufferName, _SampleFormat, src, size, _Frequency); - + // Error handling - return (alGetError() == AL_NO_ERROR); + if (alGetError() == AL_NO_ERROR) + _IsLoaded = true; + + return _IsLoaded; } /// Return the sample format informations. @@ -233,7 +241,7 @@ NLMISC::TStringId CBufferAL::getName() const bool CBufferAL::isBufferLoaded() const { - return (_SampleFormat != AL_INVALID && _DataPtr != NULL /* ? */ && _Size > 0 && _Frequency > 0); + return _IsLoaded; } diff --git a/code/nel/src/sound/driver/openal/buffer_al.h b/code/nel/src/sound/driver/openal/buffer_al.h index e134ca7b6..32546c716 100644 --- a/code/nel/src/sound/driver/openal/buffer_al.h +++ b/code/nel/src/sound/driver/openal/buffer_al.h @@ -96,6 +96,8 @@ private: uint _Size; /// Storage mode IBuffer::TStorageMode _StorageMode; + /// Buffer loaded or not + bool _IsLoaded; };