我正在为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/

10-09 19:55
查看更多