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 | |
parent | 63e98481eef0eb02dac14b889be80836a300eecc (diff) |
Avoid separate updates to sources that should apply together
Diffstat (limited to 'Alc')
-rw-r--r-- | Alc/ALc.c | 2 | ||||
-rw-r--r-- | Alc/ALu.c | 29 |
2 files changed, 19 insertions, 12 deletions
@@ -2266,6 +2266,8 @@ static ALvoid InitContext(ALCcontext *Context) ATOMIC_INIT(&listener->FreeList, NULL); //Validate Context + InitRef(&Context->UpdateCount, 0); + ATOMIC_INIT(&Context->HoldUpdates, AL_FALSE); RWLockInit(&Context->PropLock); ATOMIC_INIT(&Context->LastError, AL_NO_ERROR); InitUIntMap(&Context->SourceMap, Context->Device->MaxNoOfSources); @@ -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); } |