summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2009-05-26 09:23:49 -0700
committerChris Robinson <[email protected]>2009-05-26 09:23:49 -0700
commit923af8c3a6626a43f7564afe0de61fcd55f2fce1 (patch)
treeb6c974ed073a0b165af08c030930fd62c3d6fa4f
parentac04cf57fa99838d0914b3699d2faaf28485cacd (diff)
Don't update the source's gains in the sample mixing loop
Update copies stored on the stack instead, then update the source after mixing
-rw-r--r--Alc/ALu.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/Alc/ALu.c b/Alc/ALu.c
index a875e204..f00fdafa 100644
--- a/Alc/ALu.c
+++ b/Alc/ALu.c
@@ -852,12 +852,10 @@ ALvoid aluMixData(ALCcontext *ALContext,ALvoid *buffer,ALsizei size,ALenum forma
static float DummyBuffer[BUFFERSIZE];
ALfloat *WetBuffer[MAX_SENDS];
ALfloat (*Matrix)[OUTPUTCHANNELS] = ALContext->ChannelMatrix;
- ALfloat newDrySend[OUTPUTCHANNELS] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
- ALfloat newWetSend[MAX_SENDS];
+ ALfloat DrySend[OUTPUTCHANNELS] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f };
+ ALfloat WetSend[MAX_SENDS];
ALfloat DryGainHF = 0.0f;
ALfloat WetGainHF[MAX_SENDS];
- ALfloat *DrySend;
- ALfloat *WetSend;
ALuint rampLength;
ALfloat dryGainStep[OUTPUTCHANNELS];
ALfloat wetGainStep[MAX_SENDS];
@@ -958,12 +956,10 @@ ALvoid aluMixData(ALCcontext *ALContext,ALvoid *buffer,ALsizei size,ALenum forma
ALSource->Send[i].Slot->WetBuffer :
DummyBuffer);
}
- DrySend = ALSource->DryGains;
- WetSend = ALSource->WetGains;
CalcSourceParams(ALContext, ALSource,
(Channels==1) ? AL_TRUE : AL_FALSE,
- newDrySend, newWetSend, &Pitch,
+ DrySend, WetSend, &Pitch,
&DryGainHF, WetGainHF);
Pitch = (Pitch*Frequency) / ALContext->Frequency;
@@ -1029,22 +1025,22 @@ ALvoid aluMixData(ALCcontext *ALContext,ALvoid *buffer,ALsizei size,ALenum forma
if(ALSource->FirstStart && DataPosInt == 0 && DataPosFrac == 0)
{
for(i = 0;i < OUTPUTCHANNELS;i++)
- {
- DrySend[i] = newDrySend[i];
dryGainStep[i] = 0;
- }
for(i = 0;i < MAX_SENDS;i++)
- {
- WetSend[i] = newWetSend[i];
wetGainStep[i] = 0;
- }
}
else
{
for(i = 0;i < OUTPUTCHANNELS;i++)
- dryGainStep[i] = (newDrySend[i]-DrySend[i]) / rampLength;
+ {
+ dryGainStep[i] = (DrySend[i]-ALSource->DryGains[i]) / rampLength;
+ DrySend[i] = ALSource->DryGains[i];
+ }
for(i = 0;i < MAX_SENDS;i++)
- wetGainStep[i] = (newWetSend[i]-WetSend[i]) / rampLength;
+ {
+ wetGainStep[i] = (WetSend[i]-ALSource->WetGains[i]) / rampLength;
+ WetSend[i] = ALSource->WetGains[i];
+ }
}
ALSource->FirstStart = AL_FALSE;
@@ -1233,6 +1229,10 @@ ALvoid aluMixData(ALCcontext *ALContext,ALvoid *buffer,ALsizei size,ALenum forma
//Update source info
ALSource->position = DataPosInt;
ALSource->position_fraction = DataPosFrac;
+ for(i = 0;i < OUTPUTCHANNELS;i++)
+ ALSource->DryGains[i] = DrySend[i];
+ for(i = 0;i < MAX_SENDS;i++)
+ ALSource->WetGains[i] = WetSend[i];
skipmix: ;
}