Commit graph

2660 commits

Author SHA1 Message Date
Rémi Verschelde
e2b66cacf7
Merge pull request #18020 from bruvzg/input_fix_non_latin_and_add_hw_scancodes
Fix non-latin layout scancodes on Linux, adds access to physical scancodes.
2020-03-01 23:00:42 +01:00
Rémi Verschelde
b7b3978684
Merge pull request #36556 from RandomShaper/rework_mutex
Reimplement `Mutex` with C++'s `<mutex>` (plus more)
2020-02-28 00:26:01 +01:00
Rémi Verschelde
2ceaa6a096
Merge pull request #36572 from qarmin/coverage
Added code coverage support to Godot
2020-02-27 14:13:23 +01:00
Pedro J. Estébanez
18fbdbb456 Reimplement Mutex with C++'s <mutex>
Main:
- It's now implemented thanks to `<mutex>`. No more platform-specific implementations.
- `BinaryMutex` (non-recursive) is added, as an alternative for special cases.
- Doesn't need allocation/deallocation anymore. It can live in the stack and be part of other classes.
- Because of that, it's methods are now `const` and the inner mutex is `mutable` so it can be easily used in `const` contexts.
- A no-op implementation is provided if `NO_THREADS` is defined. No more need to add `#ifdef NO_THREADS` just for this.
- `MutexLock` now takes a reference. At this point the cases of null `Mutex`es are rare. If you ever need that, just don't use `MutexLock`.
- Thread-safe utilities are therefore simpler now.

