From e5f70fcf404d1c1febe1ad1ce572c11039bdcda0 Mon Sep 17 00:00:00 2001 From: Yamagi Burmeister Date: Wed, 1 Aug 2012 14:54:18 +0200 Subject: [PATCH] Merge qal.c into one generic file for all platforms To archive this, 3 new functions Sys_GetProcAddress(), Sys_LoadLibrary() and Sys_FreeLibrary() were added to abstract the library loading code into a platform independend API. --- Makefile | 3 +- src/backends/{unix => generic}/header/qal.h | 0 src/backends/{windows => generic}/qal.c | 205 ++++---- src/backends/unix/qal.c | 501 -------------------- src/backends/unix/system.c | 53 +++ src/backends/windows/header/qal.h | 136 ------ src/backends/windows/system.c | 61 +++ src/client/sound/snd_al.c | 6 +- src/client/sound/snd_dma.c | 7 +- src/common/header/common.h | 4 + 10 files changed, 222 insertions(+), 754 deletions(-) rename src/backends/{unix => generic}/header/qal.h (100%) rename src/backends/{windows => generic}/qal.c (61%) delete mode 100644 src/backends/unix/qal.c delete mode 100644 src/backends/windows/header/qal.h diff --git a/Makefile b/Makefile index d421d62a..89293616 100644 --- a/Makefile +++ b/Makefile @@ -452,6 +452,7 @@ GAME_OBJS_ = \ # Used by the client CLIENT_OBJS_ := \ + src/backends/generic/qal.o \ src/backends/sdl/cd.o \ src/backends/sdl/sound.o \ src/client/cl_cin.o \ @@ -515,7 +516,6 @@ ifeq ($(OSTYPE), Windows) CLIENT_OBJS_ += \ src/backends/windows/mem.o \ src/backends/windows/network.o \ - src/backends/windows/qal.o \ src/backends/windows/system.o \ src/backends/windows/vid.o else @@ -523,7 +523,6 @@ CLIENT_OBJS_ += \ src/backends/unix/hunk.o \ src/backends/unix/main.o \ src/backends/unix/network.o \ - src/backends/unix/qal.o \ src/backends/unix/signalhandler.o \ src/backends/unix/system.o \ src/backends/unix/vid.o diff --git a/src/backends/unix/header/qal.h b/src/backends/generic/header/qal.h similarity index 100% rename from src/backends/unix/header/qal.h rename to src/backends/generic/header/qal.h diff --git a/src/backends/windows/qal.c b/src/backends/generic/qal.c similarity index 61% rename from src/backends/windows/qal.c rename to src/backends/generic/qal.c index a1af59bc..b0907fe1 100644 --- a/src/backends/windows/qal.c +++ b/src/backends/generic/qal.c @@ -34,13 +34,10 @@ #include #include #include -#include #include "../../common/header/common.h" #include "header/qal.h" -#define GPA(a) (void *)GetProcAddress(handle, a) - static ALCcontext *context; static ALCdevice *device; static cvar_t *al_device; @@ -324,7 +321,7 @@ QAL_Shutdown() qalDeleteFilters = NULL; /* Unload the shared lib */ - FreeLibrary(handle); + Sys_FreeLibrary(handle); handle = NULL; } @@ -336,13 +333,13 @@ qboolean QAL_Init() { /* DEFAULT_OPENAL_DRIVER is defined at compile time via the compiler */ - al_driver = Cvar_Get( "al_driver", DEFAULT_OPENAL_DRIVER, CVAR_ARCHIVE ); - al_device = Cvar_Get( "al_device", "", CVAR_ARCHIVE ); + al_driver = Cvar_Get("al_driver", DEFAULT_OPENAL_DRIVER, CVAR_ARCHIVE); + al_device = Cvar_Get("al_device", "", CVAR_ARCHIVE); Com_Printf("LoadLibrary(%s)\n", al_driver->string); /* Load the library */ - handle = LoadLibrary( al_driver->string ); + Sys_LoadLibrary(al_driver->string, NULL, &handle); if (!handle) { @@ -351,106 +348,106 @@ QAL_Init() } /* Connect function pointers to management functions */ - qalcCreateContext = GPA("alcCreateContext"); - qalcMakeContextCurrent = GPA("alcMakeContextCurrent"); - qalcProcessContext = GPA("alcProcessContext"); - qalcSuspendContext = GPA("alcSuspendContext"); - qalcDestroyContext = GPA("alcDestroyContext"); - qalcGetCurrentContext = GPA("alcGetCurrentContext"); - qalcGetContextsDevice = GPA("alcGetContextsDevice"); - qalcOpenDevice = GPA("alcOpenDevice"); - qalcCloseDevice = GPA("alcCloseDevice"); - qalcGetError = GPA("alcGetError"); - qalcIsExtensionPresent = GPA("alcIsExtensionPresent"); - qalcGetProcAddress = GPA("alcGetProcAddress"); - qalcGetEnumValue = GPA("alcGetEnumValue"); - qalcGetString = GPA("alcGetString"); - qalcGetIntegerv = GPA("alcGetIntegerv"); - qalcCaptureOpenDevice = GPA("alcCaptureOpenDevice"); - qalcCaptureCloseDevice = GPA("alcCaptureCloseDevice"); - qalcCaptureStart = GPA("alcCaptureStart"); - qalcCaptureStop = GPA("alcCaptureStop"); - qalcCaptureSamples = GPA("alcCaptureSamples"); + qalcCreateContext = Sys_GetProcAddress(handle, "alcCreateContext"); + qalcMakeContextCurrent = Sys_GetProcAddress(handle, "alcMakeContextCurrent"); + qalcProcessContext = Sys_GetProcAddress(handle, "alcProcessContext"); + qalcSuspendContext = Sys_GetProcAddress(handle, "alcSuspendContext"); + qalcDestroyContext = Sys_GetProcAddress(handle, "alcDestroyContext"); + qalcGetCurrentContext = Sys_GetProcAddress(handle, "alcGetCurrentContext"); + qalcGetContextsDevice = Sys_GetProcAddress(handle, "alcGetContextsDevice"); + qalcOpenDevice = Sys_GetProcAddress(handle, "alcOpenDevice"); + qalcCloseDevice = Sys_GetProcAddress(handle, "alcCloseDevice"); + qalcGetError = Sys_GetProcAddress(handle, "alcGetError"); + qalcIsExtensionPresent = Sys_GetProcAddress(handle, "alcIsExtensionPresent"); + qalcGetProcAddress = Sys_GetProcAddress(handle, "alcGetProcAddress"); + qalcGetEnumValue = Sys_GetProcAddress(handle, "alcGetEnumValue"); + qalcGetString = Sys_GetProcAddress(handle, "alcGetString"); + qalcGetIntegerv = Sys_GetProcAddress(handle, "alcGetIntegerv"); + qalcCaptureOpenDevice = Sys_GetProcAddress(handle, "alcCaptureOpenDevice"); + qalcCaptureCloseDevice = Sys_GetProcAddress(handle, "alcCaptureCloseDevice"); + qalcCaptureStart = Sys_GetProcAddress(handle, "alcCaptureStart"); + qalcCaptureStop = Sys_GetProcAddress(handle, "alcCaptureStop"); + qalcCaptureSamples = Sys_GetProcAddress(handle, "alcCaptureSamples"); /* Connect function pointers to to OpenAL API functions */ - qalEnable = GPA("alEnable"); - qalDisable = GPA("alDisable"); - qalIsEnabled = GPA("alIsEnabled"); - qalGetString = GPA("alGetString"); - qalGetBooleanv = GPA("alGetBooleanv"); - qalGetIntegerv = GPA("alGetIntegerv"); - qalGetFloatv = GPA("alGetFloatv"); - qalGetDoublev = GPA("alGetDoublev"); - qalGetBoolean = GPA("alGetBoolean"); - qalGetInteger = GPA("alGetInteger"); - qalGetFloat = GPA("alGetFloat"); - qalGetDouble = GPA("alGetDouble"); - qalGetError = GPA("alGetError"); - qalIsExtensionPresent = GPA("alIsExtensionPresent"); - qalGetProcAddress = GPA("alGetProcAddress"); - qalGetEnumValue = GPA("alGetEnumValue"); - qalListenerf = GPA("alListenerf"); - qalListener3f = GPA("alListener3f"); - qalListenerfv = GPA("alListenerfv"); - qalListeneri = GPA("alListeneri"); - qalListener3i = GPA("alListener3i"); - qalListeneriv = GPA("alListeneriv"); - qalGetListenerf = GPA("alGetListenerf"); - qalGetListener3f = GPA("alGetListener3f"); - qalGetListenerfv = GPA("alGetListenerfv"); - qalGetListeneri = GPA("alGetListeneri"); - qalGetListener3i = GPA("alGetListener3i"); - qalGetListeneriv = GPA("alGetListeneriv"); - qalGenSources = GPA("alGenSources"); - qalDeleteSources = GPA("alDeleteSources"); - qalIsSource = GPA("alIsSource"); - qalSourcef = GPA("alSourcef"); - qalSource3f = GPA("alSource3f"); - qalSourcefv = GPA("alSourcefv"); - qalSourcei = GPA("alSourcei"); - qalSource3i = GPA("alSource3i"); - qalSourceiv = GPA("alSourceiv"); - qalGetSourcef = GPA("alGetSourcef"); - qalGetSource3f = GPA("alGetSource3f"); - qalGetSourcefv = GPA("alGetSourcefv"); - qalGetSourcei = GPA("alGetSourcei"); - qalGetSource3i = GPA("alGetSource3i"); - qalGetSourceiv = GPA("alGetSourceiv"); - qalSourcePlayv = GPA("alSourcePlayv"); - qalSourceStopv = GPA("alSourceStopv"); - qalSourceRewindv = GPA("alSourceRewindv"); - qalSourcePausev = GPA("alSourcePausev"); - qalSourcePlay = GPA("alSourcePlay"); - qalSourceStop = GPA("alSourceStop"); - qalSourceRewind = GPA("alSourceRewind"); - qalSourcePause = GPA("alSourcePause"); - qalSourceQueueBuffers = GPA("alSourceQueueBuffers"); - qalSourceUnqueueBuffers = GPA("alSourceUnqueueBuffers"); - qalGenBuffers = GPA("alGenBuffers"); - qalDeleteBuffers = GPA("alDeleteBuffers"); - qalIsBuffer = GPA("alIsBuffer"); - qalBufferData = GPA("alBufferData"); - qalBufferf = GPA("alBufferf"); - qalBuffer3f = GPA("alBuffer3f"); - qalBufferfv = GPA("alBufferfv"); - qalBufferi = GPA("alBufferi"); - qalBuffer3i = GPA("alBuffer3i"); - qalBufferiv = GPA("alBufferiv"); - qalGetBufferf = GPA("alGetBufferf"); - qalGetBuffer3f = GPA("alGetBuffer3f"); - qalGetBufferfv = GPA("alGetBufferfv"); - qalGetBufferi = GPA("alGetBufferi"); - qalGetBuffer3i = GPA("alGetBuffer3i"); - qalGetBufferiv = GPA("alGetBufferiv"); - qalDopplerFactor = GPA("alDopplerFactor"); - qalDopplerVelocity = GPA("alDopplerVelocity"); - qalSpeedOfSound = GPA("alSpeedOfSound"); - qalDistanceModel = GPA("alDistanceModel"); - qalGenFilters = GPA("alGenFilters"); - qalFilteri = GPA("alFilteri"); - qalFilterf = GPA("alFilterf"); - qalDeleteFilters = GPA("alDeleteFilters"); + qalEnable = Sys_GetProcAddress(handle, "alEnable"); + qalDisable = Sys_GetProcAddress(handle, "alDisable"); + qalIsEnabled = Sys_GetProcAddress(handle, "alIsEnabled"); + qalGetString = Sys_GetProcAddress(handle, "alGetString"); + qalGetBooleanv = Sys_GetProcAddress(handle, "alGetBooleanv"); + qalGetIntegerv = Sys_GetProcAddress(handle, "alGetIntegerv"); + qalGetFloatv = Sys_GetProcAddress(handle, "alGetFloatv"); + qalGetDoublev = Sys_GetProcAddress(handle, "alGetDoublev"); + qalGetBoolean = Sys_GetProcAddress(handle, "alGetBoolean"); + qalGetInteger = Sys_GetProcAddress(handle, "alGetInteger"); + qalGetFloat = Sys_GetProcAddress(handle, "alGetFloat"); + qalGetDouble = Sys_GetProcAddress(handle, "alGetDouble"); + qalGetError = Sys_GetProcAddress(handle, "alGetError"); + qalIsExtensionPresent = Sys_GetProcAddress(handle, "alIsExtensionPresent"); + qalGetProcAddress = Sys_GetProcAddress(handle, "alGetProcAddress"); + qalGetEnumValue = Sys_GetProcAddress(handle, "alGetEnumValue"); + qalListenerf = Sys_GetProcAddress(handle, "alListenerf"); + qalListener3f = Sys_GetProcAddress(handle, "alListener3f"); + qalListenerfv = Sys_GetProcAddress(handle, "alListenerfv"); + qalListeneri = Sys_GetProcAddress(handle, "alListeneri"); + qalListener3i = Sys_GetProcAddress(handle, "alListener3i"); + qalListeneriv = Sys_GetProcAddress(handle, "alListeneriv"); + qalGetListenerf = Sys_GetProcAddress(handle, "alGetListenerf"); + qalGetListener3f = Sys_GetProcAddress(handle, "alGetListener3f"); + qalGetListenerfv = Sys_GetProcAddress(handle, "alGetListenerfv"); + qalGetListeneri = Sys_GetProcAddress(handle, "alGetListeneri"); + qalGetListener3i = Sys_GetProcAddress(handle, "alGetListener3i"); + qalGetListeneriv = Sys_GetProcAddress(handle, "alGetListeneriv"); + qalGenSources = Sys_GetProcAddress(handle, "alGenSources"); + qalDeleteSources = Sys_GetProcAddress(handle, "alDeleteSources"); + qalIsSource = Sys_GetProcAddress(handle, "alIsSource"); + qalSourcef = Sys_GetProcAddress(handle, "alSourcef"); + qalSource3f = Sys_GetProcAddress(handle, "alSource3f"); + qalSourcefv = Sys_GetProcAddress(handle, "alSourcefv"); + qalSourcei = Sys_GetProcAddress(handle, "alSourcei"); + qalSource3i = Sys_GetProcAddress(handle, "alSource3i"); + qalSourceiv = Sys_GetProcAddress(handle, "alSourceiv"); + qalGetSourcef = Sys_GetProcAddress(handle, "alGetSourcef"); + qalGetSource3f = Sys_GetProcAddress(handle, "alGetSource3f"); + qalGetSourcefv = Sys_GetProcAddress(handle, "alGetSourcefv"); + qalGetSourcei = Sys_GetProcAddress(handle, "alGetSourcei"); + qalGetSource3i = Sys_GetProcAddress(handle, "alGetSource3i"); + qalGetSourceiv = Sys_GetProcAddress(handle, "alGetSourceiv"); + qalSourcePlayv = Sys_GetProcAddress(handle, "alSourcePlayv"); + qalSourceStopv = Sys_GetProcAddress(handle, "alSourceStopv"); + qalSourceRewindv = Sys_GetProcAddress(handle, "alSourceRewindv"); + qalSourcePausev = Sys_GetProcAddress(handle, "alSourcePausev"); + qalSourcePlay = Sys_GetProcAddress(handle, "alSourcePlay"); + qalSourceStop = Sys_GetProcAddress(handle, "alSourceStop"); + qalSourceRewind = Sys_GetProcAddress(handle, "alSourceRewind"); + qalSourcePause = Sys_GetProcAddress(handle, "alSourcePause"); + qalSourceQueueBuffers = Sys_GetProcAddress(handle, "alSourceQueueBuffers"); + qalSourceUnqueueBuffers = Sys_GetProcAddress(handle, "alSourceUnqueueBuffers"); + qalGenBuffers = Sys_GetProcAddress(handle, "alGenBuffers"); + qalDeleteBuffers = Sys_GetProcAddress(handle, "alDeleteBuffers"); + qalIsBuffer = Sys_GetProcAddress(handle, "alIsBuffer"); + qalBufferData = Sys_GetProcAddress(handle, "alBufferData"); + qalBufferf = Sys_GetProcAddress(handle, "alBufferf"); + qalBuffer3f = Sys_GetProcAddress(handle, "alBuffer3f"); + qalBufferfv = Sys_GetProcAddress(handle, "alBufferfv"); + qalBufferi = Sys_GetProcAddress(handle, "alBufferi"); + qalBuffer3i = Sys_GetProcAddress(handle, "alBuffer3i"); + qalBufferiv = Sys_GetProcAddress(handle, "alBufferiv"); + qalGetBufferf = Sys_GetProcAddress(handle, "alGetBufferf"); + qalGetBuffer3f = Sys_GetProcAddress(handle, "alGetBuffer3f"); + qalGetBufferfv = Sys_GetProcAddress(handle, "alGetBufferfv"); + qalGetBufferi = Sys_GetProcAddress(handle, "alGetBufferi"); + qalGetBuffer3i = Sys_GetProcAddress(handle, "alGetBuffer3i"); + qalGetBufferiv = Sys_GetProcAddress(handle, "alGetBufferiv"); + qalDopplerFactor = Sys_GetProcAddress(handle, "alDopplerFactor"); + qalDopplerVelocity = Sys_GetProcAddress(handle, "alDopplerVelocity"); + qalSpeedOfSound = Sys_GetProcAddress(handle, "alSpeedOfSound"); + qalDistanceModel = Sys_GetProcAddress(handle, "alDistanceModel"); + qalGenFilters = Sys_GetProcAddress(handle, "alGenFilters"); + qalFilteri = Sys_GetProcAddress(handle, "alFilteri"); + qalFilterf = Sys_GetProcAddress(handle, "alFilterf"); + qalDeleteFilters = Sys_GetProcAddress(handle, "alDeleteFilters"); /* Open the OpenAL device */ Com_Printf("...opening OpenAL device:"); diff --git a/src/backends/unix/qal.c b/src/backends/unix/qal.c deleted file mode 100644 index 74deec1f..00000000 --- a/src/backends/unix/qal.c +++ /dev/null @@ -1,501 +0,0 @@ -/* - * Copyright (C) 2012 Yamagi Burmeister - * Copyright (C) 2010 skuller.net - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * ======================================================================= - * - * Low level, platform depended "qal" API implementation. This files - * provides functions to load, initialize, shutdown und unload the - * OpenAL library and connects the "qal" funtion pointers to the - * OpenAL functions. This source file was taken from Q2Pro and - * modified by the YQ2 authors. - * - * ======================================================================= - */ - -#ifdef USE_OPENAL - -#include -#include -#include -#include - -#include "../../common/header/common.h" -#include "header/qal.h" - -static ALCcontext *context; -static ALCdevice *device; -static cvar_t *al_device; -static cvar_t *al_driver; -static void *handle; - -/* Function pointers for OpenAL management */ -static LPALCCREATECONTEXT qalcCreateContext; -static LPALCMAKECONTEXTCURRENT qalcMakeContextCurrent; -static LPALCPROCESSCONTEXT qalcProcessContext; -static LPALCSUSPENDCONTEXT qalcSuspendContext; -static LPALCDESTROYCONTEXT qalcDestroyContext; -static LPALCGETCURRENTCONTEXT qalcGetCurrentContext; -static LPALCGETCONTEXTSDEVICE qalcGetContextsDevice; -static LPALCOPENDEVICE qalcOpenDevice; -static LPALCCLOSEDEVICE qalcCloseDevice; -static LPALCGETERROR qalcGetError; -static LPALCISEXTENSIONPRESENT qalcIsExtensionPresent; -static LPALCGETPROCADDRESS qalcGetProcAddress; -static LPALCGETENUMVALUE qalcGetEnumValue; -static LPALCGETSTRING qalcGetString; -static LPALCGETINTEGERV qalcGetIntegerv; -static LPALCCAPTUREOPENDEVICE qalcCaptureOpenDevice; -static LPALCCAPTURECLOSEDEVICE qalcCaptureCloseDevice; -static LPALCCAPTURESTART qalcCaptureStart; -static LPALCCAPTURESTOP qalcCaptureStop; -static LPALCCAPTURESAMPLES qalcCaptureSamples ; - -/* Declaration of function pointers used - to connect OpenAL to our internal API */ -LPALENABLE qalEnable; -LPALDISABLE qalDisable; -LPALISENABLED qalIsEnabled; -LPALGETSTRING qalGetString; -LPALGETBOOLEANV qalGetBooleanv; -LPALGETINTEGERV qalGetIntegerv; -LPALGETFLOATV qalGetFloatv; -LPALGETDOUBLEV qalGetDoublev; -LPALGETBOOLEAN qalGetBoolean; -LPALGETINTEGER qalGetInteger; -LPALGETFLOAT qalGetFloat; -LPALGETDOUBLE qalGetDouble; -LPALGETERROR qalGetError; -LPALISEXTENSIONPRESENT qalIsExtensionPresent; -LPALGETPROCADDRESS qalGetProcAddress; -LPALGETENUMVALUE qalGetEnumValue; -LPALLISTENERF qalListenerf; -LPALLISTENER3F qalListener3f; -LPALLISTENERFV qalListenerfv; -LPALLISTENERI qalListeneri; -LPALLISTENER3I qalListener3i; -LPALLISTENERIV qalListeneriv; -LPALGETLISTENERF qalGetListenerf; -LPALGETLISTENER3F qalGetListener3f; -LPALGETLISTENERFV qalGetListenerfv; -LPALGETLISTENERI qalGetListeneri; -LPALGETLISTENER3I qalGetListener3i; -LPALGETLISTENERIV qalGetListeneriv; -LPALGENSOURCES qalGenSources; -LPALDELETESOURCES qalDeleteSources; -LPALISSOURCE qalIsSource; -LPALSOURCEF qalSourcef; -LPALSOURCE3F qalSource3f; -LPALSOURCEFV qalSourcefv; -LPALSOURCEI qalSourcei; -LPALSOURCE3I qalSource3i; -LPALSOURCEIV qalSourceiv; -LPALGETSOURCEF qalGetSourcef; -LPALGETSOURCE3F qalGetSource3f; -LPALGETSOURCEFV qalGetSourcefv; -LPALGETSOURCEI qalGetSourcei; -LPALGETSOURCE3I qalGetSource3i; -LPALGETSOURCEIV qalGetSourceiv; -LPALSOURCEPLAYV qalSourcePlayv; -LPALSOURCESTOPV qalSourceStopv; -LPALSOURCEREWINDV qalSourceRewindv; -LPALSOURCEPAUSEV qalSourcePausev; -LPALSOURCEPLAY qalSourcePlay; -LPALSOURCESTOP qalSourceStop; -LPALSOURCEREWIND qalSourceRewind; -LPALSOURCEPAUSE qalSourcePause; -LPALSOURCEQUEUEBUFFERS qalSourceQueueBuffers; -LPALSOURCEUNQUEUEBUFFERS qalSourceUnqueueBuffers; -LPALGENBUFFERS qalGenBuffers; -LPALDELETEBUFFERS qalDeleteBuffers; -LPALISBUFFER qalIsBuffer; -LPALBUFFERDATA qalBufferData; -LPALBUFFERF qalBufferf; -LPALBUFFER3F qalBuffer3f; -LPALBUFFERFV qalBufferfv; -LPALBUFFERI qalBufferi; -LPALBUFFER3I qalBuffer3i; -LPALBUFFERIV qalBufferiv; -LPALGETBUFFERF qalGetBufferf; -LPALGETBUFFER3F qalGetBuffer3f; -LPALGETBUFFERFV qalGetBufferfv; -LPALGETBUFFERI qalGetBufferi; -LPALGETBUFFER3I qalGetBuffer3i; -LPALGETBUFFERIV qalGetBufferiv; -LPALDOPPLERFACTOR qalDopplerFactor; -LPALDOPPLERVELOCITY qalDopplerVelocity; -LPALSPEEDOFSOUND qalSpeedOfSound; -LPALDISTANCEMODEL qalDistanceModel; -LPALGENFILTERS qalGenFilters; -LPALFILTERI qalFilteri; -LPALFILTERF qalFilterf; -LPALDELETEFILTERS qalDeleteFilters; - -/* - * Gives information over the OpenAL - * implementation and it's state - */ -void QAL_SoundInfo() -{ - Com_Printf("OpenAL settings:\n"); - Com_Printf("AL_VENDOR: %s\n", qalGetString(AL_VENDOR)); - Com_Printf("AL_RENDERER: %s\n", qalGetString(AL_RENDERER)); - Com_Printf("AL_VERSION: %s\n", qalGetString(AL_VERSION)); - Com_Printf("AL_EXTENSIONS: %s\n", qalGetString(AL_EXTENSIONS)); - - if (qalcIsExtensionPresent(NULL, "ALC_ENUMERATE_ALL_EXT")) - { - const char *devs = qalcGetString(NULL, ALC_ALL_DEVICES_SPECIFIER); - - Com_Printf("\nAvailable OpenAL devices:\n"); - - if (devs == NULL) - { - Com_Printf("- No devices found. Depending on your\n"); - Com_Printf(" platform this may be expected and\n"); - Com_Printf(" doesn't indicate a problem!\n"); - } - else - { - while (devs && *devs) - { - Com_Printf("- %s\n", devs); - devs += strlen(devs) + 1; - } - } - } - - if (qalcIsExtensionPresent(NULL, "ALC_ENUMERATE_ALL_EXT")) - { - const char *devs = qalcGetString(device, ALC_DEVICE_SPECIFIER); - - Com_Printf("\nCurrent OpenAL device:\n"); - - if (devs == NULL) - { - Com_Printf("- No OpenAL device in use\n"); - } - else - { - Com_Printf("- %s\n", devs); - } - } -} - -/* - * Shuts OpenAL down, frees all context and - * device handles and unloads the shared lib. - */ -void -QAL_Shutdown() -{ - if (context) - { - qalcMakeContextCurrent( NULL ); - qalcDestroyContext( context ); - context = NULL; - } - - if (device) - { - qalcCloseDevice( device ); - device = NULL; - } - - /* Disconnect function pointers used - for OpenAL management calls */ - qalcCreateContext = NULL; - qalcMakeContextCurrent = NULL; - qalcProcessContext = NULL; - qalcSuspendContext = NULL; - qalcDestroyContext = NULL; - qalcGetCurrentContext = NULL; - qalcGetContextsDevice = NULL; - qalcOpenDevice = NULL; - qalcCloseDevice = NULL; - qalcGetError = NULL; - qalcIsExtensionPresent = NULL; - qalcGetProcAddress = NULL; - qalcGetEnumValue = NULL; - qalcGetString = NULL; - qalcGetIntegerv = NULL; - qalcCaptureOpenDevice = NULL; - qalcCaptureCloseDevice = NULL; - qalcCaptureStart = NULL; - qalcCaptureStop = NULL; - qalcCaptureSamples = NULL; - - /* Disconnect OpenAL - * function pointers */ - qalEnable = NULL; - qalDisable = NULL; - qalIsEnabled = NULL; - qalGetString = NULL; - qalGetBooleanv = NULL; - qalGetIntegerv = NULL; - qalGetFloatv = NULL; - qalGetDoublev = NULL; - qalGetBoolean = NULL; - qalGetInteger = NULL; - qalGetFloat = NULL; - qalGetDouble = NULL; - qalGetError = NULL; - qalIsExtensionPresent = NULL; - qalGetProcAddress = NULL; - qalGetEnumValue = NULL; - qalListenerf = NULL; - qalListener3f = NULL; - qalListenerfv = NULL; - qalListeneri = NULL; - qalListener3i = NULL; - qalListeneriv = NULL; - qalGetListenerf = NULL; - qalGetListener3f = NULL; - qalGetListenerfv = NULL; - qalGetListeneri = NULL; - qalGetListener3i = NULL; - qalGetListeneriv = NULL; - qalGenSources = NULL; - qalDeleteSources = NULL; - qalIsSource = NULL; - qalSourcef = NULL; - qalSource3f = NULL; - qalSourcefv = NULL; - qalSourcei = NULL; - qalSource3i = NULL; - qalSourceiv = NULL; - qalGetSourcef = NULL; - qalGetSource3f = NULL; - qalGetSourcefv = NULL; - qalGetSourcei = NULL; - qalGetSource3i = NULL; - qalGetSourceiv = NULL; - qalSourcePlayv = NULL; - qalSourceStopv = NULL; - qalSourceRewindv = NULL; - qalSourcePausev = NULL; - qalSourcePlay = NULL; - qalSourceStop = NULL; - qalSourceRewind = NULL; - qalSourcePause = NULL; - qalSourceQueueBuffers = NULL; - qalSourceUnqueueBuffers = NULL; - qalGenBuffers = NULL; - qalDeleteBuffers = NULL; - qalIsBuffer = NULL; - qalBufferData = NULL; - qalBufferf = NULL; - qalBuffer3f = NULL; - qalBufferfv = NULL; - qalBufferi = NULL; - qalBuffer3i = NULL; - qalBufferiv = NULL; - qalGetBufferf = NULL; - qalGetBuffer3f = NULL; - qalGetBufferfv = NULL; - qalGetBufferi = NULL; - qalGetBuffer3i = NULL; - qalGetBufferiv = NULL; - qalDopplerFactor = NULL; - qalDopplerVelocity = NULL; - qalSpeedOfSound = NULL; - qalDistanceModel = NULL; - qalGenFilters = NULL; - qalFilteri = NULL; - qalFilterf = NULL; - qalDeleteFilters = NULL; - - /* Unload the shared lib */ - dlclose(handle); - handle = NULL; -} - -/* - * Loads the OpenAL shared lib, creates - * a context and device handle. - */ -qboolean -QAL_Init() -{ - /* DEFAULT_OPENAL_DRIVER is defined at compile time via the compiler */ - al_driver = Cvar_Get( "al_driver", DEFAULT_OPENAL_DRIVER, CVAR_ARCHIVE ); - al_device = Cvar_Get( "al_device", "", CVAR_ARCHIVE ); - - Com_Printf("LoadLibrary(%s)\n", al_driver->string); - - /* Load the library */ - handle = dlopen( al_driver->string, RTLD_LAZY ); - - if (!handle) - { - Com_Printf("Loading %s failed! Disabling OpenAL.\n", al_driver->string); - return false; - } - - /* Connect function pointers to management functions */ - qalcCreateContext = dlsym(handle, "alcCreateContext"); - qalcMakeContextCurrent = dlsym(handle, "alcMakeContextCurrent"); - qalcProcessContext = dlsym(handle, "alcProcessContext"); - qalcSuspendContext = dlsym(handle, "alcSuspendContext"); - qalcDestroyContext = dlsym(handle, "alcDestroyContext"); - qalcGetCurrentContext = dlsym(handle, "alcGetCurrentContext"); - qalcGetContextsDevice = dlsym(handle, "alcGetContextsDevice"); - qalcOpenDevice = dlsym(handle, "alcOpenDevice"); - qalcCloseDevice = dlsym(handle, "alcCloseDevice"); - qalcGetError = dlsym(handle, "alcGetError"); - qalcIsExtensionPresent = dlsym(handle, "alcIsExtensionPresent"); - qalcGetProcAddress = dlsym(handle, "alcGetProcAddress"); - qalcGetEnumValue = dlsym(handle, "alcGetEnumValue"); - qalcGetString = dlsym(handle, "alcGetString"); - qalcGetIntegerv = dlsym(handle, "alcGetIntegerv"); - qalcCaptureOpenDevice = dlsym(handle, "alcCaptureOpenDevice"); - qalcCaptureCloseDevice = dlsym(handle, "alcCaptureCloseDevice"); - qalcCaptureStart = dlsym(handle, "alcCaptureStart"); - qalcCaptureStop = dlsym(handle, "alcCaptureStop"); - qalcCaptureSamples = dlsym(handle, "alcCaptureSamples"); - - /* Connect function pointers to - to OpenAL API functions */ - qalEnable = dlsym(handle, "alEnable"); - qalDisable = dlsym(handle, "alDisable"); - qalIsEnabled = dlsym(handle, "alIsEnabled"); - qalGetString = dlsym(handle, "alGetString"); - qalGetBooleanv = dlsym(handle, "alGetBooleanv"); - qalGetIntegerv = dlsym(handle, "alGetIntegerv"); - qalGetFloatv = dlsym(handle, "alGetFloatv"); - qalGetDoublev = dlsym(handle, "alGetDoublev"); - qalGetBoolean = dlsym(handle, "alGetBoolean"); - qalGetInteger = dlsym(handle, "alGetInteger"); - qalGetFloat = dlsym(handle, "alGetFloat"); - qalGetDouble = dlsym(handle, "alGetDouble"); - qalGetError = dlsym(handle, "alGetError"); - qalIsExtensionPresent = dlsym(handle, "alIsExtensionPresent"); - qalGetProcAddress = dlsym(handle, "alGetProcAddress"); - qalGetEnumValue = dlsym(handle, "alGetEnumValue"); - qalListenerf = dlsym(handle, "alListenerf"); - qalListener3f = dlsym(handle, "alListener3f"); - qalListenerfv = dlsym(handle, "alListenerfv"); - qalListeneri = dlsym(handle, "alListeneri"); - qalListener3i = dlsym(handle, "alListener3i"); - qalListeneriv = dlsym(handle, "alListeneriv"); - qalGetListenerf = dlsym(handle, "alGetListenerf"); - qalGetListener3f = dlsym(handle, "alGetListener3f"); - qalGetListenerfv = dlsym(handle, "alGetListenerfv"); - qalGetListeneri = dlsym(handle, "alGetListeneri"); - qalGetListener3i = dlsym(handle, "alGetListener3i"); - qalGetListeneriv = dlsym(handle, "alGetListeneriv"); - qalGenSources = dlsym(handle, "alGenSources"); - qalDeleteSources = dlsym(handle, "alDeleteSources"); - qalIsSource = dlsym(handle, "alIsSource"); - qalSourcef = dlsym(handle, "alSourcef"); - qalSource3f = dlsym(handle, "alSource3f"); - qalSourcefv = dlsym(handle, "alSourcefv"); - qalSourcei = dlsym(handle, "alSourcei"); - qalSource3i = dlsym(handle, "alSource3i"); - qalSourceiv = dlsym(handle, "alSourceiv"); - qalGetSourcef = dlsym(handle, "alGetSourcef"); - qalGetSource3f = dlsym(handle, "alGetSource3f"); - qalGetSourcefv = dlsym(handle, "alGetSourcefv"); - qalGetSourcei = dlsym(handle, "alGetSourcei"); - qalGetSource3i = dlsym(handle, "alGetSource3i"); - qalGetSourceiv = dlsym(handle, "alGetSourceiv"); - qalSourcePlayv = dlsym(handle, "alSourcePlayv"); - qalSourceStopv = dlsym(handle, "alSourceStopv"); - qalSourceRewindv = dlsym(handle, "alSourceRewindv"); - qalSourcePausev = dlsym(handle, "alSourcePausev"); - qalSourcePlay = dlsym(handle, "alSourcePlay"); - qalSourceStop = dlsym(handle, "alSourceStop"); - qalSourceRewind = dlsym(handle, "alSourceRewind"); - qalSourcePause = dlsym(handle, "alSourcePause"); - qalSourceQueueBuffers = dlsym(handle, "alSourceQueueBuffers"); - qalSourceUnqueueBuffers = dlsym(handle, "alSourceUnqueueBuffers"); - qalGenBuffers = dlsym(handle, "alGenBuffers"); - qalDeleteBuffers = dlsym(handle, "alDeleteBuffers"); - qalIsBuffer = dlsym(handle, "alIsBuffer"); - qalBufferData = dlsym(handle, "alBufferData"); - qalBufferf = dlsym(handle, "alBufferf"); - qalBuffer3f = dlsym(handle, "alBuffer3f"); - qalBufferfv = dlsym(handle, "alBufferfv"); - qalBufferi = dlsym(handle, "alBufferi"); - qalBuffer3i = dlsym(handle, "alBuffer3i"); - qalBufferiv = dlsym(handle, "alBufferiv"); - qalGetBufferf = dlsym(handle, "alGetBufferf"); - qalGetBuffer3f = dlsym(handle, "alGetBuffer3f"); - qalGetBufferfv = dlsym(handle, "alGetBufferfv"); - qalGetBufferi = dlsym(handle, "alGetBufferi"); - qalGetBuffer3i = dlsym(handle, "alGetBuffer3i"); - qalGetBufferiv = dlsym(handle, "alGetBufferiv"); - qalDopplerFactor = dlsym(handle, "alDopplerFactor"); - qalDopplerVelocity = dlsym(handle, "alDopplerVelocity"); - qalSpeedOfSound = dlsym(handle, "alSpeedOfSound"); - qalDistanceModel = dlsym(handle, "alDistanceModel"); - qalGenFilters = dlsym(handle, "alGenFilters"); - qalFilteri = dlsym(handle, "alFilteri"); - qalFilterf = dlsym(handle, "alFilterf"); - qalDeleteFilters = dlsym(handle, "alDeleteFilters"); - - /* Open the OpenAL device */ - Com_Printf("...opening OpenAL device:"); - - device = qalcOpenDevice(al_device->string[0] ? al_device->string : NULL); - - if(!device) - { - Com_DPrintf("failed\n"); - QAL_Shutdown(); - return false; - } - - Com_Printf("ok\n"); - - /* Create the OpenAL context */ - Com_Printf("...creating OpenAL context: "); - - context = qalcCreateContext(device, NULL); - - if(!context) - { - Com_DPrintf("failed\n"); - QAL_Shutdown(); - return false; - } - - Com_Printf("ok\n"); - - /* Set the created context as current context */ - Com_Printf("...making context current: "); - - if (!qalcMakeContextCurrent(context)) - { - Com_DPrintf("failed\n"); - QAL_Shutdown(); - return false; - } - - Com_Printf("ok\n"); - - /* Print OpenAL informations */ - Com_Printf("\n"); - QAL_SoundInfo(); - Com_Printf("\n"); - - return true; -} - -#endif /* USE_OPENAL */ diff --git a/src/backends/unix/system.c b/src/backends/unix/system.c index 3bd337a4..603dd84d 100644 --- a/src/backends/unix/system.c +++ b/src/backends/unix/system.c @@ -495,3 +495,56 @@ Sys_GetHomeDir(void) return gdir; } +void * +Sys_GetProcAddress(void *handle, const char *sym) +{ + return dlsym(handle, sym); +} + +void * +Sys_LoadLibrary(const char *path, const char *sym, void **handle) +{ + void *module, *entry; + + *handle = NULL; + + module = dlopen(path, RTLD_LAZY); + + if (!module) + { + Com_DPrintf("%s failed: %s\n", __func__, dlerror()); + return NULL; + } + + if (sym) + { + entry = dlsym(module, sym); + + if (!entry) + { + Com_DPrintf("%s failed: %s\n", __func__, dlerror()); + dlclose(module); + return NULL; + } + } + else + { + entry = NULL; + } + + Com_DPrintf("%s succeeded: %s\n", __func__, path); + + *handle = module; + + return entry; +} + +void +Sys_FreeLibrary(void *handle) +{ + if (handle && dlclose(handle)) + { + Com_Error(ERR_FATAL, "dlclose failed on %p: %s", handle, dlerror()); + } +} + diff --git a/src/backends/windows/header/qal.h b/src/backends/windows/header/qal.h deleted file mode 100644 index 5b09823b..00000000 --- a/src/backends/windows/header/qal.h +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (C) 2012 Yamagi Burmeister - * Copyright (C) 2010 skuller.net - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or (at - * your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - * See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - * - * ======================================================================= - * - * Header file to the low level "qal" API implementation. This source file - * was taken from Q2Pro and modified by the YQ2 authors. - * - * ======================================================================= - */ - -#ifdef USE_OPENAL - -#ifndef WIN_QAL_API_H_ -#define WIN_QAL_API_H_ - -#include -#include - -/* Function pointers used to tie - the qal API to the OpenAL API */ -extern LPALENABLE qalEnable; -extern LPALDISABLE qalDisable; -extern LPALISENABLED qalIsEnabled; -extern LPALGETSTRING qalGetString; -extern LPALGETBOOLEANV qalGetBooleanv; -extern LPALGETINTEGERV qalGetIntegerv; -extern LPALGETFLOATV qalGetFloatv; -extern LPALGETDOUBLEV qalGetDoublev; -extern LPALGETBOOLEAN qalGetBoolean; -extern LPALGETINTEGER qalGetInteger; -extern LPALGETFLOAT qalGetFloat; -extern LPALGETDOUBLE qalGetDouble; -extern LPALGETERROR qalGetError; -extern LPALISEXTENSIONPRESENT qalIsExtensionPresent; -extern LPALGETPROCADDRESS qalGetProcAddress; -extern LPALGETENUMVALUE qalGetEnumValue; -extern LPALLISTENERF qalListenerf; -extern LPALLISTENER3F qalListener3f; -extern LPALLISTENERFV qalListenerfv; -extern LPALLISTENERI qalListeneri; -extern LPALLISTENER3I qalListener3i; -extern LPALLISTENERIV qalListeneriv; -extern LPALGETLISTENERF qalGetListenerf; -extern LPALGETLISTENER3F qalGetListener3f; -extern LPALGETLISTENERFV qalGetListenerfv; -extern LPALGETLISTENERI qalGetListeneri; -extern LPALGETLISTENER3I qalGetListener3i; -extern LPALGETLISTENERIV qalGetListeneriv; -extern LPALGENSOURCES qalGenSources; -extern LPALDELETESOURCES qalDeleteSources; -extern LPALISSOURCE qalIsSource; -extern LPALSOURCEF qalSourcef; -extern LPALSOURCE3F qalSource3f; -extern LPALSOURCEFV qalSourcefv; -extern LPALSOURCEI qalSourcei; -extern LPALSOURCE3I qalSource3i; -extern LPALSOURCEIV qalSourceiv; -extern LPALGETSOURCEF qalGetSourcef; -extern LPALGETSOURCE3F qalGetSource3f; -extern LPALGETSOURCEFV qalGetSourcefv; -extern LPALGETSOURCEI qalGetSourcei; -extern LPALGETSOURCE3I qalGetSource3i; -extern LPALGETSOURCEIV qalGetSourceiv; -extern LPALSOURCEPLAYV qalSourcePlayv; -extern LPALSOURCESTOPV qalSourceStopv; -extern LPALSOURCEREWINDV qalSourceRewindv; -extern LPALSOURCEPAUSEV qalSourcePausev; -extern LPALSOURCEPLAY qalSourcePlay; -extern LPALSOURCESTOP qalSourceStop; -extern LPALSOURCEREWIND qalSourceRewind; -extern LPALSOURCEPAUSE qalSourcePause; -extern LPALSOURCEQUEUEBUFFERS qalSourceQueueBuffers; -extern LPALSOURCEUNQUEUEBUFFERS qalSourceUnqueueBuffers; -extern LPALGENBUFFERS qalGenBuffers; -extern LPALDELETEBUFFERS qalDeleteBuffers; -extern LPALISBUFFER qalIsBuffer; -extern LPALBUFFERDATA qalBufferData; -extern LPALBUFFERF qalBufferf; -extern LPALBUFFER3F qalBuffer3f; -extern LPALBUFFERFV qalBufferfv; -extern LPALBUFFERI qalBufferi; -extern LPALBUFFER3I qalBuffer3i; -extern LPALBUFFERIV qalBufferiv; -extern LPALGETBUFFERF qalGetBufferf; -extern LPALGETBUFFER3F qalGetBuffer3f; -extern LPALGETBUFFERFV qalGetBufferfv; -extern LPALGETBUFFERI qalGetBufferi; -extern LPALGETBUFFER3I qalGetBuffer3i; -extern LPALGETBUFFERIV qalGetBufferiv; -extern LPALDOPPLERFACTOR qalDopplerFactor; -extern LPALDOPPLERVELOCITY qalDopplerVelocity; -extern LPALSPEEDOFSOUND qalSpeedOfSound; -extern LPALDISTANCEMODEL qalDistanceModel; -extern LPALGENFILTERS qalGenFilters; -extern LPALFILTERI qalFilteri; -extern LPALFILTERF qalFilterf; -extern LPALDELETEFILTERS qalDeleteFilters; - -/* - * Gives information over the OpenAL - * implementation and it's state - */ -void QAL_SoundInfo(void); - -/* - * Loads the OpenAL shared lib, creates - * a context and device handle. - */ -qboolean QAL_Init(void); - -/* - * Shuts OpenAL down, frees all context and - * device handles and unloads the shared lib. - */ -void QAL_Shutdown(void); - -#endif /* WIN_QAL_API_H_ */ -#endif /* USE_OPENAL */ diff --git a/src/backends/windows/system.c b/src/backends/windows/system.c index d22df7f3..227536d4 100644 --- a/src/backends/windows/system.c +++ b/src/backends/windows/system.c @@ -791,3 +791,64 @@ WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, return TRUE; } +void +Sys_FreeLibrary(void *handle) +{ + if (!handle) + { + return; + } + + if (!FreeLibrary(handle)) + { + Com_Error(ERR_FATAL, "FreeLibrary failed on %p", handle); + } +} + +void * +Sys_LoadLibrary(const char *path, const char *sym, void **handle) +{ + HMODULE module; + void *entry; + + *handle = NULL; + + module = LoadLibraryA(path); + + if (!module) + { + Com_DPrintf("%s failed: LoadLibrary returned %lu on %s\n", + __func__, GetLastError(), path); + return NULL; + } + + if (sym) + { + entry = GetProcAddress(module, sym); + + if (!entry) + { + Com_DPrintf("%s failed: GetProcAddress returned %lu on %s\n", + __func__, GetLastError(), path); + FreeLibrary(module); + return NULL; + } + } + else + { + entry = NULL; + } + + *handle = module; + + Com_DPrintf("%s succeeded: %s\n", __func__, path); + + return entry; +} + +void * +Sys_GetProcAddress(void *handle, const char *sym) +{ + return GetProcAddress(handle, sym); +} + diff --git a/src/client/sound/snd_al.c b/src/client/sound/snd_al.c index e6475a90..71924223 100644 --- a/src/client/sound/snd_al.c +++ b/src/client/sound/snd_al.c @@ -31,14 +31,10 @@ #ifdef USE_OPENAL #include "../header/client.h" +#include "../../backends/generic/header/qal.h" #include "header/local.h" #include "header/vorbis.h" -#ifdef _WIN32 - #include "../../backends/windows/header/qal.h" -#else - #include "../../backends/unix/header/qal.h" -#endif /* translates from AL coordinate system to quake */ #define AL_UnpackVector(v) - v[1], v[2], -v[0] diff --git a/src/client/sound/snd_dma.c b/src/client/sound/snd_dma.c index 96f681cc..76557346 100644 --- a/src/client/sound/snd_dma.c +++ b/src/client/sound/snd_dma.c @@ -27,15 +27,10 @@ */ #include "../header/client.h" +#include "../../backends/generic/header/qal.h" #include "header/local.h" #include "header/vorbis.h" -#ifdef _WIN32 - #include "../../backends/windows/header/qal.h" -#else - #include "../../backends/unix/header/qal.h" -#endif - void S_Play(void); void S_SoundList(void); void S_StopAllSounds(void); diff --git a/src/common/header/common.h b/src/common/header/common.h index 99672ba9..7e7b3e39 100644 --- a/src/common/header/common.h +++ b/src/common/header/common.h @@ -777,6 +777,10 @@ void Sys_Error(char *error, ...); void Sys_Quit(void); char *Sys_GetHomeDir(void); +void Sys_FreeLibrary(void *handle); +void *Sys_LoadLibrary(const char *path, const char *sym, void **handle); +void *Sys_GetProcAddress(void *handle, const char *sym); + /* CLIENT / SERVER SYSTEMS */ void CL_Init(void);