Use a separate list for NULL-device extensions
[openal-soft.git] / OpenAL32 / Include / alAuxEffectSlot.h
blob21202f69c11dd667aa138ae1f6be6b7c3885d17f
1 #ifndef _AL_AUXEFFECTSLOT_H_
2 #define _AL_AUXEFFECTSLOT_H_
4 #include "AL/al.h"
5 #include "alEffect.h"
6 #include "alFilter.h"
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
12 typedef struct ALeffectState ALeffectState;
14 typedef struct ALeffectslot
16 ALeffect effect;
18 ALfloat Gain;
19 ALboolean AuxSendAuto;
21 ALeffectState *EffectState;
23 ALfloat WetBuffer[BUFFERSIZE];
25 ALuint refcount;
27 // Index to itself
28 ALuint effectslot;
30 struct ALeffectslot *next;
31 } ALeffectslot;
33 ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
34 ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots);
35 ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot);
37 ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue);
38 ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
39 ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue);
40 ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
42 ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue);
43 ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues);
44 ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue);
45 ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues);
47 ALvoid ReleaseALAuxiliaryEffectSlots(ALCcontext *Context);
50 struct ALeffectState {
51 ALvoid (*Destroy)(ALeffectState *State);
52 ALboolean (*DeviceUpdate)(ALeffectState *State, ALCdevice *Device);
53 ALvoid (*Update)(ALeffectState *State, ALCcontext *Context, const ALeffect *Effect);
54 ALvoid (*Process)(ALeffectState *State, const ALeffectslot *Slot, ALuint SamplesToDo, const ALfloat *SamplesIn, ALfloat (*SamplesOut)[OUTPUTCHANNELS]);
57 ALeffectState *NoneCreate(void);
58 ALeffectState *EAXVerbCreate(void);
59 ALeffectState *VerbCreate(void);
60 ALeffectState *EchoCreate(void);
62 #define ALEffect_Destroy(a) ((a)->Destroy((a)))
63 #define ALEffect_DeviceUpdate(a,b) ((a)->DeviceUpdate((a),(b)))
64 #define ALEffect_Update(a,b,c) ((a)->Update((a),(b),(c)))
65 #define ALEffect_Process(a,b,c,d,e) ((a)->Process((a),(b),(c),(d),(e)))
68 #ifdef __cplusplus
70 #endif
72 #endif