Commit Graph

26809 Commits

Author SHA1 Message Date
lawnjelly 451c3fc0fb GLES2 2D batching - item reordering, light joining and light modulate fix
Although 2D draws in painters order with strict ordering, in certain circumstances items can be reordered to increase batching / decrease state changes, without affecting the end result. This can be determined by an overlap test.

In situation with item:
A-B-A
providing the third item does not overlap the second, they can be reordered:
A-A-B

Items already contain an AABB which can be used for this overlap test.

1)
To utilise this, I have implemented item reordering (only for single rects for now), with the lookahead adjustable in project settings. This can increase performance in situations where items may not be grouped in the scene tree by texture. It can also be switched off (by setting lookahead to 0).

2)
This same trick can be used to help join items that are lit. Lit items previously would prevent joining completely, thus missing out on performance gains other than multi-command items such as tilemaps.

In this PR, lights are assigned as bits in a bitfield (up to 64, the optimization is disabled above this), and on each try_item (for joining), the bitfield for lights and shadows is constructed and compared with the previous items. If these match the 2 items can potentially be joined. However, this can only be done without changing the rendered result if an overlap test is successful.

This overlap test can be adjusted to join items up to a specific number of item references, selectable in project settings, or turned off.

3)
The legacy uniform single rect drawing routine seems to have been identified as the source of flicker, particularly on nvidia. However, it can also be up to 2x as fast. Because of the speed the batching contains a fallback where it can use the legacy single rect method, but I have now added a project setting to make this switchable. In most cases with batching it should not be necessary (as single rects are drawn less frequently) and thus the flickering can be totally avoided.

4)
This PR also fixes a color modulate bug when drawing light passes, in certain situations (particularly custom _draw routines with multiple rects).

5)
This PR also fixes #38291, a bug in the legacy renderer where light passes could draw rects in wrong position.
2020-05-01 07:47:33 +01:00
Rémi Verschelde 510406af28
Merge pull request #38350 from RandomShaper/fix_variant_to_rid
Fix errors in Variant to RID conversion
2020-04-30 16:25:29 +02:00
Pedro J. Estébanez ee301bceb5 Fix errors in Variant to RID conversion 2020-04-30 10:23:30 +02:00
Rémi Verschelde da68cece7f
Merge pull request #38338 from RandomShaper/time_rollback_3.2
Improve shader time roll over (3.2)
2020-04-30 09:07:34 +02:00
Rémi Verschelde 8d93303483
Merge pull request #37863 from ExpiredPopsicle/culling5
Fixed false positives in the culling system.
2020-04-30 08:05:11 +02:00
Pedro J. Estébanez 7cc0f181c9 Improve shader time roll over
- Resurrect it for GL ES 2
- Apply roll over with `fmod()` instead of resetting it to 0
- Expose the setting from the `VisualServer`, since it does not belong in any specific rasterizer
2020-04-29 22:33:03 +02:00
Rémi Verschelde c8ea779848
Merge pull request #38322 from RandomShaper/imvu/fix_not_freed_gdsfuncstate_3.2
Fix leaked objects when game ends with yields in progress (3.2)
2020-04-29 17:30:39 +02:00
Pedro J. Estébanez 68cca6e619 Fix leaked objects when game ends with yields in progress 2020-04-29 14:13:36 +02:00
Rémi Verschelde f2150d1766
Merge pull request #37462 from Chaosus/shader_fix_const_order
[3.2] Fix shader constant sorting
2020-04-29 09:41:49 +02:00
Rémi Verschelde fc5dad44ad
Merge pull request #38299 from m4gr3d/update_external_texture_documentation
Update the ExternalTexture documentation
2020-04-29 09:15:13 +02:00
Kiri Jolly bac44ee19f Fixed false positives in the culling system.
This fixes numerous false positives coming out of the culling system.

AABB checks are now a full separating-axis check against the frustum, with the points of the frustum being compared to the planes of the box just as the points of the box were being compared to the planes of the frustum. This fixes large objects behind the camera not being culled correctly.

Some systems that used frustums that were (sometimes mistakenly?) unbounded on one or more side have been modified to be fully enclosed.
2020-04-28 17:14:06 -07:00
Kiri Jolly 2c6e859c2d Fixed unbounded dual-paraboloid shadow map culling.
Dual paraboloid shadowmaps were ending up with infinitely large volumes of area behind the hemisphere un-culled.

