From 85395b23a4861da370565051d49617c81d617b1e Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Sat, 8 Feb 2020 18:10:59 -0800 Subject: Clear voice target gains earlier --- alc/alu.cpp | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'alc/alu.cpp') 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(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) -- cgit v1.2.3