78e7c1c27b
Code provided by Mike Gorchak
66 lines
1.7 KiB
C
66 lines
1.7 KiB
C
#ifndef _AL_AUXEFFECTSLOT_H_
|
|
#define _AL_AUXEFFECTSLOT_H_
|
|
|
|
#include "alMain.h"
|
|
#include "alEffect.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
typedef struct ALeffectState {
|
|
ALvoid (*Destroy)(struct ALeffectState *State);
|
|
ALboolean (*DeviceUpdate)(struct ALeffectState *State, ALCdevice *Device);
|
|
ALvoid (*Update)(struct ALeffectState *State, ALCdevice *Device, const struct ALeffectslot *Slot);
|
|
ALvoid (*Process)(struct ALeffectState *State, ALuint SamplesToDo, const ALfloat *RESTRICT SamplesIn, ALfloat (*RESTRICT SamplesOut)[BUFFERSIZE]);
|
|
} ALeffectState;
|
|
|
|
|
|
typedef struct ALeffectslot
|
|
{
|
|
ALeffect effect;
|
|
|
|
volatile ALfloat Gain;
|
|
volatile ALboolean AuxSendAuto;
|
|
|
|
volatile ALenum NeedsUpdate;
|
|
ALeffectState *EffectState;
|
|
|
|
ALIGN(16) ALfloat WetBuffer[1][BUFFERSIZE];
|
|
|
|
ALfloat ClickRemoval[1];
|
|
ALfloat PendingClicks[1];
|
|
|
|
RefCount ref;
|
|
|
|
/* Self ID */
|
|
ALuint id;
|
|
} ALeffectslot;
|
|
|
|
|
|
ALenum InitEffectSlot(ALeffectslot *slot);
|
|
ALvoid ReleaseALAuxiliaryEffectSlots(ALCcontext *Context);
|
|
|
|
ALeffectState *NoneCreate(void);
|
|
ALeffectState *ReverbCreate(void);
|
|
ALeffectState *EchoCreate(void);
|
|
ALeffectState *ModulatorCreate(void);
|
|
ALeffectState *DedicatedCreate(void);
|
|
ALeffectState *ChorusCreate(void);
|
|
ALeffectState *FlangerCreate(void);
|
|
ALeffectState *EqualizerCreate(void);
|
|
ALeffectState *DistortionCreate(void);
|
|
|
|
#define ALeffectState_Destroy(a) ((a)->Destroy((a)))
|
|
#define ALeffectState_DeviceUpdate(a,b) ((a)->DeviceUpdate((a),(b)))
|
|
#define ALeffectState_Update(a,b,c) ((a)->Update((a),(b),(c)))
|
|
#define ALeffectState_Process(a,b,c,d) ((a)->Process((a),(b),(c),(d)))
|
|
|
|
ALenum InitializeEffect(ALCdevice *Device, ALeffectslot *EffectSlot, ALeffect *effect);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|