Store air absorption factor locally

This commit is contained in:
Chris Robinson 2010-09-12 00:10:33 -07:00
parent 8953a73fb1
commit 8a0e15ff37

View File

@ -264,6 +264,7 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
ALfloat MinVolume,MaxVolume,MinDist,MaxDist,Rolloff,OuterGainHF; ALfloat MinVolume,MaxVolume,MinDist,MaxDist,Rolloff,OuterGainHF;
ALfloat ConeVolume,ConeHF,SourceVolume,ListenerGain; ALfloat ConeVolume,ConeHF,SourceVolume,ListenerGain;
ALfloat DopplerFactor, DopplerVelocity, flSpeedOfSound; ALfloat DopplerFactor, DopplerVelocity, flSpeedOfSound;
ALfloat AirAbsorptionFactor;
ALbufferlistitem *BufferListItem; ALbufferlistitem *BufferListItem;
ALfloat Matrix[4][4]; ALfloat Matrix[4][4];
ALfloat flAttenuation, effectiveDist; ALfloat flAttenuation, effectiveDist;
@ -310,6 +311,7 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
InnerAngle = ALSource->flInnerAngle; InnerAngle = ALSource->flInnerAngle;
OuterAngle = ALSource->flOuterAngle; OuterAngle = ALSource->flOuterAngle;
OuterGainHF = ALSource->OuterGainHF; OuterGainHF = ALSource->OuterGainHF;
AirAbsorptionFactor = ALSource->AirAbsorptionFactor;
//1. Translate Listener to origin (convert to head relative) //1. Translate Listener to origin (convert to head relative)
if(ALSource->bHeadRelative==AL_FALSE) if(ALSource->bHeadRelative==AL_FALSE)
@ -432,12 +434,12 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
effectiveDist = (MinDist/flAttenuation - MinDist)*MetersPerUnit; effectiveDist = (MinDist/flAttenuation - MinDist)*MetersPerUnit;
// Distance-based air absorption // Distance-based air absorption
if(ALSource->AirAbsorptionFactor > 0.0f && effectiveDist > 0.0f) if(AirAbsorptionFactor > 0.0f && effectiveDist > 0.0f)
{ {
ALfloat absorb; ALfloat absorb;
// Absorption calculation is done in dB // Absorption calculation is done in dB
absorb = (ALSource->AirAbsorptionFactor*AIRABSORBGAINDBHF) * absorb = (AirAbsorptionFactor*AIRABSORBGAINDBHF) *
effectiveDist; effectiveDist;
// Convert dB to linear gain before applying // Convert dB to linear gain before applying
absorb = aluPow(10.0f, absorb/20.0f); absorb = aluPow(10.0f, absorb/20.0f);
@ -525,7 +527,7 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
WetGainHF[i] *= aluPow(10.0f, WetGainHF[i] *= aluPow(10.0f,
log10(Slot->effect.Reverb.AirAbsorptionGainHF) * log10(Slot->effect.Reverb.AirAbsorptionGainHF) *
ALSource->AirAbsorptionFactor * effectiveDist); AirAbsorptionFactor * effectiveDist);
} }
} }
else else