Godot supports two rendering engines: GLES2 and GLES3. You should choose between GLES2 or GLES3 when you start your project, and avoid switching if possible. Projects can switch back and forth between these two rendering engines, but switching requires additional migration work.
On Android, these renderers use the OpenGL ES 2.0 and OpenGL ES 3.0 APIs respectively. The GLES3 renderer has more sophisticated capabilities and features, while the GLES2 renderer is compatible with more Android devices. The renderers also produce slightly different visual output for identical input scene data. This disparity is caused by the GLES2 renderer using a sRGB color space while the GLES3 renderer uses a linear color space.
Choosing a renderer
The GLES2 renderer is most appropriate for 2D or 3D projects with modest graphic requirements, and is compatible with virtually all active Android devices. If your project is designed to run well on older devices, and you intend to support them, GLES2 may be the best choice.
An important limitation of the GLES2 renderer on Android is that only one compressed texture format is supported: ETC1. ETC1 doesn't support an alpha channel. Other engines may use dual ETC1 textures as a workaround, with one texture containing color data and a second texture containing the alpha channel data. Godot doesn't do this. Projects using the GLES2 renderer on Android must use uncompressed textures when including an alpha channel. Uncompressed textures use significantly more memory and don't perform as well as compressed textures. Older devices with limited resources in particular may have issues when using large uncompressed textures, including running into memory limits.
Advanced rendering features might not be available to the GLES2 renderer. Limitations of the GLES2 renderer include but are not limited to:
- Poor performance scaling per active real-time light.
- Lack of support for rendering features such as high-definition range, refraction properties, screen space reflections, or screen space ambient occlusion.
- Restrictions on shader complexity.
- Lack of real-time global illumination support.
- Lack of GPU acceleration support for particles.
The GLES3 renderer is compatible with the approximately 90% of active Android devices that have OpenGL ES 3.0 support. Only the oldest of active Android devices lack OpenGL ES 3.0 support.
While the GLES3 renderer is compatible with any OpenGL ES 3.0 device, be aware that older devices are less likely to run at acceptable frame rates. Some older devices also contain graphic driver bugs in their OpenGL ES 3.0 implementations. The GLES3 renderer on Android has limited mitigations for driver bugs. These issues are less of a concern on newer devices.
The GLES3 renderer supports the ETC2 texture compression format on Android. Unlike ETC1, ETC2 includes support for an alpha channel.
For more information, see the Godot Documentation - Differences between GLES2 and GLES3