[openal] alcSuspend/ProcessContext behavior?

Chris Robinson chris.kcat at gmail.com
Tue Sep 15 23:36:18 EDT 2015

Hi guys, I seem to have run into a bit of an issue.

Since commit 4320a1483b22eff1cc49b13570054064b321473b, OpenAL Soft has 
added deferring behavior for suspended contexts, which as I understand, 
is how it behaves on Windows (with a couple drivers, at least).

Essentially, when alcSuspendContext is called all pending updates for 
source, listener, and auxiliary slot properties on the given context are 
performed, and a flag is set to prevent any further updates for them. It 
also defers alSourcePlay and alSourcePause calls (alSourceStop and 
alSourceRewind still take effect immediately). Subsequent calls to 
alcSuspendContext while this flag is set is a no-op.

alcProcessContext, then, unsets the flag so any and all necessary 
updates can be performed the next time the mixer runs, and performs any 
play/pause calls that were made. This ensures that source, listener, and 
effect slot property changes made while the context is suspended all 
take effect at the same time, avoiding partial updates.

However, it seems at least one Windows game (Unreal Tournament 2004) 
doesn't like this:
It seems to keep the context suspended for long periods of time so 
panning and volume changes don't occur properly, and causes some sources 
to not play. Yet I presume this game works on the other Windows drivers. 
The Linux version of the game, incidentally, works just fine with OpenAL 
Soft, with all sounds playing as they should and moving as they should.

Am I misunderstanding how these functions work on Windows?

More information about the openal mailing list