mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-05-07 06:16:04 +00:00
177 lines
6.6 KiB
C++
177 lines
6.6 KiB
C++
|
|
/*
|
||
|
|
* Copyright (c) 2006, Creative Labs Inc.
|
||
|
|
* All rights reserved.
|
||
|
|
*
|
||
|
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||
|
|
* that the following conditions are met:
|
||
|
|
*
|
||
|
|
* * Redistributions of source code must retain the above copyright notice, this list of conditions and
|
||
|
|
* the following disclaimer.
|
||
|
|
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions
|
||
|
|
* and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||
|
|
* * Neither the name of Creative Labs Inc. nor the names of its contributors may be used to endorse or
|
||
|
|
* promote products derived from this software without specific prior written permission.
|
||
|
|
*
|
||
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
|
||
|
|
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||
|
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||
|
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||
|
|
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
*/
|
||
|
|
// Based on Openal-soft router code.
|
||
|
|
|
||
|
|
#include "sfx/openal/LoadOAL.h"
|
||
|
|
#include "console/console.h"
|
||
|
|
|
||
|
|
#if defined(TORQUE_OS_WIN)
|
||
|
|
#include <windows.h>
|
||
|
|
#else
|
||
|
|
#include <dirent.h>
|
||
|
|
#include <sys/types.h>
|
||
|
|
#endif
|
||
|
|
|
||
|
|
LIB_HANDLE openaAlDll = NULL;
|
||
|
|
|
||
|
|
#define LOAD_REQUIRED(table, x) \
|
||
|
|
table->x = reinterpret_cast<decltype(table->x)>(reinterpret_cast<void*>( \
|
||
|
|
GET_PROC_ADDRESS(openaAlDll, #x))); \
|
||
|
|
if(!table->x) \
|
||
|
|
{ \
|
||
|
|
Con::warnf("Failed to find entry point :%s\n", #x); \
|
||
|
|
loadok = false; \
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
ALboolean LoadOAL10Library(char *szOALFullPathName, LPOPENALFNTABLE oal)
|
||
|
|
{
|
||
|
|
if (!oal)
|
||
|
|
return AL_FALSE;
|
||
|
|
|
||
|
|
if (szOALFullPathName)
|
||
|
|
openaAlDll = LOAD_LIBRARY(szOALFullPathName);
|
||
|
|
else
|
||
|
|
{
|
||
|
|
#if defined(TORQUE_OS_WIN)
|
||
|
|
openaAlDll = LOAD_LIBRARY("openal32.dll");
|
||
|
|
#elif defined(TORQUE_OS_LINUX)
|
||
|
|
openaAlDll = LOAD_LIBRARY("libopenal.so");
|
||
|
|
#elif defined(TORQUE_OS_MAC)
|
||
|
|
openaAlDll = LOAD_LIBRARY("@rpath/libopenal.1.24.3.dylib");
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!openaAlDll)
|
||
|
|
return AL_FALSE;
|
||
|
|
|
||
|
|
bool loadok = true;
|
||
|
|
|
||
|
|
LOAD_REQUIRED(oal, alcCreateContext);
|
||
|
|
LOAD_REQUIRED(oal, alcMakeContextCurrent);
|
||
|
|
LOAD_REQUIRED(oal, alcProcessContext);
|
||
|
|
LOAD_REQUIRED(oal, alcSuspendContext);
|
||
|
|
LOAD_REQUIRED(oal, alcDestroyContext);
|
||
|
|
LOAD_REQUIRED(oal, alcGetCurrentContext);
|
||
|
|
LOAD_REQUIRED(oal, alcGetContextsDevice);
|
||
|
|
LOAD_REQUIRED(oal, alcOpenDevice);
|
||
|
|
LOAD_REQUIRED(oal, alcCloseDevice);
|
||
|
|
LOAD_REQUIRED(oal, alcGetError);
|
||
|
|
LOAD_REQUIRED(oal, alcIsExtensionPresent);
|
||
|
|
LOAD_REQUIRED(oal, alcGetProcAddress);
|
||
|
|
LOAD_REQUIRED(oal, alcGetEnumValue);
|
||
|
|
LOAD_REQUIRED(oal, alcGetString);
|
||
|
|
LOAD_REQUIRED(oal, alcGetIntegerv);
|
||
|
|
LOAD_REQUIRED(oal, alcCaptureOpenDevice);
|
||
|
|
LOAD_REQUIRED(oal, alcCaptureCloseDevice);
|
||
|
|
LOAD_REQUIRED(oal, alcCaptureStart);
|
||
|
|
LOAD_REQUIRED(oal, alcCaptureStop);
|
||
|
|
LOAD_REQUIRED(oal, alcCaptureSamples);
|
||
|
|
|
||
|
|
LOAD_REQUIRED(oal, alEnable);
|
||
|
|
LOAD_REQUIRED(oal, alDisable);
|
||
|
|
LOAD_REQUIRED(oal, alIsEnabled);
|
||
|
|
LOAD_REQUIRED(oal, alGetString);
|
||
|
|
LOAD_REQUIRED(oal, alGetBooleanv);
|
||
|
|
LOAD_REQUIRED(oal, alGetIntegerv);
|
||
|
|
LOAD_REQUIRED(oal, alGetFloatv);
|
||
|
|
LOAD_REQUIRED(oal, alGetDoublev);
|
||
|
|
LOAD_REQUIRED(oal, alGetBoolean);
|
||
|
|
LOAD_REQUIRED(oal, alGetInteger);
|
||
|
|
LOAD_REQUIRED(oal, alGetFloat);
|
||
|
|
LOAD_REQUIRED(oal, alGetDouble);
|
||
|
|
LOAD_REQUIRED(oal, alGetError);
|
||
|
|
LOAD_REQUIRED(oal, alIsExtensionPresent);
|
||
|
|
LOAD_REQUIRED(oal, alGetProcAddress);
|
||
|
|
LOAD_REQUIRED(oal, alGetEnumValue);
|
||
|
|
LOAD_REQUIRED(oal, alListenerf);
|
||
|
|
LOAD_REQUIRED(oal, alListener3f);
|
||
|
|
LOAD_REQUIRED(oal, alListenerfv);
|
||
|
|
LOAD_REQUIRED(oal, alListeneri);
|
||
|
|
LOAD_REQUIRED(oal, alListener3i);
|
||
|
|
LOAD_REQUIRED(oal, alListeneriv);
|
||
|
|
LOAD_REQUIRED(oal, alGetListenerf);
|
||
|
|
LOAD_REQUIRED(oal, alGetListener3f);
|
||
|
|
LOAD_REQUIRED(oal, alGetListenerfv);
|
||
|
|
LOAD_REQUIRED(oal, alGetListeneri);
|
||
|
|
LOAD_REQUIRED(oal, alGetListener3i);
|
||
|
|
LOAD_REQUIRED(oal, alGetListeneriv);
|
||
|
|
LOAD_REQUIRED(oal, alGenSources);
|
||
|
|
LOAD_REQUIRED(oal, alDeleteSources);
|
||
|
|
LOAD_REQUIRED(oal, alIsSource);
|
||
|
|
LOAD_REQUIRED(oal, alSourcef);
|
||
|
|
LOAD_REQUIRED(oal, alSource3f);
|
||
|
|
LOAD_REQUIRED(oal, alSourcefv);
|
||
|
|
LOAD_REQUIRED(oal, alSourcei);
|
||
|
|
LOAD_REQUIRED(oal, alSource3i);
|
||
|
|
LOAD_REQUIRED(oal, alSourceiv);
|
||
|
|
LOAD_REQUIRED(oal, alGetSourcef);
|
||
|
|
LOAD_REQUIRED(oal, alGetSource3f);
|
||
|
|
LOAD_REQUIRED(oal, alGetSourcefv);
|
||
|
|
LOAD_REQUIRED(oal, alGetSourcei);
|
||
|
|
LOAD_REQUIRED(oal, alGetSource3i);
|
||
|
|
LOAD_REQUIRED(oal, alGetSourceiv);
|
||
|
|
LOAD_REQUIRED(oal, alSourcePlayv);
|
||
|
|
LOAD_REQUIRED(oal, alSourceStopv);
|
||
|
|
LOAD_REQUIRED(oal, alSourceRewindv);
|
||
|
|
LOAD_REQUIRED(oal, alSourcePausev);
|
||
|
|
LOAD_REQUIRED(oal, alSourcePlay);
|
||
|
|
LOAD_REQUIRED(oal, alSourceStop);
|
||
|
|
LOAD_REQUIRED(oal, alSourceRewind);
|
||
|
|
LOAD_REQUIRED(oal, alSourcePause);
|
||
|
|
LOAD_REQUIRED(oal, alSourceQueueBuffers);
|
||
|
|
LOAD_REQUIRED(oal, alSourceUnqueueBuffers);
|
||
|
|
LOAD_REQUIRED(oal, alGenBuffers);
|
||
|
|
LOAD_REQUIRED(oal, alDeleteBuffers);
|
||
|
|
LOAD_REQUIRED(oal, alIsBuffer);
|
||
|
|
LOAD_REQUIRED(oal, alBufferData);
|
||
|
|
LOAD_REQUIRED(oal, alDopplerFactor);
|
||
|
|
LOAD_REQUIRED(oal, alDopplerVelocity);
|
||
|
|
LOAD_REQUIRED(oal, alSpeedOfSound);
|
||
|
|
LOAD_REQUIRED(oal, alDistanceModel);
|
||
|
|
|
||
|
|
// these are optional.
|
||
|
|
LOAD_REQUIRED(oal, alBufferf);
|
||
|
|
LOAD_REQUIRED(oal, alBuffer3f);
|
||
|
|
LOAD_REQUIRED(oal, alBufferfv);
|
||
|
|
LOAD_REQUIRED(oal, alBufferi);
|
||
|
|
LOAD_REQUIRED(oal, alBuffer3i);
|
||
|
|
LOAD_REQUIRED(oal, alBufferiv);
|
||
|
|
LOAD_REQUIRED(oal, alGetBufferf);
|
||
|
|
LOAD_REQUIRED(oal, alGetBuffer3f);
|
||
|
|
LOAD_REQUIRED(oal, alGetBufferfv);
|
||
|
|
LOAD_REQUIRED(oal, alGetBufferi);
|
||
|
|
LOAD_REQUIRED(oal, alGetBuffer3i);
|
||
|
|
LOAD_REQUIRED(oal, alGetBufferiv);
|
||
|
|
|
||
|
|
return AL_TRUE;
|
||
|
|
}
|
||
|
|
|
||
|
|
ALvoid UnloadOAL10Library()
|
||
|
|
{
|
||
|
|
// Unload the dll
|
||
|
|
if (openaAlDll)
|
||
|
|
CLOSE_LIBRARY(openaAlDll);
|
||
|
|
}
|