2014年4月10日木曜日

alDeleteBuffers()がAL_INVALID_OPERATIONを返して困ったら

OpenALでサウンドデータ(バッファ)を解放しようとするときには、alDeleteBuffers()を使用します。

全てのサウンド再生が終了しているのを見計らって、いざalDeleteBuffers()を実行しても、エラーコードAL_INVALID_OPERATIONで失敗してしまうというのは世界中よくやるミスのようです。


検索すると、ゴロゴロと出てきました。

そんな時は、サウンドデータ(バッファ)が、ソースにバインドされたままである可能性を疑ってみる必要がありそうです。

以下は、ソースのステータスが再生かPAUSE中でなければ、バッファをアンバインドするサンプルコードです。再生中でも停止してからアンバインドするのでも良いかもしれません。
ALint val;
alGetSourcei(sid, AL_SOURCE_STATE, &val);
if ( (val!=AL_PLAYING) && (val!=AL_PAUSED) ) {
  alSourcei(sid, AL_BUFFER, NULL);
}
これを行ってから再度、alDeleteBuffers()でバッファを解放してみて下さい。
次は、うまくいくかもしれませんよ。

参考記事

How should I unbind and delete OpenAL buffers? - Game Development Stack Exchange

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...