Merge pull request #52650 from Faless/js/3.x_audioworklet_nothreads_pr

[3.x] [HTML5] Refactor audio drivers. Implement AudioWorklet w/o threads.
This commit is contained in:
Rémi Verschelde 2021-09-21 10:44:14 +02:00 committed by GitHub
commit 8a48be6980
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 345 additions and 157 deletions

View file

@ -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;