You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-18 14:21:41 +00:00
Fix crash when no audio driver is available
This commit is contained in:
committed by
marcelofg55
parent
d6b392825f
commit
7a4c0ff35e
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user