This change just adds a back plane to the convex shape used for the culling volume.
2020-04-28 17:13:36 -07:00
Fredia Huya-Kouadio 9b9f70bd20 Update the documentation for `ExternalTexture` to match the restriction on Android platforms 2020-04-28 08:04:41 -07:00
Rémi Verschelde 60609ff0ed
Merge pull request #38244 from m4gr3d/resolve_gl_invalid_enum_error
[3.2] Restrict `GL_TEXTURE_EXTERNAL_OES` to Android platforms
2020-04-28 11:20:11 +02:00
Fredia Huya-Kouadio 7c559afe29 Restrict `GL_TEXTURE_EXTERNAL_OES` to Android platform 2020-04-27 10:18:31 -07:00
Rémi Verschelde 78f0cf40cb
Merge pull request #38257 from RandomShaper/imvu/fix_variantrc_gdnative
Fix GDNative compat breakage due to dangling Variants fix
2020-04-27 18:43:10 +02:00
Rémi Verschelde 4dda00461f
Merge pull request #38011 from madmiraal/fix-csg-3.2
[3.2] Fix multiple issues with CSG module.
2020-04-27 17:05:47 +02:00
Pedro J. Estébanez 3bdc0913a5 Make wording of all Variant warnings consistent 2020-04-27 13:15:52 +02:00
Pedro J. Estébanez ac8b4708a3 Fix GDNative compat breakage due to dangling Variants fix
This moves the instance id member from Variant to the ObjectRC so that Variant is still the same size as before the fix (and also regardless if debug or release build).
2020-04-27 13:07:52 +02:00
Rémi Verschelde 9015138e3e
Merge pull request #38254 from akien-mga/3.2-cherrypicks
Cherry-picks for the 3.2 branch (future 3.2.2) - 4th batch
2020-04-27 12:23:06 +02:00
Rémi Verschelde ae958b89ab i18n: Sync translations with Weblate 2020-04-27 10:32:51 +02:00
Hugo Locurcio 9b6df1ed00 Set the `title` tag in the HTML5 export immediately
This makes the project title display without having to wait for
the project to finish loading.

(cherry picked from commit eecce139ea)
2020-04-27 10:19:33 +02:00
Rémi Verschelde aecba58e92 Windows: Appease capricious MSVC versions with moody headers
Fixes #37799.
Fixes #37986.

(cherry picked from commit 4d3a18d9ff)
2020-04-27 10:19:08 +02:00
Hugo Locurcio ae0bc06eba Improve `pitch_scale` descriptions in AudioStreamPlayer documentation
This closes #29439.

Co-authored-by: Cheeseness <contact@jbushproductions.com>
(cherry picked from commit 4751dee7f4)
2020-04-27 10:18:41 +02:00
Hugo Locurcio 93ba25cfcb Improve path search behavior discoverability in the project manager
This closes #38185.

