Xorg 中服务器端和客户端合成的区别?

Dan*_*096 7 xorg x11 composite

xcompmgr 提供以下选项:

-s     Server-side compositing with hard-edged shadows.
Run Code Online (Sandbox Code Playgroud)

根据实验,我可以说这比“客户端”选项快得多。但它究竟在做什么?在 Xorg 中,客户端和服务器端合成有什么区别?

而且,更重要的是:如果我想在例如窗口管理器中实现服务器端合成,我必须使用哪些 Xorg 函数集?

Dan*_*096 1

因此,查看 xcompmgr 源代码,我发现:

  1. -s 和 -c 之间的主要区别似乎是阴影效果本身是如何实现的,而不是合成是如何完成的。我在准确了解正在发生的事情时遇到一些麻烦(图形不是我的强项),但生成“服务器端”阴影的例程看起来更简单。我认为它只是创建一个窗口大小的透明灰色位图或其他东西。重点是,这是一个更便宜的例行程序。

  2. 我想要的函数列在“man Xcomposite”中,并且可以在 X11/extensions/Xcomposite.h 中找到。对于合成管理器(或合成 WM),人们特别需要 XCompositeRedirectSubwindows() 和 XCompositeUnredirectSubwindows()。(后者必须在关闭 X 显示之前运行,否则会出现段错误。)