Commit Graph

947 Commits

Author SHA1 Message Date
lawnjelly 66f519bc87 Prevent drawing MultiMesh with zero instance count
Issuing a driver drawcall for MultiMesh with zero instances crashes some drivers.

(cherry picked from commit a300505066)
2022-09-20 10:24:30 +02:00
lawnjelly b44d47f582 Fix GLES directional shadow uninitialized data
Valgrind shows directional_shadow.fbo accessed when uninitialized in directional_shadow_create.

(cherry picked from commit 9b294b298e)
2022-09-09 14:29:55 +02:00
lawnjelly ec82655ca0 Fix skeleton 2D stale bounding rect
Adds special logic for handling skeleton bounding rect updates. Previously these were never being updated because the canvas item is never set to "rect_dirty".

(cherry picked from commit 18bb668a2e)
2022-08-08 13:35:18 +02:00
Rémi Verschelde 818f1eed31 Code quality: Fix header guards consistency
Adds `header_guards.sh` bash script, used in CI to validate future
changes. Can be run locally to fix invalid header guards.
2022-07-25 14:53:37 +02:00
Hugo Locurcio b03ceaba2f
Document support limitations for OmniLight cubemap shadows in GLES2 2022-07-18 22:18:56 +02:00
Rémi Verschelde 772d071863 SCons: Properly track codegen script dependency for generated GLES headers 2022-07-02 15:52:42 +02:00
lawnjelly f8df04ed50 More low priority redraw request cases
Some more cases of textures etc causing continuous updates in vital updates only mode are fixed.
2022-06-12 06:44:59 +01:00
clayjohn f92141be13 Disable Alpha throughout Glow and FXAA code in order to avoid issues with transparent viewports 2022-05-26 11:15:35 -07:00
clayjohn 9927515254 Disable alpha in post process when using opaque framebuffer 2022-05-24 14:11:09 -07:00
clayjohn 027ec28126 Disable writing to alpha with opaque framebuffer 2022-05-24 10:30:49 -07:00
clayjohn 3374bae953 Fixed Bug where DoF incorrectly wrote to alpha channel amd bug with tonemap shaders 2022-05-18 13:19:42 -07:00
Hugo Locurcio 3762b40de7
Merge pull request #54585 from Kinwailo/fix_viewport_transparent_bg
Fix viewport with transparent bg changed to solid black if enable fxaa or debanding.
2022-05-16 08:28:36 +02:00
Kinwailo b1a50ad805 fix post procressing with transparent bg and keep alpha channel of the tonemap shader output 2022-05-12 16:32:31 +08:00
clayjohn 33d825c50b Unpack blend shape arrays when necessary
Blend shapes need to be unpacked if the vertex array is being unpacked
2022-05-06 10:36:18 -07:00
Ansraer 2fb998bfbc Fix alpha scissor support 2022-03-11 16:18:19 +01:00
Rémi Verschelde b6a6c90ea2
Merge pull request #58855 from akien-mga/3.x-gles2-fix-VersionKey-comparison 2022-03-07 14:31:43 +01:00
Rémi Verschelde 2dec5db5df
Merge pull request #58357 from BastiaanOlij/fix_external_viewport_texture 2022-03-07 13:18:33 +01:00
Rémi Verschelde 76df26b110 GLES2: Fix VersionKey comparison in `ShaderGLES2::bind()`
This was comparing arrays, GCC 12 raises a warning for it:

```
drivers/gles2/shader_gles2.cpp: In member function 'bool ShaderGLES2::bind()':
drivers/gles2/shader_gles2.cpp:80:71: error: comparison between two arrays [-Werror=array-compare]
   80 |         if (active != this || !version || new_conditional_version.key != conditional_version.key) {
      |                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/gles2/shader_gles2.cpp:80:71: note: use unary '+' which decays operands to pointers or '&'component_ref' not supported by dump_decl<declaration error>[0] != &'component_ref' not supported by dump_decl<declaration error>[0]' to compare the addresses
```
2022-03-07 09:30:22 +01:00
Omar El Sheikh 733a84f7a4 GLES2 Compression on Blend Shapes Fix
When compressed vertex positions are used in a blend shapes mesh, we
need to make sure we set the w-component of the position vector to 1.0

When octahedral compression is used on normals/tangents, they need to be
converted to cartesian floats to be used for blend shapes

This conversion also changes the number of components of that vertex
attribute, which caused issues because previously there was an
assumption that you had the same number of components in the blend shape
buffer as you did in the original mesh's buffer (which is not true for
oct norm/tang)
2022-03-06 10:57:05 -05:00
Bastiaan Olij 7e2c4aac7e Fix external textures not working correctly with viewport texture 2022-02-22 14:24:34 +11:00
lawnjelly 522bce1159 Fixed Timestep Interpolation (3D)
Adds fixed timestep interpolation to the visual server.
Switchable on and off with project setting.

