Estoy usando OpenAL para reproducir sonidos. Estoy tratando de implementar una función de reproducción de disparar y olvidar que toma una ID de búfer y la asigna a una fuente de un grupo que he asignado previamente, y la reproduce. Sin embargo, hay un problema con las vidas de los objetos.
En OpenGL, las funciones de eliminación desvinculan automáticamente las cosas (p. Ej. Texturas) o eliminan automáticamente la cosa cuando eventualmente se desvincula (p. Ej. Sombreadores) y, por lo tanto, es fácil administrar la eliminación. Sin embargo, alDeleteBuffers
simplemente falla AL_INVALID_OPERATION
si el búfer todavía está vinculado a una fuente.
¿Hay alguna forma idiomática de "eliminar" los búferes OpenAL que les permite terminar de jugar y luego se desenlaza automáticamente y realmente los elimina? ¿Necesito vincular la administración del búfer más profundamente en el grupo de origen (por ejemplo, eliminar un búfer requiere verificar también todas las fuentes asignadas)?
Del mismo modo, ¿hay una forma idiomática de desvincular (pero no eliminar) los buffers cuando terminen de jugar? Sería bueno si, cuando buscara una fuente gratuita, solo necesitara ver si un búfer estaba conectado y no molestarme en verificar el estado de la fuente.
(Estoy usando C ++, aunque los enfoques para C también están bien. Los enfoques que suponen un lenguaje GCd y el uso de finalizadores probablemente no sean aplicables).