diff options
author | Chris Robinson <[email protected]> | 2016-05-12 19:05:06 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2016-05-12 19:05:06 -0700 |
commit | 210e150601d9b458d446483f5f16e1e67cc6e3ba (patch) | |
tree | c7230d482b5628b334845a1f735ef3d1a42d5a98 /Alc/ALu.c | |
parent | ef0d4f8210fe6aa65b9df96f3b64bf6f355e845a (diff) |
Avoid updating the effect state object if it's not changed
Diffstat (limited to 'Alc/ALu.c')
-rw-r--r-- | Alc/ALu.c | 15 |
1 files changed, 7 insertions, 8 deletions
@@ -342,14 +342,6 @@ static ALboolean CalcEffectSlotParams(ALeffectslot *slot, ALCdevice *device) slot->Params.AuxSendAuto = ATOMIC_LOAD(&props->AuxSendAuto, almemory_order_relaxed); slot->Params.EffectType = ATOMIC_LOAD(&props->Type, almemory_order_relaxed); memcpy(&slot->Params.EffectProps, &props->Props, sizeof(props->Props)); - /* If the existing state object is different from the one being set, - * exchange it so it remains in the freelist and isn't leaked. - */ - if(slot->Params.EffectState == ATOMIC_LOAD(&props->State, almemory_order_relaxed)) - slot->Params.EffectState = NULL; - slot->Params.EffectState = ATOMIC_EXCHANGE(ALeffectState*, - &props->State, slot->Params.EffectState, almemory_order_relaxed - ); if(IsReverbEffect(slot->Params.EffectType)) { slot->Params.RoomRolloff = slot->Params.EffectProps.Reverb.RoomRolloffFactor; @@ -362,6 +354,13 @@ static ALboolean CalcEffectSlotParams(ALeffectslot *slot, ALCdevice *device) slot->Params.DecayTime = 0.0f; slot->Params.AirAbsorptionGainHF = 1.0f; } + /* If the state object is changed, exchange it with the current one so it + * remains in the freelist and isn't leaked. + */ + if(ATOMIC_LOAD(&props->UpdateState, almemory_order_relaxed)) + slot->Params.EffectState = ATOMIC_EXCHANGE(ALeffectState*, + &props->State, slot->Params.EffectState, almemory_order_relaxed + ); V(slot->Params.EffectState,update)(device, slot); |