fix(audio): Properly filter-out unavailable audio backends from UI (#6705)

This commit is contained in:
David Racine
2026-06-14 14:08:11 -04:00
committed by GitHub
parent 4415537deb
commit 71d1f5a9f9
3 changed files with 16 additions and 3 deletions
+4
View File
@@ -841,6 +841,10 @@ void OTRGlobals::Initialize() {
// jitter and slow-frame spikes without perceptible audio latency.
.DesiredBuffered = 4096 });
// The menu is set up before audio is initialized, so its list of available audio backends has to be
// populated here rather than in Menu::InitElement (where the window backends are handled).
SohGui::GetSohMenu()->UpdateAudioBackendObjects();
SPDLOG_INFO("Starting Ship of Harkinian version {} (Branch: {} | Commit: {})", (char*)gBuildVersion,
(char*)gGitBranch, (char*)gGitCommitHash);
+9 -3
View File
@@ -98,6 +98,13 @@ void Menu::RemoveSidebarSearch() {
CVarSetString(menuEntries["Settings"].sidebarCvar, menuEntries["Settings"].sidebarOrder.at(curIndex).c_str());
}
void Menu::UpdateAudioBackendObjects() {
availableAudioBackends = Ship::Context::GetRawInstance()->GetAudio()->GetAvailableAudioBackends();
for (auto& backend : *availableAudioBackends) {
availableAudioBackendsMap[backend] = audioBackendsMap.at(backend);
}
}
void Menu::UpdateWindowBackendObjects() {
Fast::WindowBackend runningWindowBackend =
(Fast::WindowBackend)Ship::Context::GetRawInstance()->GetWindow()->GetWindowBackend();
@@ -341,10 +348,9 @@ void Menu::MenuDrawItem(WidgetInfo& widget, uint32_t width, UIWidgets::Colors me
UIWidgets::ComboboxOptions options = {};
options.color = menuThemeIndex;
options.tooltip = "Sets the audio API used by the game. Requires a relaunch to take effect.";
options.disabled =
Ship::Context::GetRawInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1;
options.disabled = availableAudioBackends->size() <= 1;
options.disabledTooltip = "Only one audio API is available on this platform.";
if (UIWidgets::Combobox("Audio API", &currentAudioBackend, audioBackendsMap, options)) {
if (UIWidgets::Combobox("Audio API", &currentAudioBackend, availableAudioBackendsMap, options)) {
Ship::Context::GetRawInstance()->GetAudio()->SetCurrentAudioBackend(currentAudioBackend);
}
} break;
+3
View File
@@ -20,6 +20,7 @@ class Menu : public GuiWindow {
void Draw() override;
void InsertSidebarSearch();
void RemoveSidebarSearch();
void UpdateAudioBackendObjects();
void UpdateWindowBackendObjects();
bool IsMenuPopped();
UIWidgets::Colors GetMenuThemeColor();
@@ -42,6 +43,8 @@ class Menu : public GuiWindow {
std::shared_ptr<std::vector<int32_t>> availableWindowBackends;
std::map<Fast::WindowBackend, const char*> availableWindowBackendsMap;
Fast::WindowBackend configWindowBackend;
std::shared_ptr<std::vector<Ship::AudioBackend>> availableAudioBackends;
std::map<Ship::AudioBackend, const char*> availableAudioBackendsMap;
std::unordered_map<uint32_t, disabledInfo> disabledMap;
std::vector<disabledInfo> disabledVector;