Устройство OpenAL, буфер и отношения контекста

Я пытаюсь создать объектно-ориентированную модель, чтобы перенести OpenAL и иметь немного проблемы при понимании устройств, буферов и контекстов.

Из того, что я вижу в Руководстве Программиста, существует несколько устройств, каждое из которых может иметь несколько контекстов, а также несколько буферов. Каждый контекст имеет слушателя, и alListener*() функции все воздействуют на слушателя активного контекста. (Подразумевать, что я должен сделать другой контекст активным первый, если бы я хотел измениться, это - слушатель, если я разобрался в этом.) Пока неплохо. Что раздражает меня, хотя то, что я должен передать устройство alcCreateContext() функция, но ни один к alGenBuffers().

Как это работает затем? Когда я открываю несколько устройств, на котором устройстве создаются буферы? Буферы совместно используются всеми устройствами? Что происходит с буферами, если я закрываю все открытые устройства?

(Или есть ли что-то, что я пропустил?)

8
задан sunside 2 June 2010 в 19:30
поделиться

1 ответ

Хорошо, проблема решена. Я задал вопрос здесь, и ответ был таков

Все функции al* (а не функции alc*) работают с текущим контекстом. Так, вызовы alGenBuffer будут работать с текущим контекстом и создавать буферы, принадлежащие устройству контекста (контекст может иметь только одно устройство).

Буферы, созданные на одном устройстве, недоступны на другом устройстве.

Буферы устройства будут (вероятно) автоматически уничтожены, когда вы вызовете команду alcCloseDevice.

Поэтому мне придется сделать активным произвольный контекст этого устройства, затем создать буферы, затем снова сделать активным старый контекст. Или вообще предотвратить создание буферов, если устройство не активно, то есть ни один из его контекстов не активен.

4
ответ дан 6 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: