Fixed: #974 OpenAL driver did not work anymore because of bad isBufferLoaded implementation.

This commit is contained in:
kaetemi 2010-06-11 19:31:24 +02:00
parent c820502ebb
commit ddcd5dad38
2 changed files with 16 additions and 6 deletions

View file

@ -24,7 +24,7 @@ namespace NLSOUND {
CBufferAL::CBufferAL(ALuint buffername) : CBufferAL::CBufferAL(ALuint buffername) :
IBuffer(), _BufferName(buffername), _SampleFormat(AL_INVALID), _Frequency(0), 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)); nlassert((_SampleFormat != AL_INVALID) && (_Frequency != 0));
_IsLoaded = false;
if (_DataPtr) if (_DataPtr)
{ {
if (capacity > _Capacity) if (capacity > _Capacity)
@ -116,7 +118,10 @@ bool CBufferAL::unlock(uint size)
} }
// Error handling // 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. /// Copy the data with specified size into the buffer. A readable local copy is only guaranteed when OptionLocalBufferCopy is set. Returns true if ok.
@ -155,7 +160,10 @@ bool CBufferAL::fill(const uint8 *src, uint size)
alBufferData(_BufferName, _SampleFormat, src, size, _Frequency); alBufferData(_BufferName, _SampleFormat, src, size, _Frequency);
// Error handling // Error handling
return (alGetError() == AL_NO_ERROR); if (alGetError() == AL_NO_ERROR)
_IsLoaded = true;
return _IsLoaded;
} }
/// Return the sample format informations. /// Return the sample format informations.
@ -233,7 +241,7 @@ NLMISC::TStringId CBufferAL::getName() const
bool CBufferAL::isBufferLoaded() const bool CBufferAL::isBufferLoaded() const
{ {
return (_SampleFormat != AL_INVALID && _DataPtr != NULL /* ? */ && _Size > 0 && _Frequency > 0); return _IsLoaded;
} }

View file

@ -96,6 +96,8 @@ private:
uint _Size; uint _Size;
/// Storage mode /// Storage mode
IBuffer::TStorageMode _StorageMode; IBuffer::TStorageMode _StorageMode;
/// Buffer loaded or not
bool _IsLoaded;
}; };