J'utilise OpenAL pour jouer des sons. J'essaie d'implémenter une fonction de jeu de tir et d'oublier qui prend un ID de tampon et l'affecte à une source à partir d'un pool que j'ai précédemment alloué, et le joue. Cependant, il y a un problème avec les durées de vie des objets.
Dans OpenGL, les fonctions de suppression délient automatiquement les éléments (par exemple les textures) ou suppriment automatiquement l'élément lorsqu'il est finalement non lié (par exemple les shaders) et il est donc généralement facile de gérer la suppression. Cependant, alDeleteBuffers
échoue simplement avec AL_INVALID_OPERATION
si le tampon est toujours lié à une source.
Existe-t-il un moyen idiomatique de «supprimer» les tampons OpenAL qui leur permet de terminer la lecture, puis de les délier automatiquement et vraiment eux? Dois-je lier plus profondément la gestion des tampons au pool source (par exemple, la suppression d'un tampon nécessite également de vérifier toutes les sources allouées)?
De même, existe-t-il un moyen idiomatique de dissocier (mais pas de supprimer) les tampons lorsqu'ils ont fini de jouer? Ce serait bien si, lorsque je cherchais une source gratuite, je n'avais besoin que de voir si un tampon était attaché du tout et pas pris la peine de vérifier l'état de la source.
(J'utilise C ++, bien que les approches pour C soient également correctes. Les approches supposant un langage GCd et utilisant des finaliseurs ne sont probablement pas applicables.)