스트리밍 오디오를 구현하려고하는데 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가 표시되며이 경우 아무 것도 인쇄하지 않습니다. –