(cherry picked from commit 72da1667e0)
2020-04-27 10:17:08 +02:00
Tobias Mansfield-Williams 8b33b08c29 Add const to InputEventMouseButton::get_factor
(cherry picked from commit 982efb1864)
2020-04-27 10:16:21 +02:00
Fredia Huya-Kouadio 2d9725b89d Fix detection logic for the Android sdk path
The previous logic used the 'tools' directory within the Android sdk to validate it. That directory was recently deprecated and removed from the Android sdk folder (https://developer.android.com/studio/releases/sdk-tools)

(cherry picked from commit 328354f878)
2020-04-27 10:15:56 +02:00
Michael Alexsander de4c75af10 Fix crash when changing time value of multiple animation keys at once via inspector
(cherry picked from commit b081e954cc)
2020-04-27 10:15:39 +02:00
Ignacio Etcheverry 8cdcb410e0 Mono/C#: Fix load hook not called for some assemblies on domain reload
(cherry picked from commit f5510262bc)
2020-04-27 10:15:24 +02:00
Ignacio Etcheverry a98d44f654 C#: Fix always saving copy of csproj even with no changes
This was a regression from 93d7ec8836 (#38110).
Mono's old implementation of Microsoft.Build hardcodes HasUnsavedChanges to
always return true.
This workaround can be reverted once we switch to official Microsoft.Build.

(cherry picked from commit 81f13f6171)
2020-04-27 10:15:07 +02:00
Hugo Locurcio 24265c498b Improve the procedural geometry class documentations
This references Godot's winding order at the top of every
procedural geometry class, as well as referencing other classes
within a given geometry class.

A warning about ImmediateGeometry3D performance was also added.

(cherry picked from commit ed7347d73d)
2020-04-27 10:14:42 +02:00
Hugo Locurcio 93555d9ccc Add editor freelook navigation scheme settings
Depending on what one is trying to achieve, a different freelook mode
may be more desirable.

This closes #34034.

(cherry picked from commit 8a48fb3517)
2020-04-27 10:12:55 +02:00
Hugo Locurcio bbd381c987 Add an easing/transition type cheatsheet to the Tween documentation
Related to https://github.com/godotengine/godot-docs/pull/3403.

(cherry picked from commit 5972a9138e)
2020-04-27 10:12:11 +02:00
Hugo Locurcio f3cd7e3808 Document how some editor classes should be accessed as singletons only
This closes #37687.

(cherry picked from commit a225265b0a)
2020-04-27 10:11:53 +02:00
Tom Evans 3bd5fc2e5e Mark assert lines as safe in gdscript
Now calling _reduce_node_type with debugging enabled to determine
if assert line is safe. Part of doing this required the assert line
to be stored away. Now the AssertNode line is being correctly set.
Newlines are now marked safe always

(cherry picked from commit 8dc8833782)
2020-04-27 10:10:20 +02:00
Umang Kalra 94d0f34f70 Fixed the bool _static logic
(cherry picked from commit b192c7d1ac)
2020-04-27 10:09:49 +02:00
Hugo Locurcio 708184c402 Add more extensions to the dummy texture loader
This should make headless exporting work in projects using textures
in any format.

Error messages should no longer appear when running a project
that used image formats that were previously not present in the list.

(cherry picked from commit 3007c7e2a3)
2020-04-27 10:09:17 +02:00
Rémi Verschelde 0233b7e51f
Merge pull request #38251 from clayjohn/GLES2-shader-defines
Avoid duplicating shader defines in GLES2
2020-04-27 08:47:46 +02:00
clayjohn 782fd5fab6 Avoid duplicating shader defines in GLES2 2020-04-26 23:28:24 -07:00
Rémi Verschelde be5a47e75d
Merge pull request #38200 from lawnjelly/kessel_screen_read
GLES2 Batching fix canvas texscreen (SCREEN_TEXTURE)
2020-04-25 16:10:53 +02:00
lawnjelly a75c1ed1df GLES2 Batching fix canvas texscreen (SCREEN_TEXTURE)
When reading SCREEN_TEXTURE in a shader, this previously only worked succesfully for the first read of the screen, because state.canvas_texscreen_used was never getting reset. This PR resets state.canvas_texscreen_used at the beginning of each joined item, so that further screen reads can happen.
2020-04-25 13:40:43 +01:00
Rémi Verschelde a9def52225
Merge pull request #38156 from Calinou/tweak-ssao-property-hints-3.2
Tweak SSAO property hints to allow setting more precise values (3.2)
2020-04-25 12:55:33 +02:00
Rémi Verschelde 4f32d545f1
Merge pull request #37108 from RandomShaper/imvu/export_vmem_3.2
Add ability to export debugger's VRAM usage report (3.2)
2020-04-25 00:32:51 +02:00
Rémi Verschelde 5d5848d2b1
Merge pull request #38119 from RandomShaper/imvu/new_dangling_variant_fix
Fix dangling Variants (3.2)
2020-04-24 17:59:52 +02:00
Rémi Verschelde b04f092643
Merge pull request #38141 from neikeq/3.2-fix-collections-marshalling-by-interface
C#: Revert marshalling of IDictionary/IEnumerable implementing types
2020-04-24 17:56:25 +02:00
Rémi Verschelde e408c61497
Merge pull request #38137 from lawnjelly/kessel_z_lightfix
Fix batching z_indices with z ranged lights
2020-04-24 17:31:55 +02:00
Pedro J. Estébanez 5cb2cfe655 Add ability to export VRAM usage as CSV 2020-04-24 09:22:36 +02:00
Hugo Locurcio 464fe67e96
Tweak SSAO property hints to allow setting more precise values
This was requested by an user on Twitter who was working on a game with a very small-scale world.
2020-04-23 21:59:53 +02:00
Ignacio Etcheverry 6aca932659 C#: Revert marshalling of IDictionary/IEnumerable implementing types
Added marshalling for `System.Collections.Generic.List<T>` and
`System.Collections.Generic.Dictionary<TKey, TValue>`.
2020-04-23 15:36:01 +02:00
Pedro J. Estébanez d904d05e65 Fix dangling and reassigned Variants
This commit addresses multiple issues with `Variant`s that point to an `Object`
which is later released, when it's tried to be accessed again.

Formerly, **while running on the debugger the system would check if the instance id was
still valid** to print warnings or return special values. Some cases weren't being
warned about whatsoever.

Also, a newly allocated `Object` could happen to be allocated at the same memory
address of an old one, making cases of use hard to find and having **`Variant`s pointing
to the old one magically reassigned to the new**.

This commit makes the engine realize all these situations **under debugging**
so you can detect and fix them. Running without a debugger attached will still
behave as it always did.

Also the warning messages have been extended and made clearer.

All that said, in the name of performance there's still one possible case of undefined
behavior: in multithreaded scripts there would be a race condition between a thread freeing
an `Object` and another one trying to operate on it. The latter may not realize the
`Object` has been freed soon enough. But that's a case of bad scripting that was never
supported anyway.
2020-04-23 13:51:02 +02:00