3

从 xclient 的前缓冲区复制到根窗口的后缓冲区时,compiz 使用什么机制?

我似乎无法在 compiz 源代码中找到此过程。每当更新 xclient 的窗口前缓冲区以更新根后缓冲区时,它是否会调用一个函数?

4

1 回答 1

3

Copiz 使用X Composite 扩展将窗口重定向到屏幕外像素图。然后它使用GLX_EXT_texture_from_pixmap对 GLX/OpenGL 的扩展来将这些离屏像素图传输到 OpenGL 纹理中。

对于合成,启用复合的 X 服务器提供了一个特殊的复合窗口层,它位于根窗口(以及根窗口是父窗口的窗口)和屏幕保护程序层之间。Compiz 在该合成层中创建一个窗口,为该窗口创建一个 OpenGL 上下文,并使用 OpenGL 绘图命令执行合成。

还有一些合成器不使用 OpenGL。然后他们要么使用服务器端组合(这是相当无用的,除了测试 Composite 协议本身)或者他们使用 XRender 绘图方法。从技术上讲,X 核心绘图方法也可以工作,但这些方法不支持转换和缩放;合成器通常需要的东西。

合成器不会将任何内容绘制到根窗口。所有合成都进入复合层。

于 2013-09-03T15:29:43.853 回答