This version does not add new API for set_transform etc, when nodes have the interpolated flag set they will always use interpolation.
2022-02-16 09:41:23 +00:00
lawnjelly 3dc0e97d05 Fix incorrect buffer upload size in GLES2 draw_gui_primitive
The buffer upload size appears to have been incorrect for quite some time, which causes uploading from undefined memory.
2022-02-15 17:24:51 +00:00
lawnjelly 614dc363ab Fix GL buffer upload size bugs
Wrapper functions for uploading buffers to OpenGL take all sizes and offsets in bytes. Some buffer sizes are specified as units (e.g. float) so require conversion to bytes when calling the buffer upload functions.

Two such bugs have been fixed in blendshapes, and parameter names and comments have been changed to emphasize that sizes should be in bytes.

In addition DEV_ASSERTS in the upload wrappers have been changed to ERR_FAIL.
2022-02-14 10:56:06 +00:00
Firepal ff55157d3f Don't use prepass threshold with alpha scissor 2022-02-11 12:01:15 +01:00
lawnjelly b15ad8e786 Fix for S3TC on Android and IOS devices
On some platforms, exporters are prevented from exporting S3TC textures. This causes problems if the .import file contains a reference to such a texture - the exported project will attempt to load the S3TC, fail, and probably crash.

This PR prevents this problem by faking lack of hardware support for S3TC on the affected platforms. This prevents the engine attempting to load the S3TC and avoids the problem.
2022-02-09 08:45:24 +00:00
Omar El Sheikh bf5b2f48e6 Re-fix Disabling Half Floats on iOS
A previous change missed setting a flag that specified whether half
floats were being used on vertex positions when in the GLES2 driver

This caused errors with the vertex buffer when platforms (specifically
iOS) which do not properly support half float vertex attributes on
GLES2, try to remapt the vertex buffer to stop using half floats
(in this case that remapping never happened and caused artifacts)

Re-enable setting that flag to fix rendering issues on these platforms
2022-02-05 21:06:09 -05:00
lawnjelly a0c6d16c90 Add editor vital redraws only option
When editor continuous redraws is switched off, the editor only redraws when a redraw_request was issued by an element in the scene. This works well in most situations, but when scenes have dynamic content they will continuously issue redraw_requests.

This can be fine on high power desktops but can be an annoyance on lower power machines.

This PR splits redraw requests into high and low priority requests, defaulting to high priority. Requests due to e.g. shaders using TIME are assigned low priority.

An extra editor setting is used to record the user preference and an extra option is added to the editor spinner menu, to allow the user to select between 3 modes:

* Continuous
* Update all changes
* Update vital changes
2022-02-02 11:26:45 +00:00
Rémi Verschelde aa6465cd5b
Fix style error from previous merge 2022-01-22 16:23:28 +01:00
Rémi Verschelde 6c0c0c4b29
Merge pull request #54165 from Calinou/directional-shadow-runtime-change-3.x
Allow changing directional shadow size at run-time
2022-01-22 15:25:09 +01:00
Rémi Verschelde a627cdafc5
Update copyright statements to 2022
Happy new year to the wonderful Godot community!
2022-01-13 15:54:13 +01:00
Bastiaan Olij 5fbc24f3e0 Fix issue with external textures being freed by Godot 2021-12-22 11:46:37 +11:00
Lucas Ângelo 9f68b4fea3
Trunc shader function fixed
the 'trunc' function was comparing integers with floats using the '>' operator, which is not supported in Android. This issue is now gone.
2021-12-18 17:50:58 -03:00
lawnjelly 7134ef90bb Fix leaking environment RIDs in GLES2
This PR adds the code necessary to correctly free environments in GLES2, which was previously missing causing them to leak.
2021-12-07 18:42:10 +00:00
lawnjelly 6f4c0b95fc Fix incorrect RID cleanup in Rasterizers
Proper cleanup for GLES3 RIDs (preventing leak reports), and added missing destructor for RasterizerSceneGLES2.
2021-12-06 16:05:27 +00:00
lawnjelly 3d981b8265 Add option to use handles to RID
Adds an option to compile an alternative implementation for RIDs, which allows checks for erroneous usage patterns as well as providing leak tests.
2021-12-06 14:43:34 +00:00
Hugo Locurcio d7d35e4f73
Add `const` qualifier support for function arguments in shaders
This prevents the function argument from being reassigned within
the function.

Example:

    void test(const int t) {}
