diff options
author | Chris Robinson <chris.kcat@gmail.com> | 2020-02-08 18:10:59 -0800 |
---|---|---|
committer | Chris Robinson <chris.kcat@gmail.com> | 2020-02-08 18:10:59 -0800 |
commit | 85395b23a4861da370565051d49617c81d617b1e (patch) | |
tree | 022a5c872a9eedd030bd3840ef0d4afa130f106c /alc/alu.cpp | |
parent | 3ee0906c81e3af184c7be5029fdfc5c0b4703179 (diff) |
Clear voice target gains earlier
Diffstat (limited to 'alc/alu.cpp')
-rw-r--r-- | alc/alu.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/alc/alu.cpp b/alc/alu.cpp index 1e6e7d07..27075477 100644 --- a/alc/alu.cpp +++ b/alc/alu.cpp @@ -744,8 +744,19 @@ void CalcPanningAndFilters(ALvoice *voice, const ALfloat xpos, const ALfloat ypo const auto Frequency = static_cast<ALfloat>(Device->Frequency); const ALuint NumSends{Device->NumAuxSends}; - DirectMode DirectChannels{props->DirectChannels}; const ALuint num_channels{voice->mNumChannels}; + ASSUME(num_channels > 0); + + auto clear_target = [NumSends](ALvoice::ChannelData &chandata) -> void + { + chandata.mDryParams.Hrtf.Target = HrtfFilter{}; + chandata.mDryParams.Gains.Target.fill(0.0f); + std::for_each(chandata.mWetParams.begin(), chandata.mWetParams.begin()+NumSends, + [](SendParams ¶ms) -> void { params.Gains.Target.fill(0.0f); }); + }; + std::for_each(voice->mChans.begin(), voice->mChans.begin()+num_channels, clear_target); + + DirectMode DirectChannels{props->DirectChannels}; const ChanMap *chans{nullptr}; ALfloat downmix_gain{1.0f}; switch(voice->mFmtChannels) @@ -803,16 +814,6 @@ void CalcPanningAndFilters(ALvoice *voice, const ALfloat xpos, const ALfloat ypo DirectChannels = DirectMode::Off; break; } - ASSUME(num_channels > 0); - - std::for_each(voice->mChans.begin(), voice->mChans.begin()+num_channels, - [NumSends](ALvoice::ChannelData &chandata) -> void - { - chandata.mDryParams.Hrtf.Target = HrtfFilter{}; - chandata.mDryParams.Gains.Target.fill(0.0f); - std::for_each(chandata.mWetParams.begin(), chandata.mWetParams.begin()+NumSends, - [](SendParams ¶ms) -> void { params.Gains.Target.fill(0.0f); }); - }); voice->mFlags &= ~(VOICE_HAS_HRTF | VOICE_HAS_NFC); if(voice->mFmtChannels == FmtBFormat2D || voice->mFmtChannels == FmtBFormat3D) |