Sto usando OpenAL per riprodurre suoni. Sto cercando di implementare una funzione di riproduzione attiva e dimentica che accetta un ID buffer e lo assegna a una sorgente da un pool che ho precedentemente allocato e lo riproduce. Tuttavia, c'è un problema con la durata degli oggetti.
In OpenGL, le funzioni di eliminazione separano automaticamente le cose (ad esempio le trame) o eliminano automaticamente la cosa quando alla fine non sono legate (ad es. Shader) e quindi di solito è facile gestire la cancellazione. Tuttavia alDeleteBuffers
invece fallisce semplicemente AL_INVALID_OPERATION
se il buffer è ancora associato a una sorgente.
Esiste un modo idiomatico di "eliminare" i buffer OpenAL che consente loro di terminare la riproduzione e quindi di sciogliersi automaticamente e davvero? Devo collegare in modo più approfondito la gestione del buffer nel pool di origini (ad esempio, l'eliminazione di un buffer richiede anche il controllo di tutte le fonti allocate)?
Allo stesso modo, c'è un modo idiomatico per separare (ma non eliminare) i buffer quando hanno finito di giocare? Sarebbe bello se, quando stavo cercando una fonte libera, avessi solo bisogno di vedere se un buffer era collegato e non preoccuparmi di controllare lo stato della fonte.
(Sto usando C ++, anche se gli approcci per C vanno bene. Gli approcci che presuppongono un linguaggio GCd e che usano i finalizzatori probabilmente non sono applicabili.)