8

OpenALをラップするオブジェクト指向モデルを作成しようとしていますが、デバイス、バッファー、コンテキストを理解するのに少し問題があります。

プログラマーガイドで確認できることから、複数のデバイスがあり、それぞれが複数のコンテキストと複数のバッファーを持つことができます。各コンテキストにはリスナーがあり、alListener*()関数はすべてアクティブなコンテキストのリスナーで動作します。(リスナーを変更したい場合は、最初に別のコンテキストをアクティブにする必要があることを意味します。それが正しい場合)。これまでのところ、非常に優れています。しかし、私を苛立たせているのは、デバイスをalcCreateContext()関数に渡す必要があるが、に渡す必要がないことalGenBuffers()です。

それでは、これはどのように機能しますか?複数のデバイスを開くと、どのデバイスでバッファが作成されますか?バッファはすべてのデバイス間で共有されていますか?開いているすべてのデバイスを閉じると、バッファはどうなりますか?

(または私が見逃したものはありますか?)

4

1 に答える 1

4

さて、問題は解決しました。ここで質問したところ、答えは

(alc *関数ではなく)すべてのal *関数は、現在のコンテキストで動作します。したがって、alGenBuffer呼び出しは現在のコンテキストで動作し、コンテキストのデバイスに属するバッファーを作成します(コンテキストは1つのデバイスのみを持つことができます)。

あるデバイスで作成されたバッファは、別のデバイスでは使用できません。

alcCloseDeviceを呼び出すと、デバイスのバッファは(おそらく)自動的に破棄されます。

そのため、そのデバイスの任意のコンテキストをアクティブにしてから、バッファーを作成してから、古いコンテキストを再度アクティブにする必要があります。または、デバイスがアクティブでない場合、つまりデバイスのコンテキストがアクティブでない場合は、バッファの作成を完全に防止します。

于 2010-06-04T18:36:21.087 に答える