Store the effect's output buffer in the effect state

This commit is contained in:
Chris Robinson
2016-03-17 10:10:26 -07:00
parent 606402fff0
commit ce575718ef
4 changed files with 16 additions and 6 deletions
+6 -1
View File
@@ -2170,6 +2170,8 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
{
ALeffectslot *slot = context->EffectSlotMap.array[pos].value;
slot->EffectState->OutBuffer = device->Dry.Buffer;
slot->EffectState->OutChannels = device->Dry.NumChannels;
if(V(slot->EffectState,deviceUpdate)(device) == AL_FALSE)
{
UnlockUIntMapRead(&context->EffectSlotMap);
@@ -2217,8 +2219,11 @@ static ALCenum UpdateDeviceParams(ALCdevice *device, const ALCint *attrList)
if(device->DefaultSlot)
{
ALeffectslot *slot = device->DefaultSlot;
ALeffectState *state = slot->EffectState;
if(V(slot->EffectState,deviceUpdate)(device) == AL_FALSE)
state->OutBuffer = device->Dry.Buffer;
state->OutChannels = device->Dry.NumChannels;
if(V(state,deviceUpdate)(device) == AL_FALSE)
{
V0(device->Backend,unlock)();
RestoreFPUMode(&oldMode);
+5 -5
View File
@@ -1417,8 +1417,8 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
{
const ALeffectslot *slot = VECTOR_ELEM(ctx->ActiveAuxSlots, i);
ALeffectState *state = slot->EffectState;
V(state,process)(SamplesToDo, slot->WetBuffer, device->Dry.Buffer,
device->Dry.NumChannels);
V(state,process)(SamplesToDo, slot->WetBuffer, state->OutBuffer,
state->OutChannels);
}
ctx = ctx->next;
@@ -1428,8 +1428,8 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
{
const ALeffectslot *slot = device->DefaultSlot;
ALeffectState *state = slot->EffectState;
V(state,process)(SamplesToDo, slot->WetBuffer, device->Dry.Buffer,
device->Dry.NumChannels);
V(state,process)(SamplesToDo, slot->WetBuffer, state->OutBuffer,
state->OutChannels);
}
/* Increment the clock time. Every second's worth of samples is
@@ -1503,7 +1503,7 @@ ALvoid aluMixData(ALCdevice *device, ALvoid *buffer, ALsizei size)
if(buffer)
{
ALfloat (*OutBuffer)[BUFFERSIZE] = device->RealOut.Buffer;
ALuint OutChannels = device->RealOut.NumChannels;;
ALuint OutChannels = device->RealOut.NumChannels;
#define WRITE(T, a, b, c, d) do { \
Write_##T((a), (b), (c), (d)); \
+3
View File
@@ -15,6 +15,9 @@ struct ALeffectslot;
typedef struct ALeffectState {
const struct ALeffectStateVtable *vtbl;
ALfloat (*OutBuffer)[BUFFERSIZE];
ALuint OutChannels;
} ALeffectState;
struct ALeffectStateVtable {
+2
View File
@@ -464,6 +464,8 @@ ALenum InitializeEffect(ALCdevice *Device, ALeffectslot *EffectSlot, ALeffect *e
SetMixerFPUMode(&oldMode);
ALCdevice_Lock(Device);
State->OutBuffer = Device->Dry.Buffer;
State->OutChannels = Device->Dry.NumChannels;
if(V(State,deviceUpdate)(Device) == AL_FALSE)
{
ALCdevice_Unlock(Device);