aboutsummaryrefslogtreecommitdiff
path: root/servers/audio_server.cpp
diff options
context:
space:
mode:
authorMarcelo Fernandez2017-09-13 13:34:22 -0300
committermarcelofg552017-09-13 20:54:55 -0300
commit7a4c0ff35e10fba5f2686e7fd5623eab31b07a2d (patch)
treeadf99ac4cff62e6898c14834400034cef668e54b /servers/audio_server.cpp
parentd6b392825fc3e22d9e0c62f0d17633c4224eb28f (diff)
downloadgodot-7a4c0ff35e10fba5f2686e7fd5623eab31b07a2d.tar.gz
godot-7a4c0ff35e10fba5f2686e7fd5623eab31b07a2d.tar.zst
godot-7a4c0ff35e10fba5f2686e7fd5623eab31b07a2d.zip
Diffstat (limited to 'servers/audio_server.cpp')
-rw-r--r--servers/audio_server.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/servers/audio_server.cpp b/servers/audio_server.cpp
index ed62e6584..a18ad327c 100644
--- a/servers/audio_server.cpp
+++ b/servers/audio_server.cpp
@@ -32,6 +32,7 @@
#include "os/file_access.h"
#include "os/os.h"
#include "project_settings.h"
+#include "servers/audio/audio_driver_dummy.h"
#include "servers/audio/effects/audio_effect_compressor.h"
#ifdef TOOLS_ENABLED
@@ -107,6 +108,7 @@ AudioDriver::AudioDriver() {
AudioDriver *AudioDriverManager::drivers[MAX_DRIVERS];
int AudioDriverManager::driver_count = 0;
+AudioDriverDummy AudioDriverManager::dummy_driver;
void AudioDriverManager::add_driver(AudioDriver *p_driver) {
@@ -118,6 +120,43 @@ int AudioDriverManager::get_driver_count() {
return driver_count;
}
+
+void AudioDriverManager::initialize(int p_driver) {
+ AudioDriver *driver;
+ int failed_driver = -1;
+
+ // Check if there is a selected driver
+ if (p_driver >= 0 && p_driver < driver_count) {
+ if (drivers[p_driver]->init() == OK) {
+ drivers[p_driver]->set_singleton();
+ return;
+ } else {
+ failed_driver = p_driver;
+ }
+ }
+
+ // No selected driver, try them all in order
+ for (int i = 0; i < driver_count; i++) {
+ // Don't re-init the driver if it failed above
+ if (i == failed_driver) {
+ continue;
+ }
+
+ if (drivers[i]->init() == OK) {
+ drivers[i]->set_singleton();
+ return;
+ }
+ }
+
+ // Fallback to our dummy driver
+ if (dummy_driver.init() == OK) {
+ ERR_PRINT("AudioDriverManager: all drivers failed, falling back to dummy driver");
+ dummy_driver.set_singleton();
+ } else {
+ ERR_PRINT("AudioDriverManager: dummy driver faild to init()");
+ }
+}
+
AudioDriver *AudioDriverManager::get_driver(int p_driver) {
ERR_FAIL_INDEX_V(p_driver, driver_count, NULL);