#ifndef _AL_AUXEFFECTSLOT_H_ #define _AL_AUXEFFECTSLOT_H_ #include "AL/al.h" #include "alEffect.h" #include "alFilter.h" #ifdef __cplusplus extern "C" { #endif typedef struct ALeffectState ALeffectState; typedef struct ALeffectslot { ALeffect effect; volatile ALfloat Gain; volatile ALboolean AuxSendAuto; volatile ALenum NeedsUpdate; ALeffectState *EffectState; ALfloat WetBuffer[BUFFERSIZE]; ALfloat ClickRemoval[1]; ALfloat PendingClicks[1]; RefCount ref; // Index to itself ALuint effectslot; struct ALeffectslot *next; } ALeffectslot; ALvoid ReleaseALAuxiliaryEffectSlots(ALCcontext *Context); struct ALeffectState { ALvoid (*Destroy)(ALeffectState *State); ALboolean (*DeviceUpdate)(ALeffectState *State, ALCdevice *Device); ALvoid (*Update)(ALeffectState *State, ALCcontext *Context, const ALeffectslot *Slot); ALvoid (*Process)(ALeffectState *State, ALuint SamplesToDo, const ALfloat *SamplesIn, ALfloat (*SamplesOut)[MAXCHANNELS]); }; ALeffectState *NoneCreate(void); ALeffectState *ReverbCreate(void); ALeffectState *EchoCreate(void); ALeffectState *ModulatorCreate(void); ALeffectState *DedicatedCreate(void); #define ALEffect_Destroy(a) ((a)->Destroy((a))) #define ALEffect_DeviceUpdate(a,b) ((a)->DeviceUpdate((a),(b))) #define ALEffect_Update(a,b,c) ((a)->Update((a),(b),(c))) #define ALEffect_Process(a,b,c,d) ((a)->Process((a),(b),(c),(d))) #ifdef __cplusplus } #endif #endif