/* * Loads the OpenAL shared lib, creates * a context and device handle. */ qboolean QAL_Init() { al_device = Cvar_Get("al_device", "", CVAR_ARCHIVE); #ifdef DLOPEN_OPENAL /* DEFAULT_OPENAL_DRIVER is defined at compile time via the compiler */ al_driver = Cvar_Get("al_driver", DEFAULT_OPENAL_DRIVER, CVAR_ARCHIVE); Com_Printf("LoadLibrary(%s)\n", al_driver->string); /* Load the library */ Sys_LoadLibrary(al_driver->string, NULL, &handle); if (!handle) { Com_Printf("Loading %s failed! Disabling OpenAL.\n", al_driver->string); return false; } # define ALSYMBOL(handle, sym) Sys_GetProcAddress(handle, #sym) #else handle = NULL; # define ALSYMBOL(handle, sym) sym #endif /* Connect function pointers to management functions */ qalcCreateContext = ALSYMBOL(handle, alcCreateContext); qalcMakeContextCurrent = ALSYMBOL(handle, alcMakeContextCurrent); qalcProcessContext = ALSYMBOL(handle, alcProcessContext); qalcSuspendContext = ALSYMBOL(handle, alcSuspendContext); qalcDestroyContext = ALSYMBOL(handle, alcDestroyContext); qalcGetCurrentContext = ALSYMBOL(handle, alcGetCurrentContext); qalcGetContextsDevice = ALSYMBOL(handle, alcGetContextsDevice); qalcOpenDevice = ALSYMBOL(handle, alcOpenDevice); qalcCloseDevice = ALSYMBOL(handle, alcCloseDevice); qalcGetError = ALSYMBOL(handle, alcGetError); qalcIsExtensionPresent = ALSYMBOL(handle, alcIsExtensionPresent); qalcGetProcAddress = ALSYMBOL(handle, alcGetProcAddress); qalcGetEnumValue = ALSYMBOL(handle, alcGetEnumValue); qalcGetString = ALSYMBOL(handle, alcGetString); qalcGetIntegerv = ALSYMBOL(handle, alcGetIntegerv); qalcCaptureOpenDevice = ALSYMBOL(handle, alcCaptureOpenDevice); qalcCaptureCloseDevice = ALSYMBOL(handle, alcCaptureCloseDevice); qalcCaptureStart = ALSYMBOL(handle, alcCaptureStart); qalcCaptureStop = ALSYMBOL(handle, alcCaptureStop); qalcCaptureSamples = ALSYMBOL(handle, alcCaptureSamples); /* Connect function pointers to to OpenAL API functions */ qalEnable = ALSYMBOL(handle, alEnable); qalDisable = ALSYMBOL(handle, alDisable); qalIsEnabled = ALSYMBOL(handle, alIsEnabled); qalGetString = ALSYMBOL(handle, alGetString); qalGetBooleanv = ALSYMBOL(handle, alGetBooleanv); qalGetIntegerv = ALSYMBOL(handle, alGetIntegerv); qalGetFloatv = ALSYMBOL(handle, alGetFloatv); qalGetDoublev = ALSYMBOL(handle, alGetDoublev); qalGetBoolean = ALSYMBOL(handle, alGetBoolean); qalGetInteger = ALSYMBOL(handle, alGetInteger); qalGetFloat = ALSYMBOL(handle, alGetFloat); qalGetDouble = ALSYMBOL(handle, alGetDouble); qalGetError = ALSYMBOL(handle, alGetError); qalIsExtensionPresent = ALSYMBOL(handle, alIsExtensionPresent); qalGetProcAddress = ALSYMBOL(handle, alGetProcAddress); qalGetEnumValue = ALSYMBOL(handle, alGetEnumValue); qalListenerf = ALSYMBOL(handle, alListenerf); qalListener3f = ALSYMBOL(handle, alListener3f); qalListenerfv = ALSYMBOL(handle, alListenerfv); qalListeneri = ALSYMBOL(handle, alListeneri); qalListener3i = ALSYMBOL(handle, alListener3i); qalListeneriv = ALSYMBOL(handle, alListeneriv); qalGetListenerf = ALSYMBOL(handle, alGetListenerf); qalGetListener3f = ALSYMBOL(handle, alGetListener3f); qalGetListenerfv = ALSYMBOL(handle, alGetListenerfv); qalGetListeneri = ALSYMBOL(handle, alGetListeneri); qalGetListener3i = ALSYMBOL(handle, alGetListener3i); qalGetListeneriv = ALSYMBOL(handle, alGetListeneriv); qalGenSources = ALSYMBOL(handle, alGenSources); qalDeleteSources = ALSYMBOL(handle, alDeleteSources); qalIsSource = ALSYMBOL(handle, alIsSource); qalSourcef = ALSYMBOL(handle, alSourcef); qalSource3f = ALSYMBOL(handle, alSource3f); qalSourcefv = ALSYMBOL(handle, alSourcefv); qalSourcei = ALSYMBOL(handle, alSourcei); qalSource3i = ALSYMBOL(handle, alSource3i); qalSourceiv = ALSYMBOL(handle, alSourceiv); qalGetSourcef = ALSYMBOL(handle, alGetSourcef); qalGetSource3f = ALSYMBOL(handle, alGetSource3f); qalGetSourcefv = ALSYMBOL(handle, alGetSourcefv); qalGetSourcei = ALSYMBOL(handle, alGetSourcei); qalGetSource3i = ALSYMBOL(handle, alGetSource3i); qalGetSourceiv = ALSYMBOL(handle, alGetSourceiv); qalSourcePlayv = ALSYMBOL(handle, alSourcePlayv); qalSourceStopv = ALSYMBOL(handle, alSourceStopv); qalSourceRewindv = ALSYMBOL(handle, alSourceRewindv); qalSourcePausev = ALSYMBOL(handle, alSourcePausev); qalSourcePlay = ALSYMBOL(handle, alSourcePlay); qalSourceStop = ALSYMBOL(handle, alSourceStop); qalSourceRewind = ALSYMBOL(handle, alSourceRewind); qalSourcePause = ALSYMBOL(handle, alSourcePause); qalSourceQueueBuffers = ALSYMBOL(handle, alSourceQueueBuffers); qalSourceUnqueueBuffers = ALSYMBOL(handle, alSourceUnqueueBuffers); qalGenBuffers = ALSYMBOL(handle, alGenBuffers); qalDeleteBuffers = ALSYMBOL(handle, alDeleteBuffers); qalIsBuffer = ALSYMBOL(handle, alIsBuffer); qalBufferData = ALSYMBOL(handle, alBufferData); qalBufferf = ALSYMBOL(handle, alBufferf); qalBuffer3f = ALSYMBOL(handle, alBuffer3f); qalBufferfv = ALSYMBOL(handle, alBufferfv); qalBufferi = ALSYMBOL(handle, alBufferi); qalBuffer3i = ALSYMBOL(handle, alBuffer3i); qalBufferiv = ALSYMBOL(handle, alBufferiv); qalGetBufferf = ALSYMBOL(handle, alGetBufferf); qalGetBuffer3f = ALSYMBOL(handle, alGetBuffer3f); qalGetBufferfv = ALSYMBOL(handle, alGetBufferfv); qalGetBufferi = ALSYMBOL(handle, alGetBufferi); qalGetBuffer3i = ALSYMBOL(handle, alGetBuffer3i); qalGetBufferiv = ALSYMBOL(handle, alGetBufferiv); qalDopplerFactor = ALSYMBOL(handle, alDopplerFactor); qalDopplerVelocity = ALSYMBOL(handle, alDopplerVelocity); qalSpeedOfSound = ALSYMBOL(handle, alSpeedOfSound); qalDistanceModel = ALSYMBOL(handle, alDistanceModel); /* 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; } if (qalcIsExtensionPresent(device, "ALC_EXT_EFX") != AL_FALSE) { qalGenFilters = qalGetProcAddress("alGenFilters"); qalFilteri = qalGetProcAddress("alFilteri"); qalFilterf = qalGetProcAddress("alFilterf"); qalDeleteFilters = qalGetProcAddress("alDeleteFilters"); } else { qalGenFilters = NULL; qalFilteri = NULL; qalFilterf = NULL; qalDeleteFilters = NULL; } Com_Printf("ok\n"); /* Print OpenAL informations */ Com_Printf("\n"); QAL_SoundInfo(); Com_Printf("\n"); return true; }
/* * 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 */ Sys_LoadLibrary(al_driver->string, NULL, &handle); if (!handle) { Com_Printf("Loading %s failed! Disabling OpenAL.\n", al_driver->string); return false; } /* Connect function pointers to management functions */ 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 = 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"); #if !defined (__APPLE__) qalGenFilters = Sys_GetProcAddress(handle, "alGenFilters"); qalFilteri = Sys_GetProcAddress(handle, "alFilteri"); qalFilterf = Sys_GetProcAddress(handle, "alFilterf"); qalDeleteFilters = Sys_GetProcAddress(handle, "alDeleteFilters"); #endif /* 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; }