diff options
author | Chris Robinson <[email protected]> | 2016-05-15 17:14:58 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-05-15 22:16:27 -0700 |
commit | 945fd022d6c9d612a5fae944d8cbef68927d8a92 (patch) | |
tree | 88a1fdfd2890c0f9f0ee4d3a541571177609f2bc /Alc/ALu.c | |
parent | 63e98481eef0eb02dac14b889be80836a300eecc (diff) |
Avoid separate updates to sources that should apply together
Diffstat (limited to 'Alc/ALu.c')
-rw-r--r-- | Alc/ALu.c | 29 |
1 files changed, 17 insertions, 12 deletions
@@ -1339,26 +1339,31 @@ ALvoid CalcAttnSourceParams(ALvoice *voice, const struct ALsourceProps *props, c } -void UpdateContextSources(ALCcontext *ctx) +static void UpdateContextSources(ALCcontext *ctx) { ALvoice *voice, *voice_end; ALsource *source; - CalcListenerParams(ctx); + IncrementRef(&ctx->UpdateCount); + if(!ATOMIC_LOAD(&ctx->HoldUpdates)) + { + CalcListenerParams(ctx); #define UPDATE_SLOT(iter) CalcEffectSlotParams(*iter, ctx->Device) - VECTOR_FOR_EACH(ALeffectslot*, ctx->ActiveAuxSlots, UPDATE_SLOT); + VECTOR_FOR_EACH(ALeffectslot*, ctx->ActiveAuxSlots, UPDATE_SLOT); #undef UPDATE_SLOT - voice = ctx->Voices; - voice_end = voice + ctx->VoiceCount; - for(;voice != voice_end;++voice) - { - if(!(source=voice->Source)) continue; - if(source->state != AL_PLAYING && source->state != AL_PAUSED) - voice->Source = NULL; - else - CalcSourceParams(voice, ctx); + voice = ctx->Voices; + voice_end = voice + ctx->VoiceCount; + for(;voice != voice_end;++voice) + { + if(!(source=voice->Source)) continue; + if(source->state != AL_PLAYING && source->state != AL_PAUSED) + voice->Source = NULL; + else + CalcSourceParams(voice, ctx); + } } + IncrementRef(&ctx->UpdateCount); } |