OpenAL设备,缓冲区和上下文关系

时间:2010-06-02 18:42:57

标签: audio openal

我正在尝试创建一个面向对象的模型来包装OpenAL,并且在理解设备,缓冲区和上下文时遇到一些问题。

从我在程序员指南中看到的,有多个设备,每个设备可以有多个上下文以及多个缓冲区。每个上下文都有一个监听器,alListener*()函数都在活动上下文的监听器上运行。 (这意味着如果我想改变它的倾听者,我必须首先激活另一个上下文,如果我做对了。)到目前为止,那么好。 令我恼火的是,我需要将设备传递给alcCreateContext()函数,但没有传递给alGenBuffers()

这是如何工作的呢?当我打开多个设备时,在哪个设备上创建了缓冲区?缓冲区是否在所有设备之间共享?如果我关闭所有打开的设备,缓冲区会发生什么?

(或者我错过了什么?)

1 个答案:

答案 0 :(得分:4)

好的,问题解决了。我问了问题here,答案是

  

所有al *函数(而不是alc *函数)都对当前函数进行操作   上下文。因此,alGenBuffer调用将在当前上下文中运行   创建属于Context的Device的Buffers(Context只能拥有   一个设备)。

     

在一台设备上创建的缓冲区在另一台设备上不可用。

     

当你打电话时,设备的缓冲区(可能)会被自动销毁   alcCloseDevice。

因此,我必须使该设备的任意上下文处于活动状态,然后创建缓冲区,然后再次激活旧上下文。或者,如果设备未处于活动状态,则完全阻止创建缓冲区,这意味着它的所有上下文都不活动。