...
在窗口管理器中启用了Compositor扩展,Composite扩展允许窗口管理器在所有窗口创建和显示的过程中重定向窗口输出内容。FDE-X11使用了这三个API RedirectSubwindows
,NameWindowPixmap
和GetWindowPixmap
,通过RedirectSubwindows
调用将一个窗口树中的所有窗口渲染重定向到内部存储off-screen storage 。重定向的时候可以指定让X 自动更新窗口的内容到屏幕上或者由混成器手动更新,通过NameWindowPixmap
取得某个窗口的内部存储,再通过GetWindowPixmap
最终拿到这个窗口的图像buffer。合成器实现窗口特效的原理也基于此。
这样就可以将每个窗口的图像buffer分享出来,转到Android处理绘制,而不再是只绘制整个Xserver的合成后的图像buffer。这样就可以将每个窗口的图像buffer分离出来,转到Android处理绘制,而不再是只绘制整个Xserver的合成后的图像buffer。
Activity或Dialog
在目前的FDE-X11方案中,主要还是使用Activity做为与Linux一一对应的窗口。在Android的窗口系统中,APP窗口所处理的层次被限定在一个层级范围,只有在这个层级范围的窗口才会与其他APP的窗口交互行为相同,目前可选的Android组件就只有Activity和Dialog了。作用是创建SurfaceView显示输出图像,接收Android输入事件发送给Xserver。在FDE使用的Android freeform模式下,表现大致等同于Linux桌面,在理论上甚至可以做到完全一致。
...