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) :
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;
}

View file

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