开放式缓冲区

OpeanAL buffers

根据我对OpenAL对象的理解,OpenAL Buffer属于设备,而不属于上下文。如果我想创建一个缓冲区,我会使用 alGenBuffers() 这样做,但我不确定这个缓冲区将在哪个设备上创建。如何选择在哪个设备上创建缓冲区?

OpenAL Buffer belongs to a device, and not a context

当您使用 alGenBuffers() 创建缓冲区时,缓冲区确实是在特定设备上创建的。简而言之,当调用 alGenBuffers() 时,它会获取活动上下文的设备。然后在该设备上创建缓冲区。

How do I choose which device to create the buffer on?

因此,您需要获取另一台设备并使用该设备创建新的上下文:

ALCdevice *device = alcOpenDevice(...);
ALCcontext *context = alcCreateContext(device, NULL);

然后使这个新上下文成为当前活动上下文:

alcMakeContextCurrent(context);

现在任何 alGenBuffers()alBufferData() 等都应用于该活动上下文,然后又应用于活动上下文的设备。