Move the step counter and moving flag to DirectParams
This commit is contained in:
@@ -438,6 +438,8 @@ ALvoid CalcNonAttnSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
}
|
||||
}
|
||||
}
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_TRUE;
|
||||
src->DryMix = SelectDirectMixer();
|
||||
}
|
||||
else if(Device->Hrtf)
|
||||
@@ -465,7 +467,8 @@ ALvoid CalcNonAttnSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
src->Direct.Mix.Hrtf.Params.Delay[c]);
|
||||
}
|
||||
}
|
||||
src->Direct.Mix.Hrtf.State.Counter = 0;
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_TRUE;
|
||||
src->Direct.Mix.Hrtf.Params.IrSize = GetHrtfIrSize(Device->Hrtf);
|
||||
|
||||
src->DryMix = SelectHrtfMixer();
|
||||
@@ -491,6 +494,8 @@ ALvoid CalcNonAttnSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
ComputeAngleGains(Device, chans[c].angle, hwidth, DryGain,
|
||||
SrcMatrix[c]);
|
||||
}
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_TRUE;
|
||||
src->DryMix = SelectDirectMixer();
|
||||
}
|
||||
for(i = 0;i < NumSends;i++)
|
||||
@@ -872,7 +877,7 @@ ALvoid CalcSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
}
|
||||
|
||||
/* Check to see if the HRIR is already moving. */
|
||||
if(src->Direct.Mix.Hrtf.State.Moving)
|
||||
if(src->Direct.Moving)
|
||||
{
|
||||
/* Calculate the normalized HRTF transition factor (delta). */
|
||||
delta = CalcHrtfDelta(src->Direct.Mix.Hrtf.Params.Gain, DryGain,
|
||||
@@ -883,12 +888,12 @@ ALvoid CalcSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
{
|
||||
ALuint counter = GetMovingHrtfCoeffs(Device->Hrtf,
|
||||
ev, az, DryGain, delta,
|
||||
src->Direct.Mix.Hrtf.State.Counter,
|
||||
src->Direct.Counter,
|
||||
src->Direct.Mix.Hrtf.Params.Coeffs[0],
|
||||
src->Direct.Mix.Hrtf.Params.Delay[0],
|
||||
src->Direct.Mix.Hrtf.Params.CoeffStep,
|
||||
src->Direct.Mix.Hrtf.Params.DelayStep);
|
||||
src->Direct.Mix.Hrtf.State.Counter = counter;
|
||||
src->Direct.Counter = counter;
|
||||
src->Direct.Mix.Hrtf.Params.Gain = DryGain;
|
||||
src->Direct.Mix.Hrtf.Params.Dir[0] = Position[0];
|
||||
src->Direct.Mix.Hrtf.Params.Dir[1] = Position[1];
|
||||
@@ -901,8 +906,8 @@ ALvoid CalcSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
GetLerpedHrtfCoeffs(Device->Hrtf, ev, az, DryGain,
|
||||
src->Direct.Mix.Hrtf.Params.Coeffs[0],
|
||||
src->Direct.Mix.Hrtf.Params.Delay[0]);
|
||||
src->Direct.Mix.Hrtf.State.Counter = 0;
|
||||
src->Direct.Mix.Hrtf.State.Moving = AL_TRUE;
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_TRUE;
|
||||
src->Direct.Mix.Hrtf.Params.Gain = DryGain;
|
||||
src->Direct.Mix.Hrtf.Params.Dir[0] = Position[0];
|
||||
src->Direct.Mix.Hrtf.Params.Dir[1] = Position[1];
|
||||
@@ -945,6 +950,10 @@ ALvoid CalcSourceParams(ALactivesource *src, const ALCcontext *ALContext)
|
||||
enum Channel chan = Device->Speaker2Chan[i];
|
||||
Matrix[0][chan] = maxf(Matrix[0][chan], AmbientGain);
|
||||
}
|
||||
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_TRUE;
|
||||
|
||||
src->DryMix = SelectDirectMixer();
|
||||
}
|
||||
for(i = 0;i < NumSends;i++)
|
||||
|
||||
+3
-3
@@ -413,10 +413,10 @@ ALvoid MixSource(ALactivesource *src, ALCdevice *Device, ALuint SamplesToDo)
|
||||
Source->position_fraction = DataPosFrac;
|
||||
src->Direct.Mix.Hrtf.State.Offset += OutPos;
|
||||
if(State == AL_PLAYING)
|
||||
src->Direct.Mix.Hrtf.State.Counter = maxu(src->Direct.Mix.Hrtf.State.Counter, OutPos) - OutPos;
|
||||
src->Direct.Counter = maxu(src->Direct.Counter, OutPos) - OutPos;
|
||||
else
|
||||
{
|
||||
src->Direct.Mix.Hrtf.State.Counter = 0;
|
||||
src->Direct.Mix.Hrtf.State.Moving = AL_FALSE;
|
||||
src->Direct.Counter = 0;
|
||||
src->Direct.Moving = AL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -43,8 +43,8 @@ void MixDirect_Hrtf(DirectParams *params, const ALfloat *restrict data, ALuint s
|
||||
const ALuint *restrict TargetDelay = params->Mix.Hrtf.Params.Delay[srcchan];
|
||||
ALfloat *restrict History = params->Mix.Hrtf.State.History[srcchan];
|
||||
ALfloat (*restrict Values)[2] = params->Mix.Hrtf.State.Values[srcchan];
|
||||
ALint Counter = maxu(params->Mix.Hrtf.State.Counter, OutPos) - OutPos;
|
||||
ALuint Offset = params->Mix.Hrtf.State.Offset + OutPos;
|
||||
ALint Counter = maxu(params->Counter, OutPos) - OutPos;
|
||||
ALIGN(16) ALfloat Coeffs[HRIR_LENGTH][2];
|
||||
ALuint Delay[2];
|
||||
ALfloat left, right;
|
||||
|
||||
@@ -38,8 +38,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct HrtfState {
|
||||
ALboolean Moving;
|
||||
ALuint Counter;
|
||||
ALIGN(16) ALfloat History[MAX_INPUT_CHANNELS][SRC_HISTORY_LENGTH];
|
||||
ALIGN(16) ALfloat Values[MAX_INPUT_CHANNELS][HRIR_LENGTH][2];
|
||||
ALuint Offset;
|
||||
@@ -71,6 +69,10 @@ typedef struct DirectParams {
|
||||
* channel target (eg. FrontLeft). Not used with HRTF. */
|
||||
ALfloat Gains[MAX_INPUT_CHANNELS][MaxChannels];
|
||||
} Mix;
|
||||
/* If not 'moving', gain/coefficients are set directly without fading. */
|
||||
ALboolean Moving;
|
||||
/* Stepping counter for gain/coefficient fading. */
|
||||
ALuint Counter;
|
||||
|
||||
ALfilterState LpFilter[MAX_INPUT_CHANNELS];
|
||||
} DirectParams;
|
||||
|
||||
+2
-2
@@ -2339,8 +2339,8 @@ ALvoid SetSourceState(ALsource *Source, ALCcontext *Context, ALenum state)
|
||||
}
|
||||
else
|
||||
{
|
||||
src->Direct.Mix.Hrtf.State.Moving = AL_FALSE;
|
||||
src->Direct.Mix.Hrtf.State.Counter = 0;
|
||||
src->Direct.Moving = AL_FALSE;
|
||||
src->Direct.Counter = 0;
|
||||
for(j = 0;j < MAX_INPUT_CHANNELS;j++)
|
||||
{
|
||||
for(k = 0;k < SRC_HISTORY_LENGTH;k++)
|
||||
|
||||
Reference in New Issue
Block a user