2021-11-19 21:20:23 +01:00
Fernando Cosentino cc8846bef6 Added material_overlay property to MeshInstance
Applying overlay materials into multi-surface meshes currently
requires adding a next pass material to all the surfaces, which
might be cumbersome when the material is to be applied to a range
of different geometries. This also makes it not trivial to use
AnimationPlayer to control the material in case of visual effects.
The material_override property is not an option as it works
replacing the active material for the surfaces, not adding a new pass.

This commit adds the material_overlay property to GeometryInstance
(and therefore MeshInstance), having the same reach as
material_override (that is, all surfaces) but adding a new material
pass on top of the active materials, instead of replacing them.

Implemented in rasterizer of both GLES2 and GLES3.
2021-11-15 23:50:34 +00:00
Rémi Verschelde 1f8497d281
Merge pull request #53411 from RandomShaper/ubershaders_3.x 2021-11-09 13:12:44 +01:00
Pedro J. Estébanez 4c710780d4 Implement async shader compilation plus caching for GL ES 3
Async. compilation via ubershader is currently available in the scene and particles shaders only.

Bonus:
- Use `#if defined()` syntax for not true conditionals, so they don't unnecessarily take a bit in the version flagset.
- Remove unused `ENABLE_CLIP_ALPHA` from scene shader.
- Remove unused `PARTICLES_COPY` from the particles shader.
- Remove unused uniform related code.
- Shader language/compiler: use ordered hash maps for deterministic code generation (needed for caching).
2021-11-09 12:19:12 +01:00
Rémi Verschelde cfff7a9032
Merge pull request #54751 from NHodgesVFX/3.x 2021-11-09 00:15:49 +01:00
Omar El Sheikh 8a43b222c7 Fix Vertex Attribute Specification Octahedral
For octahedral compressed normals/tangents, we use vec4 in the shader
regardless of whether a normal/tangent does/doesn't exist

For the case where we only have a normal vector, we need to specify that
there are only two components being used when calling glVertexAttrib

Before we would always specify that there were 4 components, and used
offsets to determine where in the vertex buffer to read data from but
this doesn't work on all platforms
2021-11-08 12:11:48 -05:00
NHodgesVFX 237f7eeabe Add more OpenGL Attributes
Co-Authored-By: Johann Meyer <25986904+johannmeyer@users.noreply.github.com>
Co-Authored-By: Clay John <claynjohn@gmail.com>
2021-11-08 01:22:40 -05:00
Rémi Verschelde 87c80f529f
clang-format: Enable `BreakBeforeTernaryOperators`
clang-format keeps breaking the way it handles break *after* ternary operators,
so I give up and go with the only style they seem to actually test.
2021-10-28 14:50:33 +02:00
Rémi Verschelde 42d385b312
clang-format: Disable alignment of operands, too unreliable
Sets `AlignOperands` to `DontAlign`.

`clang-format` developers seem to mostly care about space-based indentation and
every other version of clang-format breaks the bad mismatch of tabs and spaces
that it seems to use for operand alignment. So it's better without, so that it
respects our two-tabs `ContinuationIndentWidth`.
2021-10-28 13:23:38 +02:00
Hugo Locurcio 31ad99072f
Allow changing directional shadow size at run-time
Factoring out the directional shadow creation code allows calling it
at any time. This works in both GLES3 and GLES2.
2021-10-23 22:04:59 +02:00
Omar El Sheikh b679594eac Fix CSGPolygon Buffer Overflow
Immediate meshes do not have geometry of type Surface so we check
to see the mesh isn't immediate before trying to cast to surface
to check for octahedral compression
2021-10-18 11:39:54 -04:00
Hugo Locurcio cc823bc5b3
Remove unused built-in GLES2 shaders
These shaders were never compiled in the Godot binary, so the binary
size remains identical.
2021-10-15 17:41:31 +02:00
Timur Celik e230bc6caa Fix flipped `interior` option for second refprobe
This patch fixes rendering of multiple reflection probes for a single
mesh in the GLES2 renderer.  If there were two reflection probes, one of
them would always have the `interior` option flipped, resulting in
broken blending between probes and flickering of ambient reflection.

Also make note of GLES2 reflection probe limit
2021-10-13 10:04:48 +02:00
Rémi Verschelde 302ad4e600
Merge pull request #52918 from Calinou/add-new-light-attenuation-3.x 2021-10-08 23:08:49 +02:00
Hugo Locurcio 85e080fcc0
Backport new 3D point light attenuation as an option
This provides more realistic lighting with a very small performance cost.
The option is available in both GLES3 and GLES2, and can be enabled in
the Project Settings. This goes well with the ACES Fitted tonemapping mode
that was recently added.

When enabled, this also makes upgrading Godot 3.x projects to Godot 4.0 easier,
since lighting in 3.x will better match how it'll look in Godot 4.0.
2021-10-08 22:15:22 +02:00