1,DAMAGE模型
这一部分翻译自英文Spec:
英文原文:http://webcvs.freedesktop.org/xlibs/DamageExt/protocol?view=co
我们将改变窗口和pixmaps像素内容的行为称作“damage”。另一个“damage”的解释就是,drawable区域由于窗口管理导致的重绘或者其他操作导致的数据损失。本扩展没有处理第二种情况。我们迫切的希望一个更好的不会混淆这些观点的术语。
当用户向drawable绘图时,会累积Damage。每一次绘图操作会在drawable里面破坏一个或者多个矩形区域。这些矩形区域会包括每一次绘图操作修改的像素集合,但是也可能包括像素之外的更重要的信息(可能将没有被改变的区域也包括进来了)。现在需要damage平衡已被报告的矩形区域(包括了被修改和没有被修改的)和额外的区域(没有被修改的部分)的数量(这样我们就可以找出哪些是确实需要重画的,从而减少系统工作量)。一个比较合理的目标是,每一个原子操作 (line, string, rectangle)被表示为一个矩形,而操作的damage区域就是这些矩形的集合了。
DAMAGE 扩展允许应用把这些原始的矩形当作事件流来接收,也允许他们被X服务器部分的处理(这里服务器应该是指Xdamage,部分的处理是指通过XDamage获得确实需要重画的画面,这个画面是原始的矩形的子集)以减少数据的传输,这还可以减少重绘操作的延迟(很明显,需要重绘的区域少了---起码不会变多)。
window的Damage反映了window 本身和window 的任何子window的Renderc操作。 为了减少计算的复杂性, DAMAGE 扩展允许服务器监视窗口范围内所有的物理像素的rendering操作(这样就不用管你是老子还是儿子啦)。对于一个单帧缓冲管理所有窗口的系统来说, damage 会累计窗口可视区域的所有的rendering操作。
使用这种结构的具体原体原因在XSPLITTREE扩展里面讲述的比较清楚。XSPLITTREE扩展会