Estou usando o OpenAL para reproduzir sons. Estou tentando implementar uma função de acionar e esquecer que usa um ID de buffer e o atribui a uma fonte de um pool que eu aloquei anteriormente e o executa. No entanto, há um problema com a vida útil do objeto.
No OpenGL, as funções de exclusão desvinculam automaticamente as coisas (por exemplo, texturas) ou excluem automaticamente as coisas quando eventualmente não são acopladas (por exemplo, shaders) e, portanto, geralmente é fácil gerenciar a exclusão. No entanto, alDeleteBuffers
simplesmente falha com AL_INVALID_OPERATION
se o buffer ainda estiver vinculado a uma fonte.
Existe uma maneira idiomática de "excluir" os buffers OpenAL que lhes permitam terminar a reprodução e depois desassociar automaticamente e realmente eles? Preciso vincular o gerenciamento de buffer mais profundamente ao pool de origem (por exemplo, excluir um buffer requer a verificação de todas as fontes alocadas também)?
Da mesma forma, existe uma maneira idiomática de desvincular (mas não excluir) os buffers quando eles terminam de tocar? Seria bom se, quando eu estava procurando uma fonte livre, eu só precisasse ver se um buffer estava conectado e não me incomodar em verificar o estado da fonte.
(Estou usando C ++, embora as abordagens para C também sejam boas. Abordagens que pressupõem uma linguagem GCd e que usam finalizadores provavelmente não são aplicáveis.)