Store and use the send slot in the source params

This commit is contained in:
Chris Robinson 2011-07-05 14:14:20 -07:00
parent 21574f7e16
commit 75fa891e0a
3 changed files with 16 additions and 10 deletions

View File

@ -323,8 +323,11 @@ ALvoid CalcNonAttnSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
}
}
for(i = 0;i < NumSends;i++)
{
ALSource->Params.Send[i].Slot = ALSource->Send[i].Slot;
ALSource->Params.Send[i].WetGain = WetGain[i] * ListenerGain /
ALSource->NumChannels;
}
/* Update filter coefficients. Calculations based on the I3DL2
* spec. */
@ -444,6 +447,8 @@ ALvoid CalcSourceParams(ALsource *ALSource, const ALCcontext *ALContext)
WetGainAuto = AL_TRUE;
WetGainHFAuto = DryGainHFAuto;
}
ALSource->Params.Send[i].Slot = Slot;
}
//1. Translate Listener to origin (convert to head relative)

View File

@ -168,19 +168,19 @@ static void Mix_Hrtf_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
\
for(out = 0;out < Device->NumAuxSends;out++) \
{ \
ALeffectslot *Slot = Source->Params.Send[i].Slot; \
ALfloat WetSend; \
ALfloat *RESTRICT WetBuffer; \
ALfloat *RESTRICT WetClickRemoval; \
ALfloat *RESTRICT WetPendingClicks; \
FILTER *WetFilter; \
\
if(!Source->Send[out].Slot || \
Source->Send[out].Slot->effect.type == AL_EFFECT_NULL) \
if(!Slot || Slot->effect.type == AL_EFFECT_NULL) \
continue; \
\
WetBuffer = Source->Send[out].Slot->WetBuffer; \
WetClickRemoval = Source->Send[out].Slot->ClickRemoval; \
WetPendingClicks = Source->Send[out].Slot->PendingClicks; \
WetBuffer = Slot->WetBuffer; \
WetClickRemoval = Slot->ClickRemoval; \
WetPendingClicks = Slot->PendingClicks; \
WetFilter = &Source->Params.Send[out].iirFilter; \
WetSend = Source->Params.Send[out].WetGain; \
\
@ -308,19 +308,19 @@ static void Mix_##T##_##sampler(ALsource *Source, ALCdevice *Device, \
\
for(out = 0;out < Device->NumAuxSends;out++) \
{ \
ALeffectslot *Slot = Source->Params.Send[i].Slot; \
ALfloat WetSend; \
ALfloat *WetBuffer; \
ALfloat *WetClickRemoval; \
ALfloat *WetPendingClicks; \
FILTER *WetFilter; \
\
if(!Source->Send[out].Slot || \
Source->Send[out].Slot->effect.type == AL_EFFECT_NULL) \
if(!Slot || Slot->effect.type == AL_EFFECT_NULL) \
continue; \
\
WetBuffer = Source->Send[out].Slot->WetBuffer; \
WetClickRemoval = Source->Send[out].Slot->ClickRemoval; \
WetPendingClicks = Source->Send[out].Slot->PendingClicks; \
WetBuffer = Slot->WetBuffer; \
WetClickRemoval = Slot->ClickRemoval; \
WetPendingClicks = Slot->PendingClicks; \
WetFilter = &Source->Params.Send[out].iirFilter; \
WetSend = Source->Params.Send[out].WetGain; \
\

View File

@ -108,6 +108,7 @@ typedef struct ALsource
ALfloat history[MAXCHANNELS*2];
struct {
struct ALeffectslot *Slot;
ALfloat WetGain;
FILTER iirFilter;
ALfloat history[MAXCHANNELS];