2010-06-02 13 views
8

Estoy tratando de crear un modelo orientado a objetos para ajustar OpenAL y tengo un pequeño problema para comprender los dispositivos, búferes y contextos.Dispositivo OpenAL, búfer y relación de contexto

Según lo que puedo ver en la Guía del programador, hay varios dispositivos, cada uno de los cuales puede tener múltiples contextos y múltiples búferes. Cada contexto tiene un oyente, y las funciones alListener*() operan en el oyente del contexto activo. (Lo que significa que tengo que activar otro contexto primero si quería cambiar su oyente, si lo entendí bien). Hasta ahora, todo bien. Lo que me irrita es que necesito pasar un dispositivo a la función alcCreateContext(), pero ninguno a alGenBuffers().

¿Cómo funciona esto? Cuando abro varios dispositivos, ¿en qué dispositivo están creados los búferes? ¿Los búferes se comparten entre todos los dispositivos? ¿Qué sucede con los buffers si cierro todos los dispositivos abiertos?

(O hay algo que había perdido?)

Respuesta

4

bien, problema resuelto. Hice la pregunta here y la respuesta fue

Todos los al * funciones (en lugar de las funciones alc *) operan en el contexto actual. Por lo tanto, las llamadas alGenBuffer operarán en el contexto actual y crean búferes que pertenecen al dispositivo del contexto (un contexto solo puede tener un dispositivo).

Los almacenamientos intermedios creados en un dispositivo no están disponibles en otro dispositivo.

Los almacenamientos intermedios de un dispositivo (probablemente) se destruirán automáticamente cuando llame al alcCloseDevice.

Así que tendré que activar un contexto arbitrario de ese dispositivo, luego crear los almacenamientos intermedios, luego volver a activar el contexto anterior. O impida la creación de búferes si el dispositivo no está activo, lo que significa que ninguno de sus contextos está activo.

Cuestiones relacionadas