Avoid accessing source properties more than once when updating parameters

This commit is contained in:
Chris Robinson
2011-07-01 01:46:56 -07:00
parent aea2868ce1
commit 048aee66cf
+11 -6
View File
@@ -373,6 +373,8 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
ALfloat DryGainHF;
ALfloat WetGain[MAX_SENDS];
ALfloat WetGainHF[MAX_SENDS];
ALboolean WetGainAuto;
ALboolean WetGainHFAuto;
ALfloat Pitch;
ALuint Frequency;
ALint NumSends;
@@ -407,6 +409,8 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
Rolloff = ALSource->flRollOffFactor;
InnerAngle = ALSource->flInnerAngle * ConeScale;
OuterAngle = ALSource->flOuterAngle * ConeScale;
WetGainAuto = ALSource->WetGainAuto;
WetGainHFAuto = ALSource->WetGainHFAuto;
AirAbsorptionFactor = ALSource->AirAbsorptionFactor;
//1. Translate Listener to origin (convert to head relative)
@@ -586,9 +590,9 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
if(Slot->AuxSendAuto)
{
WetGain[i] = SourceVolume * RoomAttenuation[i];
if(ALSource->WetGainAuto)
if(WetGainAuto)
WetGain[i] *= ConeVolume;
if(ALSource->WetGainHFAuto)
if(WetGainHFAuto)
WetGainHF[i] *= ConeHF;
// Clamp to Min/Max Gain
@@ -605,10 +609,11 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
* distance, the initial decay of the reverb effect is
* calculated and applied to the wet path.
*/
WetGain[i] *= aluPow(10.0f, EffectiveDist /
(SPEEDOFSOUNDMETRESPERSEC *
Slot->effect.Params.Reverb.DecayTime) *
(-60.0/20.0));
if(WetGainAuto)
WetGain[i] *= aluPow(10.0f, EffectiveDist /
(SPEEDOFSOUNDMETRESPERSEC *
Slot->effect.Params.Reverb.DecayTime) *
(-60.0/20.0));
WetGainHF[i] *= aluPow(Slot->effect.Params.Reverb.AirAbsorptionGainHF,
AirAbsorptionFactor * EffectiveDist);