diff options
Diffstat (limited to 'platform')
| -rw-r--r-- | platform/haiku/detect.py | 2 | ||||
| -rw-r--r-- | platform/javascript/audio_driver_javascript.cpp | 149 | ||||
| -rw-r--r-- | platform/javascript/audio_driver_javascript.h | 11 | ||||
| -rw-r--r-- | platform/osx/detect.py | 4 | ||||
| -rw-r--r-- | platform/server/detect.py | 18 | ||||
| -rw-r--r-- | platform/uwp/detect.py | 6 | ||||
| -rw-r--r-- | platform/windows/detect.py | 4 | ||||
| -rw-r--r-- | platform/x11/detect.py | 34 |
8 files changed, 130 insertions, 98 deletions
diff --git a/platform/haiku/detect.py b/platform/haiku/detect.py index 7c62654ef6..2959023204 100644 --- a/platform/haiku/detect.py +++ b/platform/haiku/detect.py @@ -22,7 +22,7 @@ def get_opts(): from SCons.Variables import EnumVariable return [ - EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), + EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), ] diff --git a/platform/javascript/audio_driver_javascript.cpp b/platform/javascript/audio_driver_javascript.cpp index 5bf345e6cd..7a6613bb32 100644 --- a/platform/javascript/audio_driver_javascript.cpp +++ b/platform/javascript/audio_driver_javascript.cpp @@ -32,113 +32,134 @@ #include <emscripten.h> -AudioDriverJavaScript *AudioDriverJavaScript::singleton_js = NULL; +AudioDriverJavaScript *AudioDriverJavaScript::singleton = NULL; const char *AudioDriverJavaScript::get_name() const { return "JavaScript"; } -extern "C" EMSCRIPTEN_KEEPALIVE void js_audio_driver_mix_function(int p_frames) { +extern "C" EMSCRIPTEN_KEEPALIVE void audio_driver_js_mix() { - //print_line("MIXI! "+itos(p_frames)); - AudioDriverJavaScript::singleton_js->mix_to_js(p_frames); + AudioDriverJavaScript::singleton->mix_to_js(); } -void AudioDriverJavaScript::mix_to_js(int p_frames) { +void AudioDriverJavaScript::mix_to_js() { - int todo = p_frames; - int offset = 0; + int channel_count = get_total_channels_by_speaker_mode(get_speaker_mode()); + int sample_count = memarr_len(internal_buffer) / channel_count; + int32_t *stream_buffer = reinterpret_cast<int32_t *>(internal_buffer); + audio_server_process(sample_count, stream_buffer); + for (int i = 0; i < sample_count * channel_count; i++) { + internal_buffer[i] = float(stream_buffer[i] >> 16) / 32768.0; + } +} - while (todo) { +Error AudioDriverJavaScript::init() { - int tomix = MIN(todo, INTERNAL_BUFFER_SIZE); + /* clang-format off */ + EM_ASM({ + _audioDriver_audioContext = new (window.AudioContext || window.webkitAudioContext); + _audioDriver_scriptNode = null; + }); + /* clang-format on */ - audio_server_process(p_frames, stream_buffer); - for (int i = 0; i < tomix * internal_buffer_channels; i++) { - internal_buffer[i] = float(stream_buffer[i] >> 16) / 32768.0; + int channel_count = get_total_channels_by_speaker_mode(get_speaker_mode()); + /* clang-format off */ + int buffer_length = EM_ASM_INT({ + var CHANNEL_COUNT = $0; + + var channelCount = _audioDriver_audioContext.destination.channelCount; + try { + // Try letting the browser recommend a buffer length. + _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(0, 0, channelCount); + } catch (e) { + // ...otherwise, default to 4096. + _audioDriver_scriptNode = _audioDriver_audioContext.createScriptProcessor(4096, 0, channelCount); } + _audioDriver_scriptNode.connect(_audioDriver_audioContext.destination); - /* clang-format off */ - EM_ASM_ARGS({ - var data = HEAPF32.subarray($0 / 4, $0 / 4 + $2 * 2); - - for (var channel = 0; channel < _as_output_buffer.numberOfChannels; channel++) { - var outputData = _as_output_buffer.getChannelData(channel); - // Loop through samples - for (var sample = 0; sample < $2; sample++) { - // make output equal to the same as the input - outputData[sample + $1] = data[sample * 2 + channel]; - } - } - }, internal_buffer, offset, tomix); - /* clang-format on */ - - todo -= tomix; - offset += tomix; + return _audioDriver_scriptNode.bufferSize; + }, channel_count); + /* clang-format on */ + if (!buffer_length) { + return FAILED; } -} - -Error AudioDriverJavaScript::init() { - return OK; + if (!internal_buffer || memarr_len(internal_buffer) != buffer_length * channel_count) { + if (internal_buffer) + memdelete_arr(internal_buffer); + internal_buffer = memnew_arr(float, buffer_length *channel_count); + } + return internal_buffer ? OK : ERR_OUT_OF_MEMORY; } void AudioDriverJavaScript::start() { - internal_buffer = memnew_arr(float, INTERNAL_BUFFER_SIZE *internal_buffer_channels); - stream_buffer = memnew_arr(int32_t, INTERNAL_BUFFER_SIZE * 4); //max 4 channels - /* clang-format off */ - mix_rate = EM_ASM_INT({ - _as_audioctx = new (window.AudioContext || window.webkitAudioContext); - _as_script_node = _as_audioctx.createScriptProcessor($0, 0, $1); - _as_script_node.connect(_as_audioctx.destination); - console.log(_as_script_node.bufferSize); - var jsAudioDriverMixFunction = cwrap('js_audio_driver_mix_function', null, ['number']); - - _as_script_node.onaudioprocess = function(audioProcessingEvent) { - // The output buffer contains the samples that will be modified and played - _as_output_buffer = audioProcessingEvent.outputBuffer; - jsAudioDriverMixFunction([_as_output_buffer.getChannelData(0).length]); + EM_ASM({ + var INTERNAL_BUFFER_PTR = $0; + + var audioDriverMixFunction = cwrap('audio_driver_js_mix'); + _audioDriver_scriptNode.onaudioprocess = function(audioProcessingEvent) { + audioDriverMixFunction(); + // The output buffer contains the samples that will be modified and played. + var output = audioProcessingEvent.outputBuffer; + var input = HEAPF32.subarray( + INTERNAL_BUFFER_PTR / HEAPF32.BYTES_PER_ELEMENT, + INTERNAL_BUFFER_PTR / HEAPF32.BYTES_PER_ELEMENT + output.length * output.numberOfChannels); + + for (var channel = 0; channel < output.numberOfChannels; channel++) { + var outputData = output.getChannelData(channel); + // Loop through samples. + for (var sample = 0; sample < outputData.length; sample++) { + // Set output equal to input. + outputData[sample] = input[sample * output.numberOfChannels + channel]; + } + } }; - return _as_audioctx.sampleRate; - }, INTERNAL_BUFFER_SIZE, internal_buffer_channels); + }, internal_buffer); /* clang-format on */ } int AudioDriverJavaScript::get_mix_rate() const { - return mix_rate; + /* clang-format off */ + return EM_ASM_INT_V({ + return _audioDriver_audioContext.sampleRate; + }); + /* clang-format on */ } AudioDriver::SpeakerMode AudioDriverJavaScript::get_speaker_mode() const { - return SPEAKER_MODE_STEREO; + /* clang-format off */ + return get_speaker_mode_by_total_channels(EM_ASM_INT_V({ + return _audioDriver_audioContext.destination.channelCount; + })); + /* clang-format on */ } +// No locking, as threads are not supported. void AudioDriverJavaScript::lock() { - - /*no locking, as threads are not supported - if (active && mutex) - mutex->lock(); - */ } void AudioDriverJavaScript::unlock() { - - /*no locking, as threads are not supported - if (active && mutex) - mutex->unlock(); - */ } void AudioDriverJavaScript::finish() { + + /* clang-format off */ + EM_ASM({ + _audioDriver_audioContext = null; + _audioDriver_scriptNode = null; + }); + /* clang-format on */ + memdelete_arr(internal_buffer); + internal_buffer = NULL; } AudioDriverJavaScript::AudioDriverJavaScript() { - internal_buffer_channels = 2; - mix_rate = DEFAULT_MIX_RATE; - singleton_js = this; + singleton = this; } diff --git a/platform/javascript/audio_driver_javascript.h b/platform/javascript/audio_driver_javascript.h index d78ab8eea4..a65a8ec29f 100644 --- a/platform/javascript/audio_driver_javascript.h +++ b/platform/javascript/audio_driver_javascript.h @@ -35,18 +35,11 @@ class AudioDriverJavaScript : public AudioDriver { - enum { - INTERNAL_BUFFER_SIZE = 4096, - }; - - int mix_rate; float *internal_buffer; - int internal_buffer_channels; - int32_t *stream_buffer; public: - void mix_to_js(int p_frames); - static AudioDriverJavaScript *singleton_js; + void mix_to_js(); + static AudioDriverJavaScript *singleton; virtual const char *get_name() const; diff --git a/platform/osx/detect.py b/platform/osx/detect.py index 1e9631fae0..72b8aa99f8 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -23,8 +23,8 @@ def get_opts(): return [ ('osxcross_sdk', 'OSXCross SDK version', 'darwin14'), - EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), - BoolVariable('separate_debug_symbols', 'Create a separate file with the debug symbols', False), + EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), + BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), ] diff --git a/platform/server/detect.py b/platform/server/detect.py index 7bf445b43f..266b0c5cc9 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -67,9 +67,6 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if not env['builtin_libwebp']: - env.ParseConfig('pkg-config libwebp --cflags --libs') - # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: @@ -124,6 +121,21 @@ def configure(env): if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') + if not env['builtin_libwebp']: + env.ParseConfig('pkg-config libwebp --cflags --libs') + + if not env['builtin_mbedtls']: + # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 + env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) + + if not env['builtin_libwebsockets']: + env.ParseConfig('pkg-config libwebsockets --cflags --libs') + + if not env['builtin_miniupnpc']: + # No pkgconfig file so far, hardcode default paths. + env.Append(CPPPATH=["/usr/include/miniupnpc"]) + env.Append(LIBS=["miniupnpc"]) + # On Linux wchar_t should be 32-bits # 16-bit library shouldn't be required due to compiler optimisations if not env['builtin_pcre2']: diff --git a/platform/uwp/detect.py b/platform/uwp/detect.py index 0e7b125dc5..559f23ca5b 100644 --- a/platform/uwp/detect.py +++ b/platform/uwp/detect.py @@ -28,8 +28,8 @@ def get_opts(): from SCons.Variables import BoolVariable return [ - ('msvc_version', 'MSVC version to use. Ignored if VCINSTALLDIR is set in shell env.', None), - BoolVariable('use_mingw', 'Use the Mingw compiler, even if MSVC is installed. Only used on Windows.', False), + ('msvc_version', 'MSVC version to use (ignored if the VCINSTALLDIR environment variable is set)', None), + BoolVariable('use_mingw', 'Use the MinGW compiler even if MSVC is installed (only used on Windows)', False), ] @@ -112,7 +112,7 @@ def configure(env): env["bits"] = "32" print("Compiled program architecture will be a x86 executable. (forcing bits=32).") else: - print("Failed to detect MSVC compiler architecture version... Defaulting to 32bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup.") + print("Failed to detect MSVC compiler architecture version... Defaulting to 32-bit executable settings (forcing bits=32). Compilation attempt will continue, but SCons can not detect for what architecture this build is compiled for. You should check your settings/compilation setup.") env["bits"] = "32" if (env["bits"] == "32"): diff --git a/platform/windows/detect.py b/platform/windows/detect.py index 6d559520d7..05806d2fe8 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -62,8 +62,8 @@ def get_opts(): # XP support dropped after EOL due to missing API for IPv6 and other issues # Vista support dropped after EOL due to GH-10243 ('target_win_version', 'Targeted Windows version, >= 0x0601 (Windows 7)', '0x0601'), - EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), - BoolVariable('separate_debug_symbols', 'Create a separate file with the debug symbols', False), + EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), + BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), ('msvc_version', 'MSVC version to use. Ignored if VCINSTALLDIR is set in shell env.', None), BoolVariable('use_mingw', 'Use the Mingw compiler, even if MSVC is installed. Only used on Windows.', False), ] diff --git a/platform/x11/detect.py b/platform/x11/detect.py index ad2620c9f5..09e16ad078 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -59,8 +59,8 @@ def get_opts(): BoolVariable('use_leak_sanitizer', 'Use LLVM compiler memory leaks sanitizer (implies use_sanitizer)', False), BoolVariable('pulseaudio', 'Detect & use pulseaudio', True), BoolVariable('udev', 'Use udev for gamepad connection callbacks', False), - EnumVariable('debug_symbols', 'Add debug symbols to release version', 'yes', ('yes', 'no', 'full')), - BoolVariable('separate_debug_symbols', 'Create a separate file with the debug symbols', False), + EnumVariable('debug_symbols', 'Add debugging symbols to release builds', 'yes', ('yes', 'no', 'full')), + BoolVariable('separate_debug_symbols', 'Create a separate file containing debugging symbols', False), BoolVariable('touch', 'Enable touch events', True), ] @@ -158,14 +158,6 @@ def configure(env): # FIXME: Check for existence of the libs before parsing their flags with pkg-config - if not env['builtin_mbedtls']: - # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 - env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) - - if not env['builtin_libwebp']: - env.ParseConfig('pkg-config libwebp --cflags --libs') - - # freetype depends on libpng and zlib, so bundling one of them while keeping others # as shared libraries leads to weird issues if env['builtin_freetype'] or env['builtin_libpng'] or env['builtin_zlib']: @@ -205,6 +197,10 @@ def configure(env): env['builtin_libogg'] = False # Needed to link against system libtheora env['builtin_libvorbis'] = False # Needed to link against system libtheora env.ParseConfig('pkg-config theora theoradec --cflags --libs') + else: + list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] + if any(platform.machine() in s for s in list_of_x86): + env["x86_libtheora_opt_gcc"] = True if not env['builtin_libvpx']: env.ParseConfig('pkg-config vpx --cflags --libs') @@ -220,10 +216,20 @@ def configure(env): if not env['builtin_libogg']: env.ParseConfig('pkg-config ogg --cflags --libs') - if env['builtin_libtheora']: - list_of_x86 = ['x86_64', 'x86', 'i386', 'i586'] - if any(platform.machine() in s for s in list_of_x86): - env["x86_libtheora_opt_gcc"] = True + if not env['builtin_libwebp']: + env.ParseConfig('pkg-config libwebp --cflags --libs') + + if not env['builtin_mbedtls']: + # mbedTLS does not provide a pkgconfig config yet. See https://github.com/ARMmbed/mbedtls/issues/228 + env.Append(LIBS=['mbedtls', 'mbedcrypto', 'mbedx509']) + + if not env['builtin_libwebsockets']: + env.ParseConfig('pkg-config libwebsockets --cflags --libs') + + if not env['builtin_miniupnpc']: + # No pkgconfig file so far, hardcode default paths. + env.Append(CPPPATH=["/usr/include/miniupnpc"]) + env.Append(LIBS=["miniupnpc"]) # On Linux wchar_t should be 32-bits # 16-bit library shouldn't be required due to compiler optimisations |