summaryrefslogtreecommitdiffstats
path: root/game/client/main.cc
diff options
context:
space:
mode:
authoruntodesu <kirill@untode.su>2025-03-27 13:28:09 +0500
committeruntodesu <kirill@untode.su>2025-03-27 13:28:09 +0500
commit60cb5a829b54732176936e21511aa5372ae46fab (patch)
treea2d671ea8d19607042e3177ec0bb50d69f6f85a8 /game/client/main.cc
parentb2d4a09a5621e214636593641d9799b2b1cdcf72 (diff)
downloadvoxelius-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.cc60
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();