You don't need to redraw the entire framebuffer with GPU rendering, either. It's perfectly possible to do small, partial updates.
See for example
https://registry.khronos.org/EGL/extensions/EXT/EGL_EXT_buff...
And https://registry.khronos.org/EGL/extensions/KHR/EGL_KHR_part...