Misc.:
- `ScopedMutexLock` is dropped and replaced by `MutexLock`, because they were pretty much the same.
- Every case of lock, do-something, unlock is replaced by `MutexLock` (complex cases where it's not straightfoward are kept as as explicit lock and unlock).
- `ShaderRD` contained an `std::mutex`, which has been replaced by `Mutex`.
2020-02-26 20:40:10 +01:00
Rafał Mikrut
b2b0210d66 Added code coverate support to Godot 2020-02-26 19:43:03 +01:00
Rémi Verschelde
c7dc5142b5 SCons: Fix get_compiler_version() to return ints
Otherwise comparisons would fail for compiler versions above 10.
Also simplified code somewhat to avoid using subprocess too much
needlessly.
2020-02-26 14:23:34 +01:00
Christoph Schroeder
5134317afc Fixes touch events for HTML
Without this patch, the following exception is thrown when the touch
screen is used: TypeError: e.getBoundingClientRect is not a function.
No touch events arrive in the engine.

From my testing, this PR fixes the issue and behaves as expected.

Tested with godot-demo-projects/misc/multitouch_view/, emscripten 1.39.8
and Firefox mobile emulator as well as FF on Android
2020-02-26 12:04:18 +01:00
Rémi Verschelde
a7e1df4b1d doc: Sync classref for Packed{Int,Float}{32,64}Array additions 2020-02-25 22:02:36 +01:00
Juan Linietsky
33b5c57199 Variant: Added 64-bit packed arrays, renamed Variant::REAL to FLOAT.
- Renames PackedIntArray to PackedInt32Array.
- Renames PackedFloatArray to PackedFloat32Array.
- Adds PackedInt64Array and PackedFloat64Array.
- Renames Variant::REAL to Variant::FLOAT for consistency.

Packed arrays are for storing large amount of data and creating stuff like
meshes, buffers. textures, etc. Forcing them to be 64 is a huge waste of
memory. That said, many users requested the ability to have 64 bits packed
arrays for their games, so this is just an optional added type.

For Variant, the float datatype is always 64 bits, and exposed as `float`.

We still have `real_t` which is the datatype that can change from 32 to 64
bits depending on a compile flag (not entirely working right now, but that's
the idea). It affects math related datatypes and code only.

Neither Variant nor PackedArray make use of real_t, which is only intended
for math precision, so the term is removed from there to keep only float.
2020-02-25 12:55:53 +01:00
bruvzg
1af06d3d46
Rename scancode to keycode.
Add `physical_keycode` (keyboard layout independent keycodes) to InputEventKey and InputMap.
Fix non-latin keyboard layout keycodes on Linux/X11 (fallback to physical keycodes).
2020-02-25 12:30:33 +02:00
Rémi Verschelde
223c5ef8a3
Merge pull request #36478 from qarmin/supsicious_operators_everywhere
Fix suspicious | and + operators
2020-02-23 10:30:06 +01:00
Rafał Mikrut
d0621b954b Fix suspicious | and + operators 2020-02-23 09:28:54 +01:00
Rémi Verschelde
2cf6ac6c50 Replace FALLTHROUGH macro by C++17 [[fallthrough]]
This attribute is now part of the standard we target so we no longer
need compiler-specific hacks.

Also enables -Wimplicit-fallthrough for Clang now that we can properly
support it. It's already on by default for GCC's -Wextra.

Fixes new warnings raised by Clang's -Wimplicit-fallthrough.
2020-02-23 00:52:50 +01:00
Rémi Verschelde
6bb075a53f Travis: Use Ubuntu 18.04 (bionic) as base image
It's now available and allows us to have a better default environment,
with GCC 7.4.0 and Clang 7.

We now need GCC 7+ for C++17 support so it's more efficient to upgrade
the image than to install it on Ubuntu 16.04 (xenial).

Also fixes a couple -Wdeprecated-declarations warnings on macOS now
that we build against macOS 10.12.
2020-02-22 20:00:28 +01:00
Rémi Verschelde
a4801674c5 SCons: Bump required C++ standard to C++17
As per #36436, we now need C++17's guaranteed copy elision feature to
solve ambiguities in Variant.

Core developers discussed the idea to move from C++14 to C++17 as our
minimum required C++ standard, and all agreed. Note that this doesn't
mean that Godot is going to be written in "modern C++", but we'll use
modern features where they make sense to simplify our "C with classes"
codebase. Apart from new code written recently, most of the codebase
still has to be ported to use newer features where relevant.

Proper support for C++17 means that we need recent compiler versions:

 - GCC 7+
 - Clang 6+
 - VS 2017 15.7+

Additionally, C++17's `std::shared_mutex` (conditionally used by
`vk_mem_alloc.h` when C++17 support is enabled) is only available in
macOS 10.12+, so we increase our minimum supported version.
2020-02-22 20:00:21 +01:00
Sam Green
f12c0d1e98 Stub out Vulkan context for iPhone 2020-02-21 22:01:13 -08:00
Sam Green
2ba72b3a65 Add use_static_mvk option 2020-02-21 22:00:34 -08:00
Sam Green
f40ff128b5 Update detect.py 2020-02-21 21:42:34 -08:00
Sam Green
e03e607230 Resolve iOS and GLES compilation failures 2020-02-21 21:01:34 -08:00
Sam Green
6e25a5448d Import the correct rasterizer based on build settings 2020-02-21 20:48:19 -08:00
Fabio Alessandrelli
cbc450c0e5 Huge Debugger/EditorDebugger refactor. 2020-02-21 11:12:03 +01:00
Juan Linietsky
69c95f4b4c Reworked signal connection system, added support for Callable and Signal objects and made them default. 2020-02-20 08:24:50 +01:00
Twarit
04882a481b Remove unused driver/dummy/audio_driver_dummy.h 2020-02-20 00:59:31 +05:30
Juan Linietsky
3205a92ad8 PoolVector is gone, replaced by Vector
Typed `PoolTypeArray` types are now renamed `PackedTypeArray` and are
sugar for `Vector<Type>`.
2020-02-18 10:10:36 +01:00
Rémi Verschelde
3dea5fd631 Remove incomplete battery status/power API
It was initially implemented in #5871 for Godot 3.0, but never really
completed or thoroughly tested for most platforms. It then stayed in
limbo and nobody seems really keen to finish it, so it's better to
remove it in 4.0, and re-add eventually (possibly with a different API)
if there's demand and an implementation confirmed working on all
platforms.

Closes #8770.
2020-02-14 13:43:32 +01:00
Rémi Verschelde
386968ea97 Remove obsolete GLES3 backend
Due to the port to Vulkan and complete redesign of the rendering backend,
the `drivers/gles3` code is no longer usable in this state and is not
planned to be ported to the new architecture.

