我想實現流音頻,我遇到了一個問題,其中OpenAL給了我一個錯誤代碼似乎是不可能給出的文檔中的信息。OpenAL unqueueing錯誤代碼,不完整的文檔
int buffersProcessed = 0;
alGetSourcei(m_Source, AL_BUFFERS_PROCESSED, &buffersProcessed);
PrintALError();
int toAddBufferIndex;
// Remove the first buffer from the queue and move it to
//the end after buffering new data.
if (buffersProcessed > 0)
{
ALuint unqueued;
alSourceUnqueueBuffers(m_Source, 1, &unqueued);
/////////////////////////////////
PrintALError(); // Prints AL_INVALID_OPERATION //
/////////////////////////////////
toAddBufferIndex = firstBufferIndex;
}
據the documentation [PDF],AL_INVALID_OPERATION
表示: 「目前沒有任何背景。」這看起來不可能是真的,因爲OpenAL已經並繼續播放其他音頻就好了!
可以肯定的是,我在這裏調用了ALCcontext* temp = alcGetCurrentContext();
,它返回了一個有效的上下文。
有沒有其他的錯誤條件可能在這裏沒有提到的文檔?
更多細節:聲源播放時,該代碼被調用,但我從閱讀的規範得到的印象是,你可以放心地unqueue處理緩衝區而源播放。 PrintALError
只是一個alGetError
的包裝,如果有任何錯誤,則會打印。
我在Mac(OS 10.8.3)上,以防萬一。
這可能只是在函數成功時獲取錯誤代碼是未定義的?因此,該功能可能會成功,但無論如何您都會打印錯誤代碼,因此無效。您應該在打印錯誤之前檢查功能是否失敗。 –
alGetError()是檢查OpenAL中的函數是否失敗的方法,這就是PrintALError所做的。在沒有錯誤時調用PrintALError獲取錯誤代碼AL_NO_ERROR,並且在這種情況下我不打印任何東西。 –