diff options
| author | ludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2009-05-08 09:13:06 +0000 | 
|---|---|---|
| committer | ludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2009-05-08 09:13:06 +0000 | 
| commit | 30b0394d07efb584ff3161978c9ddcaf71a7ea98 (patch) | |
| tree | 103e40911f8e096dabd7ee2d3a34b31976200a9b | |
| parent | ec8ae2de0ae29a56fbc38ca9422f1090d119df37 (diff) | |
| download | ioquake3-aero-30b0394d07efb584ff3161978c9ddcaf71a7ea98.tar.gz ioquake3-aero-30b0394d07efb584ff3161978c9ddcaf71a7ea98.zip  | |
don't modify s_alDevice and add fallback to let openAL choose the device
git-svn-id: svn://svn.icculus.org/quake3/trunk@1543 edf5b092-35ff-0310-97b2-ce42778d08ea
| -rw-r--r-- | code/client/snd_openal.c | 39 | 
1 files changed, 15 insertions, 24 deletions
diff --git a/code/client/snd_openal.c b/code/client/snd_openal.c index 8a6615a..5087b72 100644 --- a/code/client/snd_openal.c +++ b/code/client/snd_openal.c @@ -1715,7 +1715,6 @@ static cvar_t *s_alCapture;  #ifdef _WIN32  #define ALDRIVER_DEFAULT "OpenAL32.dll" -#define ALDEVICE_DEFAULT "Generic Software"  #elif defined(MACOS_X)  #define ALDRIVER_DEFAULT "/System/Library/Frameworks/OpenAL.framework/OpenAL"  #else @@ -1965,8 +1964,7 @@ S_AL_Init  qboolean S_AL_Init( soundInterface_t *si )  {  #ifdef USE_OPENAL - -	qboolean enumsupport, founddev = qfalse; +	const char* device = NULL;  	int i;  	if( !si ) { @@ -1992,6 +1990,8 @@ qboolean S_AL_Init( soundInterface_t *si )  	s_alDriver = Cvar_Get( "s_alDriver", ALDRIVER_DEFAULT, CVAR_ARCHIVE | CVAR_LATCH ); +	s_alDevice = Cvar_Get("s_alDevice", "", CVAR_ARCHIVE | CVAR_LATCH); +  	// Load QAL  	if( !QAL_Init( s_alDriver->string ) )  	{ @@ -1999,8 +1999,12 @@ qboolean S_AL_Init( soundInterface_t *si )  		return qfalse;  	} +	device = s_alDevice->string; +	if(device && !*device) +		device = NULL; +  	// Device enumeration support (extension is implemented reasonably only on Windows right now). -	if((enumsupport = qalcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT"))) +	if(qalcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT"))  	{  		char devicenames[1024] = "";  		const char *devicelist; @@ -2016,11 +2020,9 @@ qboolean S_AL_Init( soundInterface_t *si )  		// Generic Software as that one works more reliably with various sound systems.  		// If it's not, use OpenAL's default selection as we don't want to ignore  		// native hardware acceleration. -		if(!strcmp(defaultdevice, "Generic Hardware")) -			s_alDevice = Cvar_Get("s_alDevice", ALDEVICE_DEFAULT, CVAR_ARCHIVE | CVAR_LATCH); -		else +		if(!device && !strcmp(defaultdevice, "Generic Hardware")) +			device = "Generic Software";  #endif -			s_alDevice = Cvar_Get("s_alDevice", defaultdevice, CVAR_ARCHIVE | CVAR_LATCH);  		// dump a list of available devices to a cvar for the user to see.  		while((curlen = strlen(devicelist))) @@ -2028,26 +2030,18 @@ qboolean S_AL_Init( soundInterface_t *si )  			Q_strcat(devicenames, sizeof(devicenames), devicelist);  			Q_strcat(devicenames, sizeof(devicenames), "\n"); -			// check whether the device we want to load is available at all. -			if(!strcmp(s_alDevice->string, devicelist)) -				founddev = qtrue; -  			devicelist += curlen + 1;  		}  		s_alAvailableDevices = Cvar_Get("s_alAvailableDevices", devicenames, CVAR_ROM | CVAR_NORESTART); -		 -		if(!founddev) -		{ -			Cvar_ForceReset("s_alDevice"); -			founddev = 1; -		}  	} -	if(founddev) -		alDevice = qalcOpenDevice(s_alDevice->string); -	else +	alDevice = qalcOpenDevice(device); +	if( !alDevice && device ) +	{ +		Com_Printf( "Failed to open OpenAL device '%s', trying default.\n", device );  		alDevice = qalcOpenDevice(NULL); +	}  	if( !alDevice )  	{ @@ -2056,9 +2050,6 @@ qboolean S_AL_Init( soundInterface_t *si )  		return qfalse;  	} -	if(enumsupport) -		Cvar_Set("s_alDevice", qalcGetString(alDevice, ALC_DEVICE_SPECIFIER)); -  	// Create OpenAL context  	alContext = qalcCreateContext( alDevice, NULL );  	if( !alContext )  | 