The GLES2 backend is kept (while still disabled and non-working) as it
will eventually be ported to serve as the low-end renderer for Godot 4.0.

Some GLES3 features might be selectively ported to the updated GLES2
backend if there's a need for them, and extensions we can use for that.

So long, OpenGL driver bugs!
2020-02-13 10:36:44 +01:00
Relintai
cb29ce8a3b Fix startGame's logic in engine.js. 2020-02-12 23:13:53 +01:00
Juan Linietsky
525c40a488 Force vulkan driver until OpenGL is implemented 2020-02-12 11:45:40 -03:00
Rémi Verschelde
db81928e08 Vulkan: Move thirdparty code out of drivers, style fixes
- `vk_enum_string_helper.h` is a generated file taken from the SDK
  (Vulkan-ValidationLayers).
- `vk_mem_alloc.h` is a library from GPUOpen:
  https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
2020-02-11 14:08:44 +01:00
bruvzg
0ce4433686 Restore parts of #33783 and #32809 missing after rebase. 2020-02-11 12:06:30 +01:00
Rémi Verschelde
fff4240bb4 Fix code formatting issues and VS compilation
Also temporarily disable multicheck build so that we get a full build
even when there are style issues on Vulkan.

Fixes #33356.
2020-02-11 12:05:19 +01:00
Rémi Verschelde
a8e14bee58 Merge pull request #32821 from bruvzg/vlk_fix_macos_exit
[Vulkan, macOS] Fix RID leaks and crashes on exit.
2020-02-11 12:04:20 +01:00
bruvzg
a85923b972 Move Vulkan context/rendering_device destruction to windowWillClose notification. 2020-02-11 12:04:16 +01:00
bruvzg
d5df1b651c Improve HiDPI handling, fix incorrect window viewport clipping. 2020-02-11 12:04:04 +01:00
Juan Linietsky
6ee2f5e6b6 More GIProbe work and fixes 2020-02-11 12:03:49 +01:00
Rémi Verschelde
65ad12e79a glslang: Disable warnings and allow unbundling 2020-02-11 12:02:50 +01:00
Rémi Verschelde
511f65214f SCons: Streamline Vulkan buildsystem + fixups
- Renamed option to `builtin_vulkan`, since that's the name of the
  library and if we were to add new components, we'd likely use that
  same option.
- Merge `vulkan_loader/SCsub` in `vulkan/SCsub`.
- Accordingly, don't use built-in Vulkan headers when not building
  against the built-in loader library.
