Store the original pre-clamped distance instead of re-computing it
This commit is contained in:
parent
5170e251f9
commit
1694e5bd12
@ -408,7 +408,7 @@ ALvoid aluInitPanning(ALCcontext *Context)
|
|||||||
static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource,
|
static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource,
|
||||||
ALboolean isMono)
|
ALboolean isMono)
|
||||||
{
|
{
|
||||||
ALfloat InnerAngle,OuterAngle,Angle,Distance,DryMix;
|
ALfloat InnerAngle,OuterAngle,Angle,Distance,DryMix,OrigDist;
|
||||||
ALfloat Direction[3],Position[3],SourceToListener[3];
|
ALfloat Direction[3],Position[3],SourceToListener[3];
|
||||||
ALfloat Velocity[3],ListenerVel[3];
|
ALfloat Velocity[3],ListenerVel[3];
|
||||||
ALfloat MinVolume,MaxVolume,MinDist,MaxDist,Rolloff,OuterGainHF;
|
ALfloat MinVolume,MaxVolume,MinDist,MaxDist,Rolloff,OuterGainHF;
|
||||||
@ -584,6 +584,7 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource,
|
|||||||
|
|
||||||
//2. Calculate distance attenuation
|
//2. Calculate distance attenuation
|
||||||
Distance = aluSqrt(aluDotproduct(Position, Position));
|
Distance = aluSqrt(aluDotproduct(Position, Position));
|
||||||
|
OrigDist = Distance;
|
||||||
|
|
||||||
flAttenuation = 1.0f;
|
flAttenuation = 1.0f;
|
||||||
for(i = 0;i < NumSends;i++)
|
for(i = 0;i < NumSends;i++)
|
||||||
@ -808,9 +809,7 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource,
|
|||||||
ALSource->Params.Pitch = ALSource->flPitch;
|
ALSource->Params.Pitch = ALSource->flPitch;
|
||||||
|
|
||||||
// Use energy-preserving panning algorithm for multi-speaker playback
|
// Use energy-preserving panning algorithm for multi-speaker playback
|
||||||
length = aluSqrt(Position[0]*Position[0] + Position[1]*Position[1] +
|
length = __max(OrigDist, MinDist);
|
||||||
Position[2]*Position[2]);
|
|
||||||
length = __max(length, MinDist);
|
|
||||||
if(length > 0.0f)
|
if(length > 0.0f)
|
||||||
{
|
{
|
||||||
ALfloat invlen = 1.0f/length;
|
ALfloat invlen = 1.0f/length;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user