mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-14 13:33:23 +09:00
A compositor on the anland route never creates a window surface: it imports the display host's dma-bufs, draws into them through framebuffers and binds its contexts with EGL_NO_SURFACE. The host frame bridge is only opened by a host-framed surface being created and activated, so with no surface the bridge stayed shut and the display host offered its frames into a name nobody served. So the first surfaceless bind of a real context, in a session that asked for host-framed surfaces, makes the surface eglCreateWindowSurface would have made - registered in the EGL state AND created through the backend's window-surface entry, which the remote backend routes to the host frame - and every later surfaceless bind binds it, because the compositor rebinds with EGL_NO_SURFACE all the time and a bind without it leaves nothing current to present. Registering it in the EGL state is not optional: a backend-only token was refused by the state (EGL_BAD_SURFACE) on every bind and every swap. Only the compositor takes the host frame. Desktops are full of processes that bind with no surface (konsole, plasmashell, kactivitymanagerd), and a second process taking it made the activation fail; the compositor's launcher marks it with MOBILEGL_HOST_FRAME_CLIENT=1.