- Drop Vulkan registry which we don't appear to need currently.
- Style and permission fixes.
2020-02-11 11:59:04 +01:00
Rémi Verschelde
6289e7d147 Merge pull request #29993 from bruvzg/vulkan
Initial Vulkan support for macOS (MoltenVK) and Windows
2020-02-11 11:57:40 +01:00
bruvzg
b456bfad5c Add runtime GLES2 / Vulkan context selection. 2020-02-11 11:57:34 +01:00
bruvzg
eb48be51db Add static Vulkan loader.
Initial Vulkan support for Windows.
Initial Vulkan support for macOS.
2020-02-11 11:57:11 +01:00
Juan Linietsky
c613ead5fa Added a spinlock template as well as a thread work pool class.
Also, optimized shader compilation to happen on threads.
2020-02-11 11:53:29 +01:00
Juan Linietsky
0586e18449 Custom material support seems complete. 2020-02-11 11:53:29 +01:00
Juan Linietsky
1b4281b895 basic 2D engine is more or less working with Vulkan, including editor.
Still a lot to do
2020-02-11 11:53:27 +01:00
Juan Linietsky
9b0dd4f571 A lot of progress with canvas rendering, still far from working. 2020-02-11 11:53:27 +01:00
Juan Linietsky
3f335ce3d4 Texture refactor
-Texture renamed to Texture2D
-TextureLayered as base now inherits 2Darray, cubemap and cubemap array
-Removed all references to flags in textures (they will go in the shader)
-Texture3D gone for now (will come back later done properly)
-Create base rasterizer for RenderDevice, RasterizerRD
2020-02-11 11:53:26 +01:00
Juan Linietsky
9ffe57a10e Modify RenderingDevice to use RIDs, now that they are O(1) 2020-02-11 11:53:26 +01:00
Juan Linietsky
1522d8c3ee Added support for push constants 2020-02-11 11:53:26 +01:00
Juan Linietsky
fd188ddd51 Initial work on Vulkan:
-Added VulkanContext
-Added an X11 implementation
-Added a rendering device abstraction
-added a Vulkan rendering device abstraction
-Engine does not work, only shows Godot logo (run it from bin/)
2020-02-11 11:53:26 +01:00
muiroc
e51c6a0d28 Allow per pixel transparency in javascript platform 2020-02-10 14:27:30 +01:00
Rémi Verschelde
a832776262 Merge pull request #34140 from bruvzg/ios_auto_icons_and_loadscreens
[iOS] Option to automatically generate icons and launch screens
2020-02-10 11:27:47 +01:00
Rémi Verschelde
0ead0eeabb Merge pull request #35301 from Calinou/improve-console-error-logging
Improve the console error logging appearance
2020-02-10 11:16:01 +01:00
Rémi Verschelde
052118afa6 Merge pull request #35802 from bruvzg/linux_tablet_ranges
Fix pressure / tilt ranges on Linux.
2020-02-10 10:47:54 +01:00
Rémi Verschelde
e4ddbe8fd8 Merge pull request #36003 from MennoMax/linux-cursor-fallback
Adjusted linux cursors and added fallbacks
2020-02-10 10:40:31 +01:00
MennoMax
a9946b9515 adjusted linux cursors, added fallbacks 2020-02-10 01:52:19 +01:00
Rémi Verschelde
8e674ea70c
Merge pull request #35701 from AlexHolly/fix-double_tap-pressed-regression
Fix double tap pressed event regression
2020-02-09 13:12:16 +01:00
Rémi Verschelde
42f04cbc1a
Merge pull request #35982 from akien-mga/scons-modules-enabled-header-and-split
SCons: Split libmodules.a in folder-based libs
2020-02-08 15:43:10 +01:00
Fabio Alessandrelli
343b29a651 Merge pull request #35381 from Calinou/html5-export-favicon
Export and reference the icon as favicon when exporting to HTML5
2020-02-08 04:45:53 +01:00
Rémi Verschelde
4e2dbb1bc0 SCons: Split libmodules.a in folder-based libs
This removes the need for the hacky split_libmodules logic on Windows,
since all libs are now of manageable size.
2020-02-07 14:19:51 +01:00
muiroc
e563b47dbe Fix javascript platform build 2020-02-07 01:46:15 +01:00
Rémi Verschelde
17ce184921
Merge pull request #35886 from doot24/fix_#35871
Fixed Godot not recognising 150x150 icon for uwp export #35871
2020-02-06 10:31:31 +01:00
Hugo Locurcio
2dd3a01d11
Remove per-file progress reporting when exporting to Android
Calling `step()` on EditorProgress too often will slow down the
rest of the editor, so it's best avoided. This is also more consistent
with other exporters, as most of them don't report per-file progress
either.

Exporting a 2D project with ~1,100 files to Android now takes
about 10 seconds from a debug editor build instead of 65 seconds.

