cEFXFunctions.h
00001
00002
00003
00004
00005 #ifndef CEFXFUNCTIONS_H
00006 #define CEFXFUNCTIONS_H
00007
00008 #include "../include/cAudioDefines.h"
00009
00010 #ifdef CAUDIO_EFX_ENABLED
00011
00012 #include <AL/al.h>
00013 #include <AL/alc.h>
00014 #include <AL/efx.h>
00015 #include <AL/efx-creative.h>
00016
00017 #include "../Headers/cMutex.h"
00018
00019
00020 #ifndef ALC_EXT_EFX
00021 #define AL_FILTER_TYPE 0x8001
00022 #define AL_EFFECT_TYPE 0x8001
00023 #define AL_FILTER_NULL 0x0000
00024 #define AL_FILTER_LOWPASS 0x0001
00025 #define AL_FILTER_HIGHPASS 0x0002
00026 #define AL_FILTER_BANDPASS 0x0003
00027 #define AL_EFFECT_NULL 0x0000
00028 #define AL_EFFECT_EAXREVERB 0x8000
00029 #define AL_EFFECT_REVERB 0x0001
00030 #define AL_EFFECT_CHORUS 0x0002
00031 #define AL_EFFECT_DISTORTION 0x0003
00032 #define AL_EFFECT_ECHO 0x0004
00033 #define AL_EFFECT_FLANGER 0x0005
00034 #define AL_EFFECT_FREQUENCY_SHIFTER 0x0006
00035 #define AL_EFFECT_VOCAL_MORPHER 0x0007
00036 #define AL_EFFECT_PITCH_SHIFTER 0x0008
00037 #define AL_EFFECT_RING_MODULATOR 0x0009
00038 #define AL_EFFECT_AUTOWAH 0x000A
00039 #define AL_EFFECT_COMPRESSOR 0x000B
00040 #define AL_EFFECT_EQUALIZER 0x000C
00041 #define ALC_EFX_MAJOR_VERSION 0x20001
00042 #define ALC_EFX_MINOR_VERSION 0x20002
00043 #define ALC_MAX_AUXILIARY_SENDS 0x20003
00044 #endif
00045
00046 namespace cAudio
00047 {
00049 struct cEFXFunctions
00050 {
00051 cEFXFunctions::cEFXFunctions()
00052 {
00053 alGenEffects = NULL;
00054 alDeleteEffects = NULL;
00055 alIsEffect = NULL;
00056 alEffecti = NULL;
00057 alEffectiv = NULL;
00058 alEffectf = NULL;
00059 alEffectfv = NULL;
00060 alGetEffecti = NULL;
00061 alGetEffectiv = NULL;
00062 alGetEffectf = NULL;
00063 alGetEffectfv = NULL;
00064
00065 alGenFilters = NULL;
00066 alDeleteFilters = NULL;
00067 alIsFilter = NULL;
00068 alFilteri = NULL;
00069 alFilteriv = NULL;
00070 alFilterf = NULL;
00071 alFilterfv = NULL;
00072 alGetFilteri = NULL;
00073 alGetFilteriv = NULL;
00074 alGetFilterf = NULL;
00075 alGetFilterfv = NULL;
00076
00077 alGenAuxiliaryEffectSlots = NULL;
00078 alDeleteAuxiliaryEffectSlots = NULL;
00079 alIsAuxiliaryEffectSlot = NULL;
00080 alAuxiliaryEffectSloti = NULL;
00081 alAuxiliaryEffectSlotiv = NULL;
00082 alAuxiliaryEffectSlotf = NULL;
00083 alAuxiliaryEffectSlotfv = NULL;
00084 alGetAuxiliaryEffectSloti = NULL;
00085 alGetAuxiliaryEffectSlotiv = NULL;
00086 alGetAuxiliaryEffectSlotf = NULL;
00087 alGetAuxiliaryEffectSlotfv = NULL;
00088
00089 Supported = false;
00090 }
00091
00092
00093 LPALGENEFFECTS alGenEffects;
00094 LPALDELETEEFFECTS alDeleteEffects;
00095 LPALISEFFECT alIsEffect;
00096 LPALEFFECTI alEffecti;
00097 LPALEFFECTIV alEffectiv;
00098 LPALEFFECTF alEffectf;
00099 LPALEFFECTFV alEffectfv;
00100 LPALGETEFFECTI alGetEffecti;
00101 LPALGETEFFECTIV alGetEffectiv;
00102 LPALGETEFFECTF alGetEffectf;
00103 LPALGETEFFECTFV alGetEffectfv;
00104
00105
00106 LPALGENFILTERS alGenFilters;
00107 LPALDELETEFILTERS alDeleteFilters;
00108 LPALISFILTER alIsFilter;
00109 LPALFILTERI alFilteri;
00110 LPALFILTERIV alFilteriv;
00111 LPALFILTERF alFilterf;
00112 LPALFILTERFV alFilterfv;
00113 LPALGETFILTERI alGetFilteri;
00114 LPALGETFILTERIV alGetFilteriv;
00115 LPALGETFILTERF alGetFilterf;
00116 LPALGETFILTERFV alGetFilterfv;
00117
00118
00119 LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
00120 LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
00121 LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot;
00122 LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti;
00123 LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv;
00124 LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf;
00125 LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv;
00126 LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti;
00127 LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv;
00128 LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf;
00129 LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv;
00130
00131 cAudioMutex Mutex;
00132
00133 bool Supported;
00134
00135 bool CheckEFXSupport(ALCdevice* device)
00136 {
00137 Supported = false;
00138 if (alcIsExtensionPresent(device, "ALC_EXT_EFX"))
00139 {
00140
00141 alGenEffects = (LPALGENEFFECTS)alGetProcAddress("alGenEffects");
00142 alDeleteEffects = (LPALDELETEEFFECTS )alGetProcAddress("alDeleteEffects");
00143 alIsEffect = (LPALISEFFECT )alGetProcAddress("alIsEffect");
00144 alEffecti = (LPALEFFECTI)alGetProcAddress("alEffecti");
00145 alEffectiv = (LPALEFFECTIV)alGetProcAddress("alEffectiv");
00146 alEffectf = (LPALEFFECTF)alGetProcAddress("alEffectf");
00147 alEffectfv = (LPALEFFECTFV)alGetProcAddress("alEffectfv");
00148 alGetEffecti = (LPALGETEFFECTI)alGetProcAddress("alGetEffecti");
00149 alGetEffectiv = (LPALGETEFFECTIV)alGetProcAddress("alGetEffectiv");
00150 alGetEffectf = (LPALGETEFFECTF)alGetProcAddress("alGetEffectf");
00151 alGetEffectfv = (LPALGETEFFECTFV)alGetProcAddress("alGetEffectfv");
00152 alGenFilters = (LPALGENFILTERS)alGetProcAddress("alGenFilters");
00153 alDeleteFilters = (LPALDELETEFILTERS)alGetProcAddress("alDeleteFilters");
00154 alIsFilter = (LPALISFILTER)alGetProcAddress("alIsFilter");
00155 alFilteri = (LPALFILTERI)alGetProcAddress("alFilteri");
00156 alFilteriv = (LPALFILTERIV)alGetProcAddress("alFilteriv");
00157 alFilterf = (LPALFILTERF)alGetProcAddress("alFilterf");
00158 alFilterfv = (LPALFILTERFV)alGetProcAddress("alFilterfv");
00159 alGetFilteri = (LPALGETFILTERI )alGetProcAddress("alGetFilteri");
00160 alGetFilteriv= (LPALGETFILTERIV )alGetProcAddress("alGetFilteriv");
00161 alGetFilterf = (LPALGETFILTERF )alGetProcAddress("alGetFilterf");
00162 alGetFilterfv= (LPALGETFILTERFV )alGetProcAddress("alGetFilterfv");
00163 alGenAuxiliaryEffectSlots = (LPALGENAUXILIARYEFFECTSLOTS)alGetProcAddress("alGenAuxiliaryEffectSlots");
00164 alDeleteAuxiliaryEffectSlots = (LPALDELETEAUXILIARYEFFECTSLOTS)alGetProcAddress("alDeleteAuxiliaryEffectSlots");
00165 alIsAuxiliaryEffectSlot = (LPALISAUXILIARYEFFECTSLOT)alGetProcAddress("alIsAuxiliaryEffectSlot");
00166 alAuxiliaryEffectSloti = (LPALAUXILIARYEFFECTSLOTI)alGetProcAddress("alAuxiliaryEffectSloti");
00167 alAuxiliaryEffectSlotiv = (LPALAUXILIARYEFFECTSLOTIV)alGetProcAddress("alAuxiliaryEffectSlotiv");
00168 alAuxiliaryEffectSlotf = (LPALAUXILIARYEFFECTSLOTF)alGetProcAddress("alAuxiliaryEffectSlotf");
00169 alAuxiliaryEffectSlotfv = (LPALAUXILIARYEFFECTSLOTFV)alGetProcAddress("alAuxiliaryEffectSlotfv");
00170 alGetAuxiliaryEffectSloti = (LPALGETAUXILIARYEFFECTSLOTI)alGetProcAddress("alGetAuxiliaryEffectSloti");
00171 alGetAuxiliaryEffectSlotiv = (LPALGETAUXILIARYEFFECTSLOTIV)alGetProcAddress("alGetAuxiliaryEffectSlotiv");
00172 alGetAuxiliaryEffectSlotf = (LPALGETAUXILIARYEFFECTSLOTF)alGetProcAddress("alGetAuxiliaryEffectSlotf");
00173 alGetAuxiliaryEffectSlotfv = (LPALGETAUXILIARYEFFECTSLOTFV)alGetProcAddress("alGetAuxiliaryEffectSlotfv");
00174
00175 if (alGenEffects && alDeleteEffects && alIsEffect && alEffecti && alEffectiv && alEffectf &&
00176 alEffectfv && alGetEffecti && alGetEffectiv && alGetEffectf && alGetEffectfv && alGenFilters &&
00177 alDeleteFilters && alIsFilter && alFilteri && alFilteriv && alFilterf && alFilterfv &&
00178 alGetFilteri && alGetFilteriv && alGetFilterf && alGetFilterfv && alGenAuxiliaryEffectSlots &&
00179 alDeleteAuxiliaryEffectSlots && alIsAuxiliaryEffectSlot && alAuxiliaryEffectSloti &&
00180 alAuxiliaryEffectSlotiv && alAuxiliaryEffectSlotf && alAuxiliaryEffectSlotfv &&
00181 alGetAuxiliaryEffectSloti && alGetAuxiliaryEffectSlotiv && alGetAuxiliaryEffectSlotf &&
00182 alGetAuxiliaryEffectSlotfv)
00183 Supported = true;
00184 }
00185
00186 return Supported;
00187 }
00188 };
00189 };
00190
00191 #endif
00192
00193 #endif