The current interface is DRM (drivers/gpu/drm) and there specifically, atomic modesetting:
The current interface is DRM (drivers/gpu/drm) and there specifically, atomic modesetting:
So you can have multiple framebuffers in the same time with arbitrary color formats (like 8-bit grayscale, 16/32-bit (A)RGB, YUV2, etc.). Bilinear scaling, alpha-blending and mirroring/90/180/270 degree rotations are often supported as well.
It's important to understand these framebuffers are not composited anywhere else, but are actually scanned to the display device in real time, on the fly.
Traditional framebuffer can of course be emulated by setting a single layer to cover full screen without alpha-blending.
Starting with Android N, Google has been locking down what is possible to do via the NDK and apps can no longer directly read outside their own sandboxed filesystem, so no /dev.