Use an array to match the HRTF rendering method

This commit is contained in:
Chris Robinson
2019-09-24 13:51:40 -07:00
parent 96865d6b99
commit 6963712d46
+21 -18
View File
@@ -586,6 +586,18 @@ void InitHrtfPanning(ALCdevice *device)
ALuint ambi_order{1};
if(auto modeopt = ConfigValueStr(device->DeviceName.c_str(), nullptr, "hrtf-mode"))
{
struct HrtfModeEntry {
char name[8];
RenderMode mode;
ALuint order;
};
static constexpr HrtfModeEntry hrtf_modes[]{
{ "full", HrtfRender, 1 },
{ "ambi1", NormalRender, 1 },
{ "ambi2", NormalRender, 2 },
{ "ambi3", NormalRender, 3 },
};
const char *mode{modeopt->c_str()};
if(al::strcasecmp(mode, "basic") == 0)
{
@@ -593,25 +605,16 @@ void InitHrtfPanning(ALCdevice *device)
mode = "ambi2";
}
if(al::strcasecmp(mode, "full") == 0)
device->mRenderMode = HrtfRender;
else if(al::strcasecmp(mode, "ambi1") == 0)
{
device->mRenderMode = NormalRender;
ambi_order = 1;
}
else if(al::strcasecmp(mode, "ambi2") == 0)
{
device->mRenderMode = NormalRender;
ambi_order = 2;
}
else if(al::strcasecmp(mode, "ambi3") == 0)
{
device->mRenderMode = NormalRender;
ambi_order = 3;
}
else
auto match_entry = [mode](const HrtfModeEntry &entry) -> bool
{ return al::strcasecmp(mode, entry.name) == 0; };
auto iter = std::find_if(std::begin(hrtf_modes), std::end(hrtf_modes), match_entry);
if(iter == std::end(hrtf_modes))
ERR("Unexpected hrtf-mode: %s\n", mode);
else
{
device->mRenderMode = iter->mode;
ambi_order = iter->order;
}
}
TRACE("%s HRTF rendering enabled, using \"%s\"\n",
(device->mRenderMode == HrtfRender) ? "Full" :