Differences between GLES2 and GLES3

    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 cannot use the or Particles2D nodes as they require advanced GPU features. Instead, use or CPUParticles2D, which provides a similar interface to a .

    Tip

    Particles and Particles2D can be converted to their CPU equivalent node with the “Convert to CPUParticles” option in the editor.

    SCREEN_TEXTURE mip-maps

    In GLES2, SCREEN_TEXTURE (accessed via a ShaderMaterial) does not have computed mip-maps. So when accessing at a different LOD, the texture will not appear blurry.

    DEPTH_TEXTURE

    While GLES2 supports DEPTH_TEXTURE in shaders, it may not work on some old hardware (especially mobile).

    Color space

    GLES2 and GLES3 are in different color spaces. This means that colors will appear slightly different between them especially when lighting is used.

    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.

    SpatialMaterial features

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

    • Refraction
    • Subsurface scattering
    • Anisotropy
    • Clearcoat
    • Depth mapping

    When using SpatialMaterials 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.

    Environment features

    In GLES2, the following features in the are missing:

    • Auto exposure
    • Screen space reflections
    • Screen space ambient occlusion

    That means that in GLES2 environments you can only set:

    • Sky (including procedural sky)
    • Ambient light
    • Fog
    • Depth of field
    • Glow (also known as bloom)
    • Adjustment

    GIProbes

    GIProbes do not work in GLES2. Instead use . For a description of how baked lightmaps work see the Baked Lightmaps tutorial.

    The shadow_contact property of is not supported in GLES2 and so does nothing.

    Light performance

    Texture compression

    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.

    Blend shapes

    Blend shapes are not supported in GLES2.

    GLES3 provides many built-in functions that GLES2 does not. Below is a list of functions that are not available or are have limited support in GLES2.

    For a complete list of built-in GLSL functions see the Shading Language doc.

    Note

    Functions not in GLES2’s GLSL were added with Godots own shader standard library. These functions may perform worse in GLES2 compared to GLES3.

    1. material_name.set_shader_param("textureName", my_texture)

    Built in variables and render modes

    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.

    Variable / Render Mode
    ensure_correct_normals
    INSTANCE_ID
    DEPTH
    ANISOTROPY
    ANISOTROPY_FLOW
    SSS_STRENGTH