How should I unbind and delete OpenAL buffers?
Posted
by
Joe Wreschnig
on Game Development
See other posts from Game Development
or by Joe Wreschnig
Published on 2012-03-16T12:41:10Z
Indexed on
2012/03/19
2:16 UTC
Read the original article
Hit count: 376
openal
I'm using OpenAL to play sounds. I'm trying to implement a fire-and-forget play function that takes a buffer ID and assigns it to a source from a pool I have previously allocated, and plays it. However, there is a problem with object lifetimes.
In OpenGL, delete functions either automatically unbind things (e.g. textures), or automatically deletes the thing when it eventually is unbound (e.g. shaders) and so it's usually easy to manage deletion. However alDeleteBuffers
instead simply fails with AL_INVALID_OPERATION
if the buffer is still bound to a source.
Is there an idiomatic way to "delete" OpenAL buffers that allows them to finish playing, and then automatically unbinds and really them? Do I need to tie buffer management more deeply into the source pool (e.g. deleting a buffer requires checking all the allocated sources also)?
Similarly, is there an idiomatic way to unbind (but not delete) buffers when they are finished playing? It would be nice if, when I was looking for a free source, I only needed to see if a buffer was attached at all and not bother checking the source state.
(I'm using C++, although approaches for C are also fine. Approaches assuming a GCd language and using finalizers are probably not applicable.)
© Game Development or respective owner