[quake3-commits] r1543 - trunk/code/client

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri May 8 05:13:06 EDT 2009


Author: ludwig
Date: 2009-05-08 05:13:06 -0400 (Fri, 08 May 2009)
New Revision: 1543

Modified:
   trunk/code/client/snd_openal.c
Log:
don't modify s_alDevice and add fallback to let openAL choose the device

Modified: trunk/code/client/snd_openal.c
===================================================================
--- trunk/code/client/snd_openal.c	2009-05-08 09:13:03 UTC (rev 1542)
+++ trunk/code/client/snd_openal.c	2009-05-08 09:13:06 UTC (rev 1543)
@@ -1715,7 +1715,6 @@
 
 #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 @@
 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 @@
 
 	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 @@
 		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 @@
 		// 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 @@
 			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 @@
 		return qfalse;
 	}
 
-	if(enumsupport)
-		Cvar_Set("s_alDevice", qalcGetString(alDevice, ALC_DEVICE_SPECIFIER));
-
 	// Create OpenAL context
 	alContext = qalcCreateContext( alDevice, NULL );
 	if( !alContext )



More information about the quake3-commits mailing list