aboutsummaryrefslogtreecommitdiffstats
path: root/alc/alu.cpp
diff options
context:
space:
mode:
authorChris Robinson <chris.kcat@gmail.com>2020-02-08 18:10:59 -0800
committerChris Robinson <chris.kcat@gmail.com>2020-02-08 18:10:59 -0800
commit85395b23a4861da370565051d49617c81d617b1e (patch)
tree022a5c872a9eedd030bd3840ef0d4afa130f106c /alc/alu.cpp
parent3ee0906c81e3af184c7be5029fdfc5c0b4703179 (diff)
Clear voice target gains earlier
Diffstat (limited to 'alc/alu.cpp')
-rw-r--r--alc/alu.cpp23
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 &params) -> 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 &params) -> void { params.Gains.Target.fill(0.0f); });
- });
voice->mFlags &= ~(VOICE_HAS_HRTF | VOICE_HAS_NFC);
if(voice->mFmtChannels == FmtBFormat2D || voice->mFmtChannels == FmtBFormat3D)