1 /* 2 3 Boost Software License - Version 1.0 - August 17th, 2003 4 5 Permission is hereby granted, free of charge, to any person or organization 6 obtaining a copy of the software and accompanying documentation covered by 7 this license (the "Software") to use, reproduce, display, distribute, 8 execute, and transmit the Software, and to prepare derivative works of the 9 Software, and to permit third-parties to whom the Software is furnished to 10 do so, all subject to the following: 11 12 The copyright notices in the Software and this entire statement, including 13 the above license grant, this restriction and the following disclaimer, 14 must be included in all copies of the Software, in whole or in part, and 15 all derivative works of the Software, unless such copies or derivative 16 works are solely in the form of machine-executable object code generated by 17 a source language processor. 18 19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT 22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE 23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, 24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 25 DEALINGS IN THE SOFTWARE. 26 27 */ 28 module derelict.openal.dynload; 29 30 version(Derelict_Static) {} 31 else version(DerelictAL_Static) {} 32 else { version = DerelictAL_Dynamic; } 33 34 version(DerelictAL_Dynamic): 35 36 public import derelict.openal.types; 37 import derelict.util.loader, 38 derelict.util.system; 39 40 extern(C) @nogc nothrow { 41 alias da_alEnable = void function(ALenum); 42 alias da_alDisable = void function(ALenum); 43 alias da_alIsEnabled = ALboolean function(ALenum); 44 45 alias da_alGetString = const(ALchar)* function(ALenum); 46 alias da_alGetBooleanv = void function(ALenum, ALboolean*); 47 alias da_alGetIntegerv = void function(ALenum, ALint*); 48 alias da_alGetFloatv = void function(ALenum, ALfloat*); 49 alias da_alGetDoublev = void function(ALenum, ALdouble*); 50 alias da_alGetBoolean = ALboolean function(ALenum); 51 alias da_alGetInteger = ALint function(ALenum); 52 alias da_alGetFloat = ALfloat function(ALenum); 53 alias da_alGetDouble = ALdouble function(ALenum); 54 alias da_alGetError = ALenum function(); 55 56 alias da_alIsExtensionPresent = ALboolean function(const(char)*); 57 alias da_alGetProcAddress = ALvoid* function(const(char)*); 58 alias da_alGetEnumValue = ALenum function(const(char)*); 59 60 alias da_alListenerf = void function(ALenum, ALfloat); 61 alias da_alListener3f = void function(ALenum, ALfloat, ALfloat, ALfloat); 62 alias da_alListenerfv = void function(ALenum, const(ALfloat)*); 63 alias da_alListeneri = void function(ALenum, ALint); 64 alias da_alListener3i = void function(ALenum, ALint, ALint, ALint); 65 alias da_alListeneriv = void function(ALenum, const(ALint)*); 66 67 alias da_alGetListenerf = void function(ALenum, ALfloat*); 68 alias da_alGetListener3f = void function(ALenum, ALfloat*, ALfloat*, ALfloat*); 69 alias da_alGetListenerfv = void function(ALenum, ALfloat*); 70 alias da_alGetListeneri = void function(ALenum, ALint*); 71 alias da_alGetListener3i = void function(ALenum, ALint*, ALint*, ALint*); 72 alias da_alGetListeneriv = void function(ALenum, ALint*); 73 74 alias da_alGenSources = void function(ALsizei, ALuint*); 75 alias da_alDeleteSources = void function(ALsizei, const(ALuint)*); 76 alias da_alIsSource = ALboolean function(ALuint); 77 78 alias da_alSourcef = void function(ALuint, ALenum, ALfloat); 79 alias da_alSource3f = void function(ALuint, ALenum, ALfloat, ALfloat, ALfloat); 80 alias da_alSourcefv = void function(ALuint, ALenum, const(ALfloat)*); 81 alias da_alSourcei = void function(ALuint, ALenum, ALint); 82 alias da_alSource3i = void function(ALuint, ALenum, ALint, ALint, ALint); 83 alias da_alSourceiv = void function(ALuint, ALenum, const(ALint)*); 84 85 alias da_alGetSourcef = void function(ALuint, ALenum, ALfloat*); 86 alias da_alGetSource3f = void function(ALuint, ALenum, ALfloat*, ALfloat*, ALfloat*); 87 alias da_alGetSourcefv = void function(ALuint, ALenum, ALfloat*); 88 alias da_alGetSourcei = void function(ALuint, ALenum, ALint*); 89 alias da_alGetSource3i = void function(ALuint, ALenum, ALint*, ALint*, ALint*); 90 alias da_alGetSourceiv = void function(ALuint, ALenum, ALint*); 91 92 alias da_alSourcePlayv = void function(ALsizei, const(ALuint)*); 93 alias da_alSourceStopv = void function(ALsizei, const(ALuint)*); 94 alias da_alSourceRewindv = void function(ALsizei, const(ALuint)*); 95 alias da_alSourcePausev = void function(ALsizei, const(ALuint)*); 96 alias da_alSourcePlay = void function(ALuint); 97 alias da_alSourcePause = void function(ALuint); 98 alias da_alSourceRewind = void function(ALuint); 99 alias da_alSourceStop = void function(ALuint); 100 101 alias da_alSourceQueueBuffers = void function(ALuint, ALsizei, ALuint*); 102 alias da_alSourceUnqueueBuffers = void function(ALuint, ALsizei, ALuint*); 103 104 alias da_alGenBuffers = void function(ALsizei, ALuint*); 105 alias da_alDeleteBuffers = void function(ALsizei, const(ALuint)*); 106 alias da_alIsBuffer = ALboolean function(ALuint); 107 alias da_alBufferData = void function(ALuint, ALenum, const(ALvoid)*, ALsizei, ALsizei); 108 109 alias da_alBufferf = void function(ALuint, ALenum, ALfloat); 110 alias da_alBuffer3f = void function(ALuint, ALenum, ALfloat, ALfloat, ALfloat); 111 alias da_alBufferfv = void function(ALuint, ALenum, const(ALfloat)*); 112 alias da_alBufferi = void function(ALuint, ALenum, ALint); 113 alias da_alBuffer3i = void function(ALuint, ALenum, ALint, ALint, ALint); 114 alias da_alBufferiv = void function(ALuint, ALenum, const(ALint)*); 115 116 alias da_alGetBufferf = void function(ALuint, ALenum, ALfloat*); 117 alias da_alGetBuffer3f = void function(ALuint, ALenum, ALfloat*, ALfloat*, ALfloat*); 118 alias da_alGetBufferfv = void function(ALuint, ALenum, ALfloat*); 119 alias da_alGetBufferi = void function(ALuint, ALenum, ALint*); 120 alias da_alGetBuffer3i = void function(ALuint, ALenum, ALint*, ALint*, ALint*); 121 alias da_alGetBufferiv = void function(ALuint, ALenum, ALint*); 122 123 alias da_alDopplerFactor = void function(ALfloat); 124 alias da_alDopplerVelocity = void function(ALfloat); 125 alias da_alSpeedOfSound = void function(ALfloat); 126 alias da_alDistanceModel = void function(ALenum); 127 128 alias da_alcCreateContext = ALCcontext* function(ALCdevice*, const(ALCint)*); 129 alias da_alcMakeContextCurrent = ALCboolean function(ALCcontext*); 130 alias da_alcProcessContext = void function(ALCcontext*); 131 alias da_alcSuspendContext = void function(ALCcontext*); 132 alias da_alcDestroyContext = void function(ALCcontext*); 133 alias da_alcGetCurrentContext = ALCcontext* function(); 134 alias da_alcGetContextsDevice = ALCdevice* function(ALCcontext*); 135 alias da_alcOpenDevice = ALCdevice* function(const(char)*); 136 alias da_alcCloseDevice = ALCboolean function(ALCdevice*); 137 alias da_alcGetError = ALCenum function(ALCdevice*); 138 alias da_alcIsExtensionPresent = ALCboolean function(ALCdevice*, const(char)*); 139 alias da_alcGetProcAddress = void* function(ALCdevice*, const(char)*); 140 alias da_alcGetEnumValue = ALCenum function(ALCdevice*, const(char)*); 141 alias da_alcGetString = const(char)* function(ALCdevice*, ALCenum); 142 alias da_alcGetIntegerv = void function(ALCdevice*, ALCenum, ALCsizei, ALCint*); 143 alias da_alcCaptureOpenDevice = ALCdevice* function(const(char)*, ALCuint, ALCenum, ALCsizei); 144 alias da_alcCaptureCloseDevice = ALCboolean function(ALCdevice*); 145 alias da_alcCaptureStart = void function(ALCdevice*); 146 alias da_alcCaptureStop = void function(ALCdevice*); 147 alias da_alcCaptureSamples = void function(ALCdevice*, ALCvoid*, ALCsizei); 148 } 149 150 __gshared { 151 da_alEnable alEnable; 152 da_alDisable alDisable; 153 da_alIsEnabled alIsEnabled; 154 155 da_alGetString alGetString; 156 da_alGetBooleanv alGetBooleanv; 157 da_alGetIntegerv alGetIntegerv; 158 da_alGetFloatv alGetFloatv; 159 da_alGetDoublev alGetDoublev; 160 da_alGetBoolean alGetBoolean; 161 da_alGetInteger alGetInteger; 162 da_alGetFloat alGetFloat; 163 da_alGetDouble alGetDouble; 164 da_alGetError alGetError; 165 166 da_alIsExtensionPresent alIsExtensionPresent; 167 da_alGetProcAddress alGetProcAddress; 168 da_alGetEnumValue alGetEnumValue; 169 170 da_alListenerf alListenerf; 171 da_alListener3f alListener3f; 172 da_alListenerfv alListenerfv; 173 da_alListeneri alListeneri; 174 da_alListener3i alListener3i; 175 da_alListeneriv alListeneriv; 176 177 da_alGetListenerf alGetListenerf; 178 da_alGetListener3f alGetListener3f; 179 da_alGetListenerfv alGetListenerfv; 180 da_alGetListeneri alGetListeneri; 181 da_alGetListener3i alGetListener3i; 182 da_alGetListeneriv alGetListeneriv; 183 184 da_alGenSources alGenSources; 185 da_alDeleteSources alDeleteSources; 186 da_alIsSource alIsSource; 187 188 da_alSourcef alSourcef; 189 da_alSource3f alSource3f; 190 da_alSourcefv alSourcefv; 191 da_alSourcei alSourcei; 192 da_alSource3i alSource3i; 193 da_alSourceiv alSourceiv; 194 195 196 da_alGetSourcef alGetSourcef; 197 da_alGetSource3f alGetSource3f; 198 da_alGetSourcefv alGetSourcefv; 199 da_alGetSourcei alGetSourcei; 200 da_alGetSource3i alGetSource3i; 201 da_alGetSourceiv alGetSourceiv; 202 203 da_alSourcePlayv alSourcePlayv; 204 da_alSourceStopv alSourceStopv; 205 da_alSourceRewindv alSourceRewindv; 206 da_alSourcePausev alSourcePausev; 207 da_alSourcePlay alSourcePlay; 208 da_alSourcePause alSourcePause; 209 da_alSourceRewind alSourceRewind; 210 da_alSourceStop alSourceStop; 211 212 da_alSourceQueueBuffers alSourceQueueBuffers; 213 da_alSourceUnqueueBuffers alSourceUnqueueBuffers; 214 215 da_alGenBuffers alGenBuffers; 216 da_alDeleteBuffers alDeleteBuffers; 217 da_alIsBuffer alIsBuffer; 218 da_alBufferData alBufferData; 219 220 da_alBufferf alBufferf; 221 da_alBuffer3f alBuffer3f; 222 da_alBufferfv alBufferfv; 223 da_alBufferi alBufferi; 224 da_alBuffer3i alBuffer3i; 225 da_alBufferiv alBufferiv; 226 da_alGetBufferf alGetBufferf; 227 da_alGetBuffer3f alGetBuffer3f; 228 da_alGetBufferfv alGetBufferfv; 229 da_alGetBufferi alGetBufferi; 230 da_alGetBuffer3i alGetBuffer3i; 231 da_alGetBufferiv alGetBufferiv; 232 233 da_alDopplerFactor alDopplerFactor; 234 da_alDopplerVelocity alDopplerVelocity; 235 da_alSpeedOfSound alSpeedOfSound; 236 da_alDistanceModel alDistanceModel; 237 238 da_alcCreateContext alcCreateContext; 239 da_alcMakeContextCurrent alcMakeContextCurrent; 240 da_alcProcessContext alcProcessContext; 241 da_alcSuspendContext alcSuspendContext; 242 da_alcDestroyContext alcDestroyContext; 243 da_alcGetCurrentContext alcGetCurrentContext; 244 da_alcGetContextsDevice alcGetContextsDevice; 245 da_alcOpenDevice alcOpenDevice; 246 da_alcCloseDevice alcCloseDevice; 247 da_alcGetError alcGetError; 248 da_alcIsExtensionPresent alcIsExtensionPresent; 249 da_alcGetProcAddress alcGetProcAddress; 250 da_alcGetEnumValue alcGetEnumValue; 251 da_alcGetString alcGetString; 252 da_alcGetIntegerv alcGetIntegerv; 253 da_alcCaptureOpenDevice alcCaptureOpenDevice; 254 da_alcCaptureCloseDevice alcCaptureCloseDevice; 255 da_alcCaptureStart alcCaptureStart; 256 da_alcCaptureStop alcCaptureStop; 257 da_alcCaptureSamples alcCaptureSamples; 258 } 259 260 261 class DerelictALLoader : SharedLibLoader { 262 this() 263 { 264 super(libNames); 265 } 266 267 protected override void loadSymbols() 268 { 269 bindFunc(cast(void**)&alEnable, "alEnable"); 270 bindFunc(cast(void**)&alDisable, "alDisable"); 271 bindFunc(cast(void**)&alIsEnabled, "alIsEnabled"); 272 bindFunc(cast(void**)&alGetString, "alGetString"); 273 bindFunc(cast(void**)&alGetBooleanv, "alGetBooleanv"); 274 bindFunc(cast(void**)&alGetIntegerv, "alGetIntegerv"); 275 bindFunc(cast(void**)&alGetFloatv, "alGetFloatv"); 276 bindFunc(cast(void**)&alGetDoublev, "alGetDoublev"); 277 bindFunc(cast(void**)&alGetInteger, "alGetInteger"); 278 bindFunc(cast(void**)&alGetFloat, "alGetFloat"); 279 bindFunc(cast(void**)&alGetDouble, "alGetDouble"); 280 bindFunc(cast(void**)&alGetError, "alGetError"); 281 bindFunc(cast(void**)&alIsExtensionPresent, "alIsExtensionPresent"); 282 bindFunc(cast(void**)&alGetProcAddress, "alGetProcAddress"); 283 bindFunc(cast(void**)&alGetEnumValue, "alGetEnumValue"); 284 bindFunc(cast(void**)&alListenerf, "alListenerf"); 285 bindFunc(cast(void**)&alListener3f, "alListener3f"); 286 bindFunc(cast(void**)&alListenerfv, "alListenerfv"); 287 bindFunc(cast(void**)&alListeneri, "alListeneri"); 288 bindFunc(cast(void**)&alListener3i, "alListener3i"); 289 bindFunc(cast(void**)&alListeneriv, "alListeneriv"); 290 bindFunc(cast(void**)&alGetListenerf, "alGetListenerf"); 291 bindFunc(cast(void**)&alGetListener3f, "alGetListener3f"); 292 bindFunc(cast(void**)&alGetListenerfv, "alGetListenerfv"); 293 bindFunc(cast(void**)&alGetListeneri, "alGetListeneri"); 294 bindFunc(cast(void**)&alGetListener3i, "alGetListener3i"); 295 bindFunc(cast(void**)&alGetListeneriv, "alGetListeneriv"); 296 bindFunc(cast(void**)&alGenSources, "alGenSources"); 297 bindFunc(cast(void**)&alDeleteSources, "alDeleteSources"); 298 bindFunc(cast(void**)&alIsSource, "alIsSource"); 299 bindFunc(cast(void**)&alSourcef, "alSourcef"); 300 bindFunc(cast(void**)&alSource3f, "alSource3f"); 301 bindFunc(cast(void**)&alSourcefv, "alSourcefv"); 302 bindFunc(cast(void**)&alSourcei, "alSourcei"); 303 bindFunc(cast(void**)&alSource3i, "alSource3i"); 304 bindFunc(cast(void**)&alSourceiv, "alSourceiv"); 305 bindFunc(cast(void**)&alGetSourcef, "alGetSourcef"); 306 bindFunc(cast(void**)&alGetSource3f, "alGetSource3f"); 307 bindFunc(cast(void**)&alGetSourcefv, "alGetSourcefv"); 308 bindFunc(cast(void**)&alGetSourcei, "alGetSourcei"); 309 bindFunc(cast(void**)&alGetSource3i, "alGetSource3i"); 310 bindFunc(cast(void**)&alGetSourceiv, "alGetSourceiv"); 311 bindFunc(cast(void**)&alSourcePlayv, "alSourcePlayv"); 312 bindFunc(cast(void**)&alSourceStopv, "alSourceStopv"); 313 bindFunc(cast(void**)&alSourceRewindv, "alSourceRewindv"); 314 bindFunc(cast(void**)&alSourcePausev, "alSourcePausev"); 315 bindFunc(cast(void**)&alSourcePlay, "alSourcePlay"); 316 bindFunc(cast(void**)&alSourcePause, "alSourcePause"); 317 bindFunc(cast(void**)&alSourceRewind, "alSourceRewind"); 318 bindFunc(cast(void**)&alSourceStop, "alSourceStop"); 319 bindFunc(cast(void**)&alSourceQueueBuffers, "alSourceQueueBuffers"); 320 bindFunc(cast(void**)&alSourceUnqueueBuffers, "alSourceUnqueueBuffers"); 321 bindFunc(cast(void**)&alGenBuffers, "alGenBuffers"); 322 bindFunc(cast(void**)&alDeleteBuffers, "alDeleteBuffers"); 323 bindFunc(cast(void**)&alIsBuffer, "alIsBuffer"); 324 bindFunc(cast(void**)&alBufferData, "alBufferData"); 325 bindFunc(cast(void**)&alBufferf, "alBufferf"); 326 bindFunc(cast(void**)&alBuffer3f, "alBuffer3f"); 327 bindFunc(cast(void**)&alBufferfv, "alBufferfv"); 328 bindFunc(cast(void**)&alBufferi, "alBufferi"); 329 bindFunc(cast(void**)&alBuffer3i, "alBuffer3i"); 330 bindFunc(cast(void**)&alBufferiv, "alBufferiv"); 331 bindFunc(cast(void**)&alGetBufferf, "alGetBufferf"); 332 bindFunc(cast(void**)&alGetBuffer3f, "alGetBuffer3f"); 333 bindFunc(cast(void**)&alGetBufferfv, "alGetBufferfv"); 334 bindFunc(cast(void**)&alGetBufferi, "alGetBufferi"); 335 bindFunc(cast(void**)&alGetBuffer3i, "alGetBuffer3i"); 336 bindFunc(cast(void**)&alGetBufferiv, "alGetBufferiv"); 337 bindFunc(cast(void**)&alDopplerFactor, "alDopplerFactor"); 338 bindFunc(cast(void**)&alDopplerVelocity, "alDopplerVelocity"); 339 bindFunc(cast(void**)&alSpeedOfSound, "alSpeedOfSound"); 340 bindFunc(cast(void**)&alDistanceModel, "alDistanceModel"); 341 bindFunc(cast(void**)&alcCreateContext, "alcCreateContext"); 342 bindFunc(cast(void**)&alcMakeContextCurrent, "alcMakeContextCurrent"); 343 bindFunc(cast(void**)&alcProcessContext, "alcProcessContext"); 344 bindFunc(cast(void**)&alcGetCurrentContext, "alcGetCurrentContext"); 345 bindFunc(cast(void**)&alcGetContextsDevice, "alcGetContextsDevice"); 346 bindFunc(cast(void**)&alcSuspendContext, "alcSuspendContext"); 347 bindFunc(cast(void**)&alcDestroyContext, "alcDestroyContext"); 348 bindFunc(cast(void**)&alcOpenDevice, "alcOpenDevice"); 349 bindFunc(cast(void**)&alcCloseDevice, "alcCloseDevice"); 350 bindFunc(cast(void**)&alcGetError, "alcGetError"); 351 bindFunc(cast(void**)&alcIsExtensionPresent, "alcIsExtensionPresent"); 352 bindFunc(cast(void**)&alcGetProcAddress, "alcGetProcAddress"); 353 bindFunc(cast(void**)&alcGetEnumValue, "alcGetEnumValue"); 354 bindFunc(cast(void**)&alcGetString, "alcGetString"); 355 bindFunc(cast(void**)&alcGetIntegerv, "alcGetIntegerv"); 356 bindFunc(cast(void**)&alcCaptureOpenDevice, "alcCaptureOpenDevice"); 357 bindFunc(cast(void**)&alcCaptureCloseDevice, "alcCaptureCloseDevice"); 358 bindFunc(cast(void**)&alcCaptureStart, "alcCaptureStart"); 359 bindFunc(cast(void**)&alcCaptureStop, "alcCaptureStop"); 360 bindFunc(cast(void**)&alcCaptureSamples, "alcCaptureSamples"); 361 } 362 } 363 364 __gshared DerelictALLoader DerelictAL; 365 366 shared static this() 367 { 368 DerelictAL = new DerelictALLoader(); 369 } 370 371 private: 372 static if(Derelict_OS_Windows) 373 enum libNames = "OpenAl32.dll"; 374 else static if(Derelict_OS_Mac) 375 enum libNames = "../Frameworks/OpenAL.framework/OpenAL, /Library/Frameworks/OpenAL.framework/OpenAL, /System/Library/Frameworks/OpenAL.framework/OpenAL"; 376 else static if(Derelict_OS_Posix) 377 enum libNames = "libal.so, libAL.so, libopenal.so, libopenal.so.1, libopenal.so.0"; 378 else 379 static assert(0, "Need to implement OpenAL libNames for this operating system."); 380