Godot supports two rendering engines: GLES2 and GLES3. We recommend you 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; however, this 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. It 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 does not support an alpha channel. Godot does not implement the workaround used by some other engines: using dual ETC1 textures where one texture contains color data and a second texture contains the alpha channel data. Projects using the GLES2 renderer on Android must use uncompressed textures when including an alpha channel. Uncompressed textures use significantly more memory and perform poorly compared to compressed textures. Care must be taken, especially on older devices with limited resources, to avoid running into memory limits or performance problems due to using large uncompressed textures.
If you intend to use more advanced rendering features in your project, they may not not be available to the GLES2 renderer. Some important 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, some precautions must be taken, especially for projects that use more sophisticated features of the GLES3 renderer. Older devices are more likely to lack sufficient performance 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.
Future Godot releases
Godot 4.0, which is currently in active development, adds a new renderer that is implemented by using the Vulkan API. Projects in early stages of development that intend to use advanced graphic features should plan on migrating to Godot 4.0 as soon as possible.