From 847b3e8b618466780459d0875a0f6a0c77dee953 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 18 Feb 2008 21:58:58 -0800 Subject: Preserve data and position when reallocating the reverb effect Still not perfect, but better for when the size doesn't change --- OpenAL32/alAuxEffectSlot.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'OpenAL32') diff --git a/OpenAL32/alAuxEffectSlot.c b/OpenAL32/alAuxEffectSlot.c index f80c31a0..7f073435 100644 --- a/OpenAL32/alAuxEffectSlot.c +++ b/OpenAL32/alAuxEffectSlot.c @@ -493,16 +493,20 @@ static ALvoid InitializeEffect(ALCcontext *Context, ALeffectslot *ALEffectSlot, alSetError(AL_OUT_OF_MEMORY); return; } + if(ALEffectSlot->ReverbBuffer) + memcpy(ptr, ALEffectSlot->ReverbBuffer, min(size, ALEffectSlot->ReverbLength)*sizeof(ALfloat)); ALEffectSlot->ReverbLength = size; - ALEffectSlot->ReverbPos = 0; + ALEffectSlot->ReverbPos %= size; ALEffectSlot->ReverbReflectPos = (ALuint)(ALEffectSlot->ReverbLength - ((ALfloat)Context->Frequency * - effect->Reverb.ReflectionsDelay)) % + effect->Reverb.ReflectionsDelay) + + ALEffectSlot->ReverbPos) % ALEffectSlot->ReverbLength; ALEffectSlot->ReverbLatePos = (ALuint)(ALEffectSlot->ReverbLength - ((ALfloat)Context->Frequency * (effect->Reverb.LateReverbDelay + - effect->Reverb.ReflectionsDelay))) % + effect->Reverb.ReflectionsDelay)) + + ALEffectSlot->ReverbPos) % ALEffectSlot->ReverbLength; ALEffectSlot->ReverbDecayGain = pow(1.0/32768.0, 1.0/(effect->Reverb.DecayTime/reverbwait)); } -- cgit v1.2.3