|
@@ -33,10 +33,11 @@
|
|
#include <al/alc.h>
|
|
#include <al/alc.h>
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Init call
|
|
* Init call
|
|
*/
|
|
*/
|
|
-ALDeviceList::ALDeviceList( const OPENALFNTABLE &oalft )
|
|
|
|
|
|
+ALDeviceList::ALDeviceList( const OPENALFNTABLE& oalft )
|
|
{
|
|
{
|
|
VECTOR_SET_ASSOCIATION( vDeviceInfo );
|
|
VECTOR_SET_ASSOCIATION( vDeviceInfo );
|
|
|
|
|
|
@@ -44,8 +45,9 @@ ALDeviceList::ALDeviceList( const OPENALFNTABLE &oalft )
|
|
char *devices;
|
|
char *devices;
|
|
int index;
|
|
int index;
|
|
const char *defaultDeviceName;
|
|
const char *defaultDeviceName;
|
|
|
|
+ const char *actualDeviceName;
|
|
|
|
|
|
- dMemcpy( &ALFunction, &oalft, sizeof( OPENALFNTABLE ) );
|
|
|
|
|
|
+ dMemcpy( &ALFunction, &oalft, sizeof(OPENALFNTABLE) );
|
|
|
|
|
|
// DeviceInfo vector stores, for each enumerated device, it's device name, selection status, spec version #, and extension support
|
|
// DeviceInfo vector stores, for each enumerated device, it's device name, selection status, spec version #, and extension support
|
|
vDeviceInfo.clear();
|
|
vDeviceInfo.clear();
|
|
@@ -66,44 +68,48 @@ ALDeviceList::ALDeviceList( const OPENALFNTABLE &oalft )
|
|
|
|
|
|
index = 0;
|
|
index = 0;
|
|
// go through device list (each device terminated with a single NULL, list terminated with double NULL)
|
|
// go through device list (each device terminated with a single NULL, list terminated with double NULL)
|
|
- while (*devices != 0) {
|
|
|
|
|
|
+ while (*devices != '\0') {
|
|
if (String::compare(defaultDeviceName, devices) == 0) {
|
|
if (String::compare(defaultDeviceName, devices) == 0) {
|
|
defaultDeviceIndex = index;
|
|
defaultDeviceIndex = index;
|
|
}
|
|
}
|
|
|
|
|
|
- bool bNewName = true;
|
|
|
|
- for (int i = 0; i < GetNumDevices(); i++) {
|
|
|
|
- if (String::compare(GetDeviceName(i), devices) == 0) {
|
|
|
|
- bNewName = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if ((bNewName) && (devices != NULL) && (dStrlen(devices) > 0))
|
|
|
|
|
|
+ ALCdevice* device = ALFunction.alcOpenDevice(devices);
|
|
|
|
+ if (device)
|
|
{
|
|
{
|
|
- dMemset(&ALDeviceInfo, 0, sizeof(ALDEVICEINFO));
|
|
|
|
- ALDeviceInfo.bSelected = true;
|
|
|
|
- dStrncpy(ALDeviceInfo.strInternalDeviceName, devices, sizeof(ALDeviceInfo.strInternalDeviceName));
|
|
|
|
- char deviceExternal[256];
|
|
|
|
- dStrcpy(deviceExternal, devices, 256);
|
|
|
|
- char* openFind = dStrchr(deviceExternal, '(');
|
|
|
|
- if (openFind)
|
|
|
|
- {
|
|
|
|
- char* deviceName = openFind + 1;
|
|
|
|
- char* closeFind = dStrchr(deviceName, ')');
|
|
|
|
- if (closeFind)
|
|
|
|
- (*closeFind) = '\0';
|
|
|
|
-
|
|
|
|
- dStrncpy(ALDeviceInfo.strDeviceName, deviceName, sizeof(ALDeviceInfo.strDeviceName));
|
|
|
|
|
|
+ ALCcontext* ctx = ALFunction.alcCreateContext(device, nullptr);
|
|
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
|
|
+ if (ctx)
|
|
{
|
|
{
|
|
- dStrncpy(ALDeviceInfo.strDeviceName, devices, sizeof(ALDeviceInfo.strDeviceName));
|
|
|
|
|
|
+ ALFunction.alcMakeContextCurrent(ctx);
|
|
|
|
+ actualDeviceName = ALFunction.alcGetString(device, ALC_DEVICE_SPECIFIER);
|
|
|
|
+ bool bNewName = true;
|
|
|
|
+
|
|
|
|
+ if (actualDeviceName)
|
|
|
|
+ {
|
|
|
|
+ for (int i = 0; i < GetNumDevices(); i++) {
|
|
|
|
+ if (String::compare(GetDeviceName(i), devices) == 0) {
|
|
|
|
+ bNewName = false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if ((bNewName) && (actualDeviceName != NULL) && (dStrlen(actualDeviceName) > 0))
|
|
|
|
+ {
|
|
|
|
+ dMemset(&ALDeviceInfo, 0, sizeof(ALDEVICEINFO));
|
|
|
|
+ ALDeviceInfo.bSelected = true;
|
|
|
|
+ dStrncpy(ALDeviceInfo.strDeviceName, actualDeviceName, sizeof(ALDeviceInfo.strDeviceName));
|
|
|
|
+ char deviceExternal[256];
|
|
|
|
+ dStrcpy(deviceExternal, devices, 256);
|
|
|
|
+
|
|
|
|
+ vDeviceInfo.push_back(ALDeviceInfo);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ ALFunction.alcMakeContextCurrent(nullptr);
|
|
|
|
+ ALFunction.alcDestroyContext(ctx);
|
|
}
|
|
}
|
|
-
|
|
|
|
- vDeviceInfo.push_back(ALDeviceInfo);
|
|
|
|
|
|
+ ALFunction.alcCloseDevice(device);
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
devices += dStrlen(devices) + 1;
|
|
devices += dStrlen(devices) + 1;
|
|
index += 1;
|
|
index += 1;
|
|
}
|
|
}
|
|
@@ -129,14 +135,6 @@ int ALDeviceList::GetNumDevices()
|
|
/*
|
|
/*
|
|
* Returns the device name at an index in the complete device list
|
|
* Returns the device name at an index in the complete device list
|
|
*/
|
|
*/
|
|
-const char *ALDeviceList::GetInternalDeviceName(int index)
|
|
|
|
-{
|
|
|
|
- if (index < GetNumDevices())
|
|
|
|
- return vDeviceInfo[index].strInternalDeviceName;
|
|
|
|
- else
|
|
|
|
- return NULL;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
const char* ALDeviceList::GetDeviceName(int index)
|
|
const char* ALDeviceList::GetDeviceName(int index)
|
|
{
|
|
{
|
|
if (index < GetNumDevices())
|
|
if (index < GetNumDevices())
|