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