【问题标题】:OpenAL device, buffer and context relationshipOpenAL 设备、缓冲区和上下文关系
【发布时间】:2010-06-02 18:42:56
【问题描述】:

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

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

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

(或者我错过了什么?)

【问题讨论】:

    标签: audio openal


    【解决方案1】:

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

    所有 al* 函数(而不是 alc* 函数)都在当前 语境。因此,alGenBuffer 调用将在当前上下文中运行,并且 创建属于 Context 的 Device 的 Buffer(一个 Context 只能有 一台设备)。

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

    当您调用时,设备的缓冲区将(可能)自动销毁 alc 关闭设备。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多