You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-05 12:10:55 +00:00
[HTML5] Refactor audio drivers. Implement AudioWorklet w/o threads.
Performances are not great in general, bad on Firefox, on Chrome, well, it's an improvement compared to the way they broke ScriptProcessorNode. I'm actually surprised this works, it involves so many allocations, but there's no way around it when SharedArrayBuffer is not available :(.
This commit is contained in:
@@ -751,11 +751,14 @@ const char *OS_JavaScript::get_video_driver_name(int p_driver) const {
|
||||
// Audio
|
||||
|
||||
int OS_JavaScript::get_audio_driver_count() const {
|
||||
return 1;
|
||||
return audio_drivers.size();
|
||||
}
|
||||
|
||||
const char *OS_JavaScript::get_audio_driver_name(int p_driver) const {
|
||||
return "JavaScript";
|
||||
if (audio_drivers.size() <= p_driver) {
|
||||
return "Unknown";
|
||||
}
|
||||
return audio_drivers[p_driver]->get_name();
|
||||
}
|
||||
|
||||
// Clipboard
|
||||
@@ -961,9 +964,7 @@ MainLoop *OS_JavaScript::get_main_loop() const {
|
||||
}
|
||||
|
||||
void OS_JavaScript::resume_audio() {
|
||||
if (audio_driver_javascript) {
|
||||
audio_driver_javascript->resume();
|
||||
}
|
||||
AudioDriverJavaScript::resume();
|
||||
}
|
||||
|
||||
void OS_JavaScript::fs_sync_callback() {
|
||||
@@ -1021,9 +1022,10 @@ void OS_JavaScript::finalize() {
|
||||
emscripten_webgl_commit_frame();
|
||||
memdelete(visual_server);
|
||||
emscripten_webgl_destroy_context(webgl_ctx);
|
||||
if (audio_driver_javascript) {
|
||||
memdelete(audio_driver_javascript);
|
||||
for (int i = 0; i < audio_drivers.size(); i++) {
|
||||
memdelete(audio_drivers[i]);
|
||||
}
|
||||
audio_drivers.clear();
|
||||
}
|
||||
|
||||
// Miscellaneous
|
||||
@@ -1217,7 +1219,6 @@ OS_JavaScript::OS_JavaScript() {
|
||||
|
||||
main_loop = NULL;
|
||||
visual_server = NULL;
|
||||
audio_driver_javascript = NULL;
|
||||
|
||||
swap_ok_cancel = false;
|
||||
idb_available = godot_js_os_fs_is_persistent() != 0;
|
||||
@@ -1225,8 +1226,13 @@ OS_JavaScript::OS_JavaScript() {
|
||||
idb_is_syncing = false;
|
||||
|
||||
if (AudioDriverJavaScript::is_available()) {
|
||||
audio_driver_javascript = memnew(AudioDriverJavaScript);
|
||||
AudioDriverManager::add_driver(audio_driver_javascript);
|
||||
#ifdef NO_THREADS
|
||||
audio_drivers.push_back(memnew(AudioDriverScriptProcessor));
|
||||
#endif
|
||||
audio_drivers.push_back(memnew(AudioDriverWorklet));
|
||||
}
|
||||
for (int i = 0; i < audio_drivers.size(); i++) {
|
||||
AudioDriverManager::add_driver(audio_drivers[i]);
|
||||
}
|
||||
|
||||
Vector<Logger *> loggers;
|
||||
|
||||
Reference in New Issue
Block a user