Loading DDS and KTX with explicit mipmaps (using GL_TEXTURE_MAX_LEVEL).
Note that we still require only OpenGL ES 2.0. The OpenGL ES 3.0 features are optional for us.
Moreover:
Anisotropic filtering is now supported on OpenGLES, through an almost universally-available extension, just like on the desktop. See e.g. anisotropic_filtering demo. (Yeah, we should have a more comfortable way to adjust anisotropic filtering visually — I have 2 ideas about this, will explore them.)
We also fixed support for rendering shapes that require 32-bit indexes. While OpenGLES 2.0 guarantees only 16-bit indexes (OpenGLES 3.0 bumps it to 32-bit), we now automatically deal with it inside a renderer, if necessary doing additional processing to enable bigger meshes even for OpenGLES 2.0. This can be tested using fps_game on mobile.
Hiding things that are not in “camera frame” is called “frustum culling”. This is also similar to Unity (and I guess all/most other 3D engines) usage of this term, from what I know.
“occlusion culling” if you activate it, following Occlusion Query | Manual | Castle Game Engine (RenderOptions.OcclusionQuery := true). See new “examples/viewport_and_scenes/occlusion_query” demo.
note that we also have “distance culling”, esp. nice when you have dense fog that limits visibility beyond a certain distance. See “examples/viewport_and_scenes/fog_and_distance_culling” demo.
Note that, as I saw both Godot and Unity using terms “occlusion culling”, and I like it more too (it’s a more general term, and consistent with “frustum culling”) → I will do some renames in our terminology to be simpler, and just use “occlusion culling” term in CGE more (instead of “occlusion query”).