下面的代碼:爲什麼會alSourceUnqueueBuffers失敗,INVALID_OPERATION
ALint cProcessedBuffers = 0;
ALenum alError = AL_NO_ERROR;
alGetSourcei(m_OpenALSourceId, AL_BUFFERS_PROCESSED, &cProcessedBuffers);
if((alError = alGetError()) != AL_NO_ERROR)
{
throw "AudioClip::ProcessPlayedBuffers - error returned from alGetSroucei()";
}
alError = AL_NO_ERROR;
if (cProcessedBuffers > 0)
{
alSourceUnqueueBuffers(m_OpenALSourceId, cProcessedBuffers, arrBuffers);
if((alError = alGetError()) != AL_NO_ERROR)
{
throw "AudioClip::ProcessPlayedBuffers - error returned from alSourceUnqueueBuffers()";
}
}
到alGetSourcei調用與cProcessedBuffers> 0返回,但下面的調用alSourceUnqueueBuffers失敗並INVALID_OPERATION。這在一個不總是發生的錯誤錯誤中。包含此示例代碼的程序是一個單線程應用程序,運行在一個緊密的循環中(通常會與顯示循環同步),但在這種情況下,我沒有使用任何類型的定時回調。
順便說一句,這是在OSX上運行。 – Gerald