This page documents the differences between GLES2 and GLES3 that are by design and are not the result
of bugs. There may be differences that are unintentional, but they should be reported as bugs.

Note

“GLES2” and “GLES3” are the names used in Godot for the two OpenGL-based rendering backends.
In terms of graphics APIs, the GLES2 backend maps to OpenGL 2.1 on desktop, OpenGL ES 2.0 on
mobile and WebGL 1.0 on the web. The GLES3 backend maps to OpenGL 3.3 on desktop, OpenGL ES
3.0 on mobile and WebGL 2.0 on the web.

GLES2 is not capable of using High Dynamic Range (HDR) rendering features. If HDR is set for your
project, or for a given viewport, Godot will still user Low Dynamic Range (LDR) which limits
viewport values to the 0-1 range.

In GLES2, the following advanced rendering features in the StandardMaterial3D are missing:

Refraction

Subsurface scattering

Anisotropy

Clearcoat

Depth mapping

When using StandardMaterial3Ds they will not even appear in the editor.

In custom ShaderMaterials, you can set values for these features but they
will be non-functional. For example, you will still be able to set the SSS built-in (which normally adds
subsurface scattering) in your shader, but nothing will happen.

In GLES2, performance scales poorly with several lights, as each light is processed in a separate render
pass (in opposition to GLES3 which is all done in a single pass). Try to limit scenes to as few lights as
possible in order to achieve greatest performance.

On mobile, GLES2 requires ETC texture compression, while GLES3 requires ETC2. ETC2 is enabled by default,
so if exporting to mobile using GLES2 make sure to set the project setting
rendering/vram_compression/import_etc and then reimport textures.

Warning

Since ETC doesn’t support transparency, you must reimport textures that contain
an alpha channel to use the Uncompressed, Lossy or Lossless compression mode
(instead of Video RAM). This can be done in the Import dock after selecting
them in the FileSystem dock.

Godot also provides many built-in variables and render modes. Some cannot be supported in GLES2. Below is a list of
built-in variables and render modes that, when written to, will have no effect or could even cause issues when using
the GLES2 backend.