While in WebGL many optional extensions were required for more advanced functionality, in WebGL 2 you can remove most of those extensions, because they are available by default. Some of these include the following:
- Depth textures: https://www.khronos.org/registry/WebGL/extensions/WebGL_depth_texture
- Floating point textures:
- Vertex array objects: https://www.khronos.org/registry/WebGL/extensions/OES_vertex_array_object
- Standard derivatives: https://www.khronos.org/registry/WebGL/extensions/OES_standard_derivatives
- Instanced drawing: https://www.khronos.org/registry/WebGL/extensions/ANGLE_instanced_arrays
- UNSIGNED_INT indices: https://www.khronos.org/registry/WebGL/extensions/OES_element_index_uint
- Setting gl_FragDepth: https://www.khronos.org/registry/WebGL/extensions/EXT_frag_depth
- Blend equation MIN/MAX: https://www.khronos.org/registry/WebGL/extensions/EXT_blend_minmax
- Direct texture LOD access: https://www.khronos.org/registry/WebGL/extensions/EXT_shader_texture_lod
- Multiple draw buffers: https://www.khronos.org/registry/WebGL/extensions/WebGL_draw_buffers
- Texture access in vertex shaders