OpenALを使用してサウンドを再生しています。私は、バッファIDを取得し、以前に割り当てたプールからソースに割り当てて再生する、ファイアアンドフォーゲットプレイ機能を実装しようとしています。ただし、オブジェクトの有効期間には問題があります。
OpenGLでは、削除関数は自動的にバインドを解除する(テクスチャなど)か、最終的にバインドされなくなったときに自動的に削除する(シェーダーなど)ため、通常、削除の管理は簡単です。ただし、alDeleteBuffers
代わりにAL_INVALID_OPERATION
、バッファがまだソースにバインドされている場合、単に失敗します。
OpenALバッファーの再生を終了し、自動的にバインドを解除して実際にそれらを許可する慣用的な方法はありますか?バッファ管理をソースプールにより深く関連付ける必要がありますか(たとえば、バッファを削除するには、割り当てられているすべてのソースもチェックする必要があります)。
同様に、バッファの再生が終了したときに、バッファをアンバインドする(削除はしない)慣用的な方法はありますか?無料のソースを探していたときに、バッファがまったく接続されているかどうかを確認するだけで、ソースの状態を確認する必要がなければいいのですが。
(私はC ++を使用していますが、Cのアプローチも問題ありません。GCd言語を想定し、ファイナライザを使用するアプローチはおそらく適用されません。)