2010-06-02 18 views
8

Sto provando a creare un modello orientato agli oggetti per avvolgere OpenAL e avere un piccolo problema nella comprensione di dispositivi, buffer e contesti.Dispositivo OpenAL, buffer e relazione di contesto

Da quello che posso vedere nella Guida del programmatore, ci sono più dispositivi, ognuno dei quali può avere più contesti e più buffer. Ogni contesto ha un listener e le funzioni alListener*() operano tutte sull'ascoltatore del contesto attivo. (Significa che per prima cosa devo rendere attivo un altro contesto se volevo cambiare il suo ascoltatore, se ho capito bene.) Finora, tutto bene. Ciò che mi irrita è che devo passare un dispositivo alla funzione alcCreateContext(), ma nessuno a alGenBuffers().

Come funziona allora? Quando apro più dispositivi, su quale dispositivo sono creati i buffer? I buffer sono condivisi tra tutti i dispositivi? Cosa succede ai buffer se chiudo tutti i dispositivi aperti?

(O c'è qualcosa che ho perso?)

risposta

4

Ok, problema risolto. Ho fatto la domanda here e la risposta è stata

Tutte le funzioni AL * (piuttosto che le funzioni ALC *) operano sulla corrente contesto. Pertanto, le chiamate di alGenBuffer funzioneranno sul contesto corrente e creano i Buffer che appartengono al dispositivo del contesto (un Contesto può avere solo un dispositivo) .

I buffer creati su un dispositivo non sono disponibili su un altro dispositivo.

I buffer di un dispositivo verranno (probabilmente) automaticamente distrutti quando si chiama alcCloseDevice.

Quindi dovrò rendere attivo un contesto arbitrario di quel dispositivo, quindi creare i buffer, quindi rendere di nuovo attivo il vecchio contesto. O evitare la creazione di buffer del tutto se il dispositivo non è attivo, il che significa che nessuno dei suoi contesti è attivo.