我正在使用这种方法使我的 OpenGL 应用程序的背景透明(与 Compiz 合作)。
它运行完美,但我认识到一个事实:只要我的应用程序打开透明窗口(无论是否完成任何 OpenGL 绘图),Xorg 进程 CPU 负载都会增加到 ~30%。
谁能解释这种行为?我在想这种方法绕过了Xserver,整个处理都是由显卡完成的?
我正在使用这种方法使我的 OpenGL 应用程序的背景透明(与 Compiz 合作)。
它运行完美,但我认识到一个事实:只要我的应用程序打开透明窗口(无论是否完成任何 OpenGL 绘图),Xorg 进程 CPU 负载都会增加到 ~30%。
谁能解释这种行为?我在想这种方法绕过了Xserver,整个处理都是由显卡完成的?
谁能解释这种行为?我在想这种方法绕过了Xserver,整个处理都是由显卡完成的?
X 服务器没有被规避,只是使用了它的其他部分。合成的问题是,窗口内容被表示为 X 可绘制对象(像素图),由 X 服务器管理。为了合成它,X 服务器必须根据合成器的请求执行到纹理的传输。这可能会导致一些管理开销,从而导致性能下降。
此外,大多数合成器的代码也很糟糕(就像编写 Compiz/Metacity/KWin 的人完全不知道 OpenGL 和 GPU 是如何工作的一样)。这是我的 TODO 列表中的项目之一(编写一个体面的合成器,它没有被切除)。