diff options
Diffstat (limited to 'code')
-rw-r--r-- | code/client/snd_openal.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/code/client/snd_openal.c b/code/client/snd_openal.c index 6b3f547..b8ae488 100644 --- a/code/client/snd_openal.c +++ b/code/client/snd_openal.c @@ -1396,6 +1396,8 @@ S_AL_StreamDie static void S_AL_StreamDie( int stream ) { + int numBuffers; + if ((stream < 0) || (stream >= MAX_RAW_STREAMS)) return; @@ -1404,6 +1406,16 @@ void S_AL_StreamDie( int stream ) streamPlaying[stream] = qfalse; qalSourceStop(streamSources[stream]); + + // Un-queue any buffers, and delete them + qalGetSourcei( streamSources[stream], AL_BUFFERS_PROCESSED, &numBuffers ); + while( numBuffers-- ) + { + ALuint buffer; + qalSourceUnqueueBuffers(streamSources[stream], 1, &buffer); + qalDeleteBuffers(1, &buffer); + } + S_AL_FreeStreamChannel(stream); } |