diff options
| author | untodesu <kirill@untode.su> | 2025-03-27 13:28:09 +0500 |
|---|---|---|
| committer | untodesu <kirill@untode.su> | 2025-03-27 13:28:09 +0500 |
| commit | 60cb5a829b54732176936e21511aa5372ae46fab (patch) | |
| tree | a2d671ea8d19607042e3177ec0bb50d69f6f85a8 /game/client/main.cc | |
| parent | b2d4a09a5621e214636593641d9799b2b1cdcf72 (diff) | |
| download | voxelius-60cb5a829b54732176936e21511aa5372ae46fab.tar.bz2 voxelius-60cb5a829b54732176936e21511aa5372ae46fab.zip | |
Allow game to not die when sound is not available
Diffstat (limited to 'game/client/main.cc')
| -rw-r--r-- | game/client/main.cc | 60 |
1 files changed, 37 insertions, 23 deletions
diff --git a/game/client/main.cc b/game/client/main.cc index 86e9783..e7fdc3b 100644 --- a/game/client/main.cc +++ b/game/client/main.cc @@ -252,29 +252,41 @@ int main(int argc, char **argv) glfwSetWindowIcon(globals::window, 1, &icon_image); } - if(!saladLoadALdefault()) { - spdlog::critical("salad: failed to load function pointers"); - std::terminate(); - } - - globals::sound_dev = alcOpenDevice(nullptr); - - if(globals::sound_dev == nullptr) { - spdlog::critical("openal: alcOpenDevice failed"); - std::terminate(); + if(cmdline::contains("nosound")) { + spdlog::warn("client: sound disabled [per command line]"); + globals::sound_dev = nullptr; + globals::sound_ctx = nullptr; } - - spdlog::info("sound: {}", reinterpret_cast<const char *>(alcGetString(globals::sound_dev, ALC_DEVICE_SPECIFIER))); - - globals::sound_ctx = alcCreateContext(globals::sound_dev, nullptr); - - if(globals::sound_ctx == nullptr) { - spdlog::critical("openal: alcCreateContext failed"); - std::terminate(); + else { + if(!saladLoadALdefault()) { + spdlog::warn("client: sound disabled [openal loading failed]"); + globals::sound_dev = nullptr; + globals::sound_ctx = nullptr; + } + else { + globals::sound_dev = alcOpenDevice(nullptr); + + if(globals::sound_dev == nullptr) { + spdlog::warn("client: sound disabled [no device]"); + globals::sound_ctx = nullptr; + } + else { + spdlog::info("sound: {}", reinterpret_cast<const char *>(alcGetString(globals::sound_dev, ALC_DEVICE_SPECIFIER))); + + globals::sound_ctx = alcCreateContext(globals::sound_dev, nullptr); + + if(globals::sound_ctx == nullptr) { + spdlog::warn("client: sound disabled [context creation failed]"); + alcCloseDevice(globals::sound_dev); + globals::sound_dev = nullptr; + } + else { + alcMakeContextCurrent(globals::sound_ctx); + } + } + } } - alcMakeContextCurrent(globals::sound_ctx); - splash::init_client(); window_title::update(); @@ -417,9 +429,11 @@ int main(int argc, char **argv) ImGui_ImplGlfw_Shutdown(); ImGui::DestroyContext(); - alcMakeContextCurrent(nullptr); - alcDestroyContext(globals::sound_ctx); - alcCloseDevice(globals::sound_dev); + if(globals::sound_ctx){ + alcMakeContextCurrent(nullptr); + alcDestroyContext(globals::sound_ctx); + alcCloseDevice(globals::sound_dev); + } glfwDestroyWindow(globals::window); glfwTerminate(); |
