123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- // TODO: Implement OpenAL loading code which is currently stubbed out.
- #if defined(__linux__) && !defined(TORQUE_OS_LINUX)
- #define TORQUE_OS_LINUX
- #endif
- #include <dlfcn.h>
- #include <err.h>
- #include <string.h>
- #include "sfx/openal/LoadOAL.h"
- #include "console/console.h"
- void* openal_library = NULL;
- ALboolean LoadOAL10Library(char *szOALFullPathName, LPOPENALFNTABLE lpOALFnTable)
- {
- if (!lpOALFnTable)
- return AL_FALSE;
- if (szOALFullPathName)
- openal_library = dlopen(szOALFullPathName, RTLD_LAZY);
- else
- openal_library = dlopen("libopenal.so", RTLD_LAZY);
- if (openal_library == NULL) {
- Con::errorf("Failed to load OpenAL shared library. Sound will not be available");
- return AL_FALSE;
- }
- memset(lpOALFnTable, 0, sizeof(OPENALFNTABLE));
- lpOALFnTable->alEnable = (LPALENABLE)dlsym(openal_library,"alEnable");
- if (lpOALFnTable->alEnable == NULL)
- {
- warn("Failed to retrieve 'alEnable' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDisable = (LPALDISABLE)dlsym(openal_library,"alDisable");
- if (lpOALFnTable->alDisable == NULL)
- {
- warn("Failed to retrieve 'alDisable' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alIsEnabled = (LPALISENABLED)dlsym(openal_library,"alIsEnabled");
- if (lpOALFnTable->alIsEnabled == NULL)
- {
- warn("Failed to retrieve 'alIsEnabled' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetBoolean = (LPALGETBOOLEAN)dlsym(openal_library,"alGetBoolean");
- if (lpOALFnTable->alGetBoolean == NULL)
- {
- warn("Failed to retrieve 'alGetBoolean' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetInteger = (LPALGETINTEGER)dlsym(openal_library,"alGetInteger");
- if (lpOALFnTable->alGetInteger == NULL)
- {
- warn("Failed to retrieve 'alGetInteger' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetFloat = (LPALGETFLOAT)dlsym(openal_library,"alGetFloat");
- if (lpOALFnTable->alGetFloat == NULL)
- {
- warn("Failed to retrieve 'alGetFloat' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetDouble = (LPALGETDOUBLE)dlsym(openal_library,"alGetDouble");
- if (lpOALFnTable->alGetDouble == NULL)
- {
- warn("Failed to retrieve 'alGetDouble' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetBooleanv = (LPALGETBOOLEANV)dlsym(openal_library,"alGetBooleanv");
- if (lpOALFnTable->alGetBooleanv == NULL)
- {
- warn("Failed to retrieve 'alGetBooleanv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetIntegerv = (LPALGETINTEGERV)dlsym(openal_library,"alGetIntegerv");
- if (lpOALFnTable->alGetIntegerv == NULL)
- {
- warn("Failed to retrieve 'alGetIntegerv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetFloatv = (LPALGETFLOATV)dlsym(openal_library,"alGetFloatv");
- if (lpOALFnTable->alGetFloatv == NULL)
- {
- warn("Failed to retrieve 'alGetFloatv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetDoublev = (LPALGETDOUBLEV)dlsym(openal_library,"alGetDoublev");
- if (lpOALFnTable->alGetDoublev == NULL)
- {
- warn("Failed to retrieve 'alGetDoublev' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetString = (LPALGETSTRING)dlsym(openal_library,"alGetString");
- if (lpOALFnTable->alGetString == NULL)
- {
- warn("Failed to retrieve 'alGetString' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetError = (LPALGETERROR)dlsym(openal_library,"alGetError");
- if (lpOALFnTable->alGetError == NULL)
- {
- warn("Failed to retrieve 'alGetError' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alIsExtensionPresent = (LPALISEXTENSIONPRESENT)dlsym(openal_library,"alIsExtensionPresent");
- if (lpOALFnTable->alIsExtensionPresent == NULL)
- {
- warn("Failed to retrieve 'alIsExtensionPresent' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetProcAddress = (LPALGETPROCADDRESS)dlsym(openal_library,"alGetProcAddress");
- if (lpOALFnTable->alGetProcAddress == NULL)
- {
- warn("Failed to retrieve 'alGetProcAddress' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetEnumValue = (LPALGETENUMVALUE)dlsym(openal_library,"alGetEnumValue");
- if (lpOALFnTable->alGetEnumValue == NULL)
- {
- warn("Failed to retrieve 'alGetEnumValue' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alListeneri = (LPALLISTENERI)dlsym(openal_library,"alListeneri");
- if (lpOALFnTable->alListeneri == NULL)
- {
- warn("Failed to retrieve 'alListeneri' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alListenerf = (LPALLISTENERF)dlsym(openal_library,"alListenerf");
- if (lpOALFnTable->alListenerf == NULL)
- {
- warn("Failed to retrieve 'alListenerf' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alListener3f = (LPALLISTENER3F)dlsym(openal_library,"alListener3f");
- if (lpOALFnTable->alListener3f == NULL)
- {
- warn("Failed to retrieve 'alListener3f' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alListenerfv = (LPALLISTENERFV)dlsym(openal_library,"alListenerfv");
- if (lpOALFnTable->alListenerfv == NULL)
- {
- warn("Failed to retrieve 'alListenerfv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetListeneri = (LPALGETLISTENERI)dlsym(openal_library,"alGetListeneri");
- if (lpOALFnTable->alGetListeneri == NULL)
- {
- warn("Failed to retrieve 'alGetListeneri' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetListenerf =(LPALGETLISTENERF)dlsym(openal_library,"alGetListenerf");
- if (lpOALFnTable->alGetListenerf == NULL)
- {
- warn("Failed to retrieve 'alGetListenerf' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetListener3f = (LPALGETLISTENER3F)dlsym(openal_library,"alGetListener3f");
- if (lpOALFnTable->alGetListener3f == NULL)
- {
- warn("Failed to retrieve 'alGetListener3f' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetListenerfv = (LPALGETLISTENERFV)dlsym(openal_library,"alGetListenerfv");
- if (lpOALFnTable->alGetListenerfv == NULL)
- {
- warn("Failed to retrieve 'alGetListenerfv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGenSources = (LPALGENSOURCES)dlsym(openal_library,"alGenSources");
- if (lpOALFnTable->alGenSources == NULL)
- {
- warn("Failed to retrieve 'alGenSources' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDeleteSources = (LPALDELETESOURCES)dlsym(openal_library,"alDeleteSources");
- if (lpOALFnTable->alDeleteSources == NULL)
- {
- warn("Failed to retrieve 'alDeleteSources' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alIsSource = (LPALISSOURCE)dlsym(openal_library,"alIsSource");
- if (lpOALFnTable->alIsSource == NULL)
- {
- warn("Failed to retrieve 'alIsSource' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcei = (LPALSOURCEI)dlsym(openal_library,"alSourcei");
- if (lpOALFnTable->alSourcei == NULL)
- {
- warn("Failed to retrieve 'alSourcei' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcef = (LPALSOURCEF)dlsym(openal_library,"alSourcef");
- if (lpOALFnTable->alSourcef == NULL)
- {
- warn("Failed to retrieve 'alSourcef' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSource3f = (LPALSOURCE3F)dlsym(openal_library,"alSource3f");
- if (lpOALFnTable->alSource3f == NULL)
- {
- warn("Failed to retrieve 'alSource3f' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcefv = (LPALSOURCEFV)dlsym(openal_library,"alSourcefv");
- if (lpOALFnTable->alSourcefv == NULL)
- {
- warn("Failed to retrieve 'alSourcefv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetSourcei = (LPALGETSOURCEI)dlsym(openal_library,"alGetSourcei");
- if (lpOALFnTable->alGetSourcei == NULL)
- {
- warn("Failed to retrieve 'alGetSourcei' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetSourcef = (LPALGETSOURCEF)dlsym(openal_library,"alGetSourcef");
- if (lpOALFnTable->alGetSourcef == NULL)
- {
- warn("Failed to retrieve 'alGetSourcef' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetSourcefv = (LPALGETSOURCEFV)dlsym(openal_library,"alGetSourcefv");
- if (lpOALFnTable->alGetSourcefv == NULL)
- {
- warn("Failed to retrieve 'alGetSourcefv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcePlayv = (LPALSOURCEPLAYV)dlsym(openal_library,"alSourcePlayv");
- if (lpOALFnTable->alSourcePlayv == NULL)
- {
- warn("Failed to retrieve 'alSourcePlayv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourceStopv = (LPALSOURCESTOPV)dlsym(openal_library,"alSourceStopv");
- if (lpOALFnTable->alSourceStopv == NULL)
- {
- warn("Failed to retrieve 'alSourceStopv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcePlay = (LPALSOURCEPLAY)dlsym(openal_library,"alSourcePlay");
- if (lpOALFnTable->alSourcePlay == NULL)
- {
- warn("Failed to retrieve 'alSourcePlay' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourcePause = (LPALSOURCEPAUSE)dlsym(openal_library,"alSourcePause");
- if (lpOALFnTable->alSourcePause == NULL)
- {
- warn("Failed to retrieve 'alSourcePause' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourceStop = (LPALSOURCESTOP)dlsym(openal_library,"alSourceStop");
- if (lpOALFnTable->alSourceStop == NULL)
- {
- warn("Failed to retrieve 'alSourceStop' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourceRewind = (LPALSOURCEREWIND)dlsym(openal_library,"alSourceRewind");
- if (lpOALFnTable->alSourceRewind == NULL)
- {
- warn("Failed to retrieve 'alSourceRewind' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGenBuffers = (LPALGENBUFFERS)dlsym(openal_library,"alGenBuffers");
- if (lpOALFnTable->alGenBuffers == NULL)
- {
- warn("Failed to retrieve 'alGenBuffers' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDeleteBuffers = (LPALDELETEBUFFERS)dlsym(openal_library,"alDeleteBuffers");
- if (lpOALFnTable->alDeleteBuffers == NULL)
- {
- warn("Failed to retrieve 'alDeleteBuffers' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alIsBuffer = (LPALISBUFFER)dlsym(openal_library,"alIsBuffer");
- if (lpOALFnTable->alIsBuffer == NULL)
- {
- warn("Failed to retrieve 'alIsBuffer' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alBufferData = (LPALBUFFERDATA)dlsym(openal_library,"alBufferData");
- if (lpOALFnTable->alBufferData == NULL)
- {
- warn("Failed to retrieve 'alBufferData' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetBufferi = (LPALGETBUFFERI)dlsym(openal_library,"alGetBufferi");
- if (lpOALFnTable->alGetBufferi == NULL)
- {
- warn("Failed to retrieve 'alGetBufferi' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alGetBufferf = (LPALGETBUFFERF)dlsym(openal_library,"alGetBufferf");
- if (lpOALFnTable->alGetBufferf == NULL)
- {
- warn("Failed to retrieve 'alGetBufferf' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourceQueueBuffers = (LPALSOURCEQUEUEBUFFERS)dlsym(openal_library,"alSourceQueueBuffers");
- if (lpOALFnTable->alSourceQueueBuffers == NULL)
- {
- warn("Failed to retrieve 'alSourceQueueBuffers' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alSourceUnqueueBuffers = (LPALSOURCEUNQUEUEBUFFERS)dlsym(openal_library,"alSourceUnqueueBuffers");
- if (lpOALFnTable->alSourceUnqueueBuffers == NULL)
- {
- warn("Failed to retrieve 'alSourceUnqueueBuffers' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDistanceModel = (LPALDISTANCEMODEL)dlsym(openal_library,"alDistanceModel");
- if (lpOALFnTable->alDistanceModel == NULL)
- {
- warn("Failed to retrieve 'alDistanceModel' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDopplerFactor = (LPALDOPPLERFACTOR)dlsym(openal_library,"alDopplerFactor");
- if (lpOALFnTable->alDopplerFactor == NULL)
- {
- warn("Failed to retrieve 'alDopplerFactor' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alDopplerVelocity = (LPALDOPPLERVELOCITY)dlsym(openal_library,"alDopplerVelocity");
- if (lpOALFnTable->alDopplerVelocity == NULL)
- {
- warn("Failed to retrieve 'alDopplerVelocity' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetString = (LPALCGETSTRING)dlsym(openal_library,"alcGetString");
- if (lpOALFnTable->alcGetString == NULL)
- {
- warn("Failed to retrieve 'alcGetString' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetIntegerv = (LPALCGETINTEGERV)dlsym(openal_library,"alcGetIntegerv");
- if (lpOALFnTable->alcGetIntegerv == NULL)
- {
- warn("Failed to retrieve 'alcGetIntegerv' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcOpenDevice = (LPALCOPENDEVICE)dlsym(openal_library,"alcOpenDevice");
- if (lpOALFnTable->alcOpenDevice == NULL)
- {
- warn("Failed to retrieve 'alcOpenDevice' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcCloseDevice = (LPALCCLOSEDEVICE)dlsym(openal_library,"alcCloseDevice");
- if (lpOALFnTable->alcCloseDevice == NULL)
- {
- warn("Failed to retrieve 'alcCloseDevice' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcCreateContext = (LPALCCREATECONTEXT)dlsym(openal_library,"alcCreateContext");
- if (lpOALFnTable->alcCreateContext == NULL)
- {
- warn("Failed to retrieve 'alcCreateContext' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcMakeContextCurrent = (LPALCMAKECONTEXTCURRENT)dlsym(openal_library,"alcMakeContextCurrent");
- if (lpOALFnTable->alcMakeContextCurrent == NULL)
- {
- warn("Failed to retrieve 'alcMakeContextCurrent' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcProcessContext = (LPALCPROCESSCONTEXT)dlsym(openal_library,"alcProcessContext");
- if (lpOALFnTable->alcProcessContext == NULL)
- {
- warn("Failed to retrieve 'alcProcessContext' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetCurrentContext = (LPALCGETCURRENTCONTEXT)dlsym(openal_library,"alcGetCurrentContext");
- if (lpOALFnTable->alcGetCurrentContext == NULL)
- {
- warn("Failed to retrieve 'alcGetCurrentContext' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetContextsDevice = (LPALCGETCONTEXTSDEVICE)dlsym(openal_library,"alcGetContextsDevice");
- if (lpOALFnTable->alcGetContextsDevice == NULL)
- {
- warn("Failed to retrieve 'alcGetContextsDevice' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcSuspendContext = (LPALCSUSPENDCONTEXT)dlsym(openal_library,"alcSuspendContext");
- if (lpOALFnTable->alcSuspendContext == NULL)
- {
- warn("Failed to retrieve 'alcSuspendContext' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcDestroyContext = (LPALCDESTROYCONTEXT)dlsym(openal_library,"alcDestroyContext");
- if (lpOALFnTable->alcDestroyContext == NULL)
- {
- warn("Failed to retrieve 'alcDestroyContext' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetError = (LPALCGETERROR)dlsym(openal_library,"alcGetError");
- if (lpOALFnTable->alcGetError == NULL)
- {
- warn("Failed to retrieve 'alcGetError' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcIsExtensionPresent = (LPALCISEXTENSIONPRESENT)dlsym(openal_library,"alcIsExtensionPresent");
- if (lpOALFnTable->alcIsExtensionPresent == NULL)
- {
- warn("Failed to retrieve 'alcIsExtensionPresent' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetProcAddress = (LPALCGETPROCADDRESS)dlsym(openal_library,"alcGetProcAddress");
- if (lpOALFnTable->alcGetProcAddress == NULL)
- {
- warn("Failed to retrieve 'alcGetProcAddress' function address\n");
- return AL_FALSE;
- }
- lpOALFnTable->alcGetEnumValue = (LPALCGETENUMVALUE)dlsym(openal_library,"alcGetEnumValue");
- if (lpOALFnTable->alcGetEnumValue == NULL)
- {
- warn("Failed to retrieve 'alcGetEnumValue' function address\n");
- return AL_FALSE;
- }
- return AL_TRUE;
- }
- ALvoid UnloadOAL10Library()
- {
- if (openal_library != NULL)
- dlclose(openal_library);
- }
|