我正在为X11平台编写一些底层代码。为了获得最佳的数据复制性能,我使用XFixes / XDamage扩展。
一个刷新周期后,如何清除XFixes区域的内容?还是在使用XFixesSetPictureClipRegion之后它们会自行清洁?
我的代码是这样的:
Display xdpy;
XShamPixmap pixmap_;
XFixesRegion region_;
damage_event_callback(damage_geometry_t geometry, XDamage damage,...) {
unsigned curr_region = XFixesCreateRegion(xdpy, 0, 0);
XDamageSubtract(xdpy, damage, None, curr_region);
XFixesTranslateRegion( xdpy, curr_region, geometry.left(), geometry.top() );
XFixesUnionRegion (xdpy, region_, region_, curr_region);
}
process_damage_events(...) {
XFixesSetPictureClipRegion( xdpy, pixmap_, 0, 0, region_);
XCopyArea (xdpy, window_->id(),
pixmap_, XDefaultGC(xdpy, XDefaultScreen(xdpy)),
0,0,width(),height(),0,0);
/*Should clear region_ here
*/
...
}
目前,我通过删除和重新创建来清除区域,但是我认为这不是最好的方法。
最佳答案
我不确定您清除该区域的意思;您的意思是取消图片上的剪辑或释放区域?
要取消设置剪辑,我想是将剪辑区域设置为“无”
释放区域XFixesDestroyRegion()
要使该区域为空,您可能可以使用XFixesSetRegion(dpy,region,NULL,0),但是我不确定除非再次使用XFixesSetPictureClipRegion,否则它会更改图片上的剪辑。
关于c++ - 如何清除XFixes区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2659625/