bufferネームとsourceネームをそれぞれ[buffer]と[source]としたとき
{ ALint processed_buffer_num[1]; alGetSourcei(source, AL_BUFFERS_PROCESSED, processed_buffer_num); if (processed_buffer_num[0] > 0) { ALenum type[1]; alGetSourcei(source, AL_SOURCE_TYPE, type); alGetError(); alSourceUnqueueBuffers(source, 1, buffer); ALenum error = alGetError(); } }この状態でerrorが受け取った値がAL_INVALID_OPERATIONだった。つまりコンテキストがおかしいということらしい。
もちろんtype[0]の値は、AL_STREAMINGになるように設定している。
調べてみるとAL_LOOPINGをTRUEにしているとこの症状になるようだということが分かった。
なので、
{ ALint processed_buffer_num[1]; alGetSourcei(source, AL_BUFFERS_PROCESSED, processed_buffer_num); if (processed_buffer_num[0] > 0) { ALint loop = AL_FALSE; alGetSourcei(source, AL_LOOPING, &loop); alSourcei(source, AL_LOOPING, FALSE); alSourceUnqueueBuffers(source, 1, buffer); alSourcei(m_sources[0], AL_LOOPING, loop); } }とすることでアンキューできるようになった。しかしあまりスマートな感じがしない・・・
0 件のコメント:
コメントを投稿