Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Audio OpenAL设备、缓冲区和上下文关系_Audio_Openal - Fatal编程技术网

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

Audio OpenAL设备、缓冲区和上下文关系,audio,openal,Audio,Openal,我试图创建一个面向对象的模型来包装OpenAL,但在理解设备、缓冲区和上下文方面有点问题 从《程序员指南》中我可以看到,有多个设备,每个设备都可以有多个上下文和多个缓冲区。每个上下文都有一个侦听器,alListener*()函数都在活动上下文的侦听器上运行。(这意味着如果我想改变它的侦听器,我必须首先激活另一个上下文,如果我做得对的话。)到目前为止,很好。 但让我恼火的是,我需要将一个设备传递给alcreatecontext()函数,但没有传递给alGenBuffers() 那么这是怎么回事?当

我试图创建一个面向对象的模型来包装OpenAL,但在理解设备、缓冲区和上下文方面有点问题

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

那么这是怎么回事?当我打开多个设备时,在哪个设备上创建缓冲区?缓冲区是否在所有设备之间共享?如果关闭所有打开的设备,缓冲区会发生什么情况


(或者我遗漏了什么?

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

所有al*功能(而非alc*功能)均在电流模式下工作 上下文因此,alGenBuffer调用将在当前上下文和 创建属于上下文设备的缓冲区(上下文只能有 一个设备)

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

当您调用时,设备的缓冲区(可能)会自动销毁 自动控制装置

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