[openal] alcSuspend/ProcessContext behavior?
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