fix a few issues and add more info

more info for the device is printed out, along with hrtf detection
fix levelinfo sending the distance model
This commit is contained in:
marauder2k7 2026-05-09 10:24:36 +01:00
parent be872a26b4
commit 345ce3f1d3
6 changed files with 565 additions and 268 deletions

View file

@ -305,60 +305,60 @@ SFXProvider* SFXSystem::getProviderByTypeAndName(SFXProviderType type, const cha
SFXProvider* SFXSystem::getBestProviderChoice()
{
const String provider = Con::getVariable("$pref::SFX::provider");
const String device = Con::getVariable("$pref::SFX::device");
const String preferredProvider = Con::getVariable("$pref::SFX::provider");
const String preferredDevice = Con::getVariable("$pref::SFX::device");
// Resolve provider type.
SFXProviderType providerType = OpenAL;
if (provider.isEmpty() || device.isEmpty())
if (!preferredProvider.isEmpty())
{
for (U32 i = 0; i < smProviders.size(); i++)
{
if (smProviders[i]->mType == OpenAL)
{
if (smProviders[i]->mDefault)
return smProviders[i];
}
}
}
else
{
S32 ret = -1;
for (U32 i = 0; i < SFXProviderType_Count; i++)
{
if (!dStrcmp(getProviderNameFromType((SFXProviderType)i), provider))
if (!dStrcmp(getProviderNameFromType((SFXProviderType)i),preferredProvider))
{
ret = i;
providerType = (SFXProviderType)i;
break;
}
}
if (ret == -1)
providerType = OpenAL;
}
U32 i = 0;
for (i = 0; i < smProviders.size(); i++)
if (!preferredDevice.isEmpty())
{
if (smProviders[i]->mType == providerType)
for (U32 i = 0; i < smProviders.size(); i++)
{
if (String::compare(smProviders[i]->getName(), device.c_str()) == 0)
SFXProvider* provider = smProviders[i];
if (provider->mType != providerType)
continue;
if (String::compare(provider->getName(), preferredDevice.c_str()) == 0)
{
return smProviders[i];
return provider;
}
}
}
for (i = 0; i < smProviders.size(); i++)
for (U32 i = 0; i < smProviders.size(); i++)
{
if (smProviders[i]->mType == providerType)
{
if (smProviders[i]->mDefault)
return smProviders[i];
}
SFXProvider* provider = smProviders[i];
if (provider->mType != providerType)
continue;
if (provider->mDefault)
return provider;
}
for (U32 i = 0; i < smProviders.size(); i++)
{
SFXProvider* provider = smProviders[i];
if (provider->mType != providerType)
continue;
return provider;
}
return NULL;
}
@ -649,28 +649,11 @@ bool SFXSystem::createDevice(SFXProvider* provider)
Con::errorf( "SFXSystem::createDevice - failed creating device '%s'", provider->getName());
return false;
}
mDevice->setProvider(*provider);
// Print capabilities.
Con::printf( "\nSFXSystem::createDevice - created device '%s'", provider->getName());
Con::printf("| Device Update Interval: %d ms", SFXDevice::smUpdateInterval);
Con::printf("| Device Sample rate: %d Hz", SFXDevice::smDeviceFrequency);
Con::printf("| Device Bitrate: %d", SFXDevice::smDeviceBitrate);
if (mDevice->getCaps() & SFXDevice::CAPS_Reverb)
Con::printf("| CAPS_Reverb");
if (mDevice->getCaps() & SFXDevice::CAPS_VoiceManagement)
Con::printf("| CAPS_VoiceManagement");
if (mDevice->getCaps() & SFXDevice::CAPS_Occlusion)
Con::printf("| CAPS_Occlusion");
if (mDevice->getCaps() & SFXDevice::CAPS_MultiListener)
Con::printf("| CAPS_MultiListener");
if (mDevice->getCaps() & SFXDevice::CAPS_HRTF)
Con::printf("| CAPS_HRTF");
if (mDevice->getCaps() & SFXDevice::CAPS_Float32)
Con::printf("| CAPS_Float32");
if (mDevice->getCaps() & SFXDevice::CAPS_MonoStereo)
Con::printf("| CAPS_MonoStereo");
mDevice->setProvider(provider);
// device is responsible for printing its information.
// Set defaults.
mDevice->setNumListeners( getNumListeners() );
mDevice->setDistanceModel( mDistanceModel );
@ -696,8 +679,8 @@ String SFXSystem::getDeviceInfoString()
return String();
return String::ToString( "%s\t%s\t%s\t%d\t%d",
getProviderNameFromType(mDevice->getProvider().mType),
mDevice->getProvider().getName(),
getProviderNameFromType(mDevice->getProvider()->mType),
mDevice->getProvider()->getName(),
mDevice->getUseHardware() ? "1" : "0",
mDevice->getMaxBuffers(),
mDevice->getCaps() );
@ -1017,8 +1000,10 @@ void SFXSystem::_update()
}
// If we have a device then update it.
if( mDevice )
if (mDevice)
{
mDevice->update();
}
}
//-----------------------------------------------------------------------------