This closes #30850.
2020-02-05 22:24:39 +01:00
Marcel Admiraal
f0db13502a Remove duplicate WARN_PRINT macro. 2020-02-05 11:13:24 +01:00
Marcel Admiraal
5af3b4ca27 Remove duplicate ERR_PRINT macro. 2020-02-05 11:13:24 +01:00
D00T24
88bd3227ac fixed godot not recognising 150x150 icon for uwp export 2020-02-03 20:40:10 +04:00
Yuri Roubinsky
90f00c0813 Restores correct window position after fullscreen toggling off on Linux 2020-02-03 18:16:20 +03:00
Yuri Roubinsky
8737269275 Fix restoring window from fullscreen to normal on Linux 2020-02-03 17:15:24 +03:00
Hugo Locurcio
4492cf856b
Export and reference the icon as favicon when exporting to HTML5
This makes the project icon display immediately as a favicon when
opening the page, without having to wait for the project to finish
loading.
2020-02-01 10:33:23 +01:00
bruvzg
d552f93f8b
Fix pressure / tilt ranges on Linux. 2020-01-31 22:40:14 +02:00
Rémi Verschelde
8eef6d280b
Merge pull request #35451 from Calinou/html5-web-environment-only
Only emit the JavaScript support code for Web when building for HTML5
2020-01-31 18:36:29 +01:00
Rémi Verschelde
6f092c299e
Merge pull request #35785 from nekomatata/android-line-edit-length-fix
Fixed LineEdit virtual keyboard inputs on Android
2020-01-31 16:38:37 +01:00
PouleyKetchoupp
196860508a Fixed LineEdit virtual keyboard inputs on Android
Changed the condition to add a length filter to make it consistent with the documentation (0 means no character limit). Otherwise the default value in LineEdit causes the virtual keyboard to be non-fonctional on Android.
2020-01-31 16:24:09 +01:00
Hugo Locurcio
e818b51f32
Only emit the JavaScript support code for Web when building for HTML5
Excluding other unused environments like Node.js makes the support code
about 4 KB smaller.
2020-01-31 12:33:16 +01:00
Rémi Verschelde
fa7e2dd2ad
Merge pull request #35684 from timothyqiu/macos-sanitizers
Adds sanitizer options for macOS
2020-01-31 09:03:20 +01:00
Haoyu Qiu
8f881847c0 Adds extra cursors for macOS
Before, plain arrow cursor or unsuitable ones were used.
2020-01-31 14:16:06 +08:00
Alexander Holland
d2a5b7367b Fix double tap pressed event regression 2020-01-29 16:24:40 +01:00
Haoyu Qiu
df4ea84e03 Adds sanitizer options for macOS 2020-01-29 13:12:38 +08:00
Rémi Verschelde
68eae6b6e9 Fix some URLs to use HTTPS when available 2020-01-29 02:48:10 +01:00
Rémi Verschelde
096bf873bc
Merge pull request #35632 from godotengine/revert-32854-fix-wireless-adb-debugging
Revert "Fix Android deploy with Remote Debug or Network FS over Wi-Fi"
2020-01-27 21:13:37 +01:00
Rémi Verschelde
c317ac89bf
Revert "Fix Android deploy with Remote Debug or Network FS over Wi-Fi" 2020-01-27 19:59:24 +01:00
fhuya
9bd841b86d Address crash caused by missing dependency. 2020-01-27 10:45:25 -08:00
fhuya
e41caac7db Address crash caused by missing dependency. 2020-01-27 10:26:01 -08:00
Mark Wynn Garcia
141230192c Check if can export before exporting; show error message if can't export. 2020-01-26 11:45:17 +08:00
Rémi Verschelde
c2e07db071
Merge pull request #35438 from MadEqua/virtual-keyboard-line-edit
Android virtual keyboard respecting LineEdit max length.
2020-01-23 08:20:24 +01:00
Rémi Verschelde
c9cf6b102f
Merge pull request #35454 from Calinou/os-execute-default-blocking
Make `OS.execute()` blocking by default if not specified
2020-01-23 08:19:09 +01:00
Rémi Verschelde
05fc26de1c
Merge pull request #35444 from RandomShaper/fix_link_bsd
Fix error with linkers other than GNU ld
2020-01-23 07:57:02 +01:00
Bruno Lourenço
a3bcdbeb78 Android virtual keyboard respecting LineEdit max length. 2020-01-23 01:52:49 +00:00
Hugo Locurcio
90a1f8d8a7
Make OS.execute() blocking by default if not specified
This makes `OS.execute()` calls quicker to set up when calling programs
in a blocking fashion.
2020-01-23 01:26:32 +01:00
Pedro J. Estébanez
35dd36ca35 Fix error with linkers other than GNU ld 2020-01-22 22:38:08 +01:00
Eric Rybicki
67261b1e87 Remove buggy check if key was already released for accumulated input
Fixes #27104
2020-01-22 17:03:33 +01:00
Rémi Verschelde
b711c09bc8 Revert "Fix audio capture naming in Javascript"
This reverts commit 69f7263cd8.

