aboutsummaryrefslogtreecommitdiffstats
path: root/Alc/effects/reverb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Alc/effects/reverb.cpp')
-rw-r--r--Alc/effects/reverb.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/Alc/effects/reverb.cpp b/Alc/effects/reverb.cpp
index a84749d8..574f9e7f 100644
--- a/Alc/effects/reverb.cpp
+++ b/Alc/effects/reverb.cpp
@@ -337,7 +337,7 @@ struct ReverbState final : public EffectState {
ALboolean deviceUpdate(const ALCdevice *device) override;
- void update(const ALCcontext *context, const ALeffectslot *slot, const ALeffectProps *props) override;
+ void update(const ALCcontext *context, const ALeffectslot *slot, const ALeffectProps *props, const EffectTarget target) override;
void process(ALsizei samplesToDo, const ALfloat (*RESTRICT samplesIn)[BUFFERSIZE], ALfloat (*RESTRICT samplesOut)[BUFFERSIZE], ALsizei numChannels) override;
DEF_NEWDEL(ReverbState)
@@ -763,7 +763,7 @@ alu::Matrix GetTransformFromVector(const ALfloat *vec)
}
/* Update the early and late 3D panning gains. */
-ALvoid Update3DPanning(const ALCdevice *Device, const ALfloat *ReflectionsPan, const ALfloat *LateReverbPan, const ALfloat earlyGain, const ALfloat lateGain, ALeffectslot *target, ReverbState *State)
+ALvoid Update3DPanning(const ALfloat *ReflectionsPan, const ALfloat *LateReverbPan, const ALfloat earlyGain, const ALfloat lateGain, const EffectTarget &target, ReverbState *State)
{
/* Note: ret is transposed. */
auto MatrixMult = [](const alu::Matrix &m1, const alu::Matrix &m2) noexcept -> alu::Matrix
@@ -783,28 +783,16 @@ ALvoid Update3DPanning(const ALCdevice *Device, const ALfloat *ReflectionsPan, c
*/
alu::Matrix earlymat{MatrixMult(GetTransformFromVector(ReflectionsPan), A2B)};
alu::Matrix latemat{MatrixMult(GetTransformFromVector(LateReverbPan), A2B)};
- if(target)
- {
- State->mOutBuffer = target->WetBuffer;
- State->mOutChannels = target->NumChannels;
- for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
- ComputePanGains(target, earlymat[i].data(), earlyGain, State->mEarly.PanGain[i]);
- for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
- ComputePanGains(target, latemat[i].data(), lateGain, State->mLate.PanGain[i]);
- }
- else
- {
- State->mOutBuffer = Device->FOAOut.Buffer;
- State->mOutChannels = Device->FOAOut.NumChannels;
- for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
- ComputePanGains(&Device->FOAOut, earlymat[i].data(), earlyGain,
- State->mEarly.PanGain[i]);
- for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
- ComputePanGains(&Device->FOAOut, latemat[i].data(), lateGain, State->mLate.PanGain[i]);
- }
+ State->mOutBuffer = target.FOAOut->Buffer;
+ State->mOutChannels = target.FOAOut->NumChannels;
+ for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
+ ComputePanGains(target.FOAOut, earlymat[i].data(), earlyGain,
+ State->mEarly.PanGain[i]);
+ for(ALsizei i{0};i < MAX_EFFECT_CHANNELS;i++)
+ ComputePanGains(target.FOAOut, latemat[i].data(), lateGain, State->mLate.PanGain[i]);
}
-void ReverbState::update(const ALCcontext *Context, const ALeffectslot *Slot, const ALeffectProps *props)
+void ReverbState::update(const ALCcontext *Context, const ALeffectslot *Slot, const ALeffectProps *props, const EffectTarget target)
{
const ALCdevice *Device{Context->Device};
const ALlistener &Listener = Context->Listener;
@@ -863,9 +851,8 @@ void ReverbState::update(const ALCcontext *Context, const ALeffectslot *Slot, co
/* Update early and late 3D panning. */
const ALfloat gain{props->Reverb.Gain * Slot->Params.Gain * ReverbBoost};
- Update3DPanning(Device, props->Reverb.ReflectionsPan, props->Reverb.LateReverbPan,
- props->Reverb.ReflectionsGain*gain, props->Reverb.LateReverbGain*gain,
- Slot->Params.Target, this);
+ Update3DPanning(props->Reverb.ReflectionsPan, props->Reverb.LateReverbPan,
+ props->Reverb.ReflectionsGain*gain, props->Reverb.LateReverbGain*gain, target, this);
/* Calculate the max update size from the smallest relevant delay. */
mMaxUpdate[1] = mini(MAX_UPDATE_SAMPLES, mini(mEarly.Offset[0][1], mLate.Offset[0][1]));