Follow-up to #35359.
2020-01-20 21:35:19 +01:00
Rémi Verschelde
837adb30fd Revert "Exposes capture methods to AudioServer + documentation" #30468
Reverts the following commits:

- c81ec6f26d:
  "Exposes capture methods to AudioServer, variable renames for
  consistency, added documentation."
- 47c558b98a:
  "Expose audio callbacks as signals."
- dabaa11b3c:
  "Fix to make sure the capture buffers are deallocated at shutdown.
  Silences warnings."

Some documentation improvements were kept for pre-existing methods.

See rationale for reverting these changes in #30468.
2020-01-20 13:18:01 +01:00
Rémi Verschelde
adb6734b49 doc: Sync classref with current source 2020-01-19 23:19:29 +01:00
Ignacio Etcheverry
a6105c8ea0 Fix ClassDB API portability with some android and editor classes
- `EditorNavigationMeshGenerator` was being registered as part of the Core API,
even after d3f48f88bb. We must make sure to
set Editor as the current ClassDB API type before creating an instance.

- The `VisualScriptEngineSingleton.constant` property has a property hint string
that's different between tools and non-tools builds. This commit makes the
hint string to no longer be set in `_bind_methods`, and to instead set it in
`_validate_property`. This way it's ignored when calculating the API hash.

- `JavaClassWrapper` is now registered in ClassDB on all platforms,
using a dummy implementation on platforms other than Android.
This fixes API portability between Android and other platforms.

- Updated `--class-db-json` command to ignore non-virtual methods that start
with an underscore (see: 4be87c6016).
2020-01-19 20:15:13 +01:00
Hugo Locurcio
580b8cc012
Improve the console error logging appearance
This makes secondary information less visually prominent
to improve overall readability.

Various loggers were also tweaked for consistency.
2020-01-19 00:24:17 +01:00
Rémi Verschelde
b154bc8333
Merge pull request #35265 from zxcvdev/fix_crash_iphone_ios13
Fix iOS Crash on Application Exit
2020-01-18 15:23:38 +01:00
Rémi Verschelde
bc4ce44d77
Merge pull request #35256 from Faless/js/callback_target_fix
HTML5 callbacks rework.
2020-01-18 11:38:26 +01:00
zxcvdev
9a90ea1425 Fix crash when closing app on iphone 2020-01-18 09:54:07 +01:00
Fabio Alessandrelli
4a50f5ff65 HTML5 callbacks rework.
Fixes compatibility with emscripten 1.39.5+ .
Most input callbacks now require a target and no longer support NULL
defaults.

This commit changes all required null targets to the expected default in
the binding phase.
Since for canvas-related callbacks there is no default, the "#canvas"
selector is used instead.
Additionally, since canvasX and canvasY event properties are no longer
supported, event positions are computed from "clientX" and "clientY" and
the "#canvas" bounding client rect.
2020-01-17 21:42:36 +01:00
Rémi Verschelde
94a9cdb3b0
Merge pull request #35235 from akien-mga/android-launcher-icons-properties
Android: Improve name of icon export properties
2020-01-17 19:57:24 +01:00
Rémi Verschelde
435f86cf87 HTML5: Address removal of 'timestamp' in Emscripten 1.39.5
It was removed as noted in the changelog:
https://github.com/emscripten-core/emscripten/blob/1.39.5/ChangeLog.md#v1395-12202019

> Removed `timestamp` field from mouse, wheel, devicemotion and
> deviceorientation events. The presence of a `timestamp` on these
> events was slightly arbitrary, and populating this field caused
> a small profileable overhead that all users might not care about.
> It is easy to get a timestamp of an event by calling
> `emscripten_get_now()` or `emscripten_performance_now()` inside
> the event handler function of any event.

Fixes #34648.
2020-01-17 14:10:52 +01:00