как очистить регионы XFixes - PullRequest
0 голосов
/ 17 апреля 2010

Я пишу код низкого уровня для платформы 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 
    */

    ...
    }

В настоящее время я очищаю регион, удаляя и воссоздавая, но я думаю, что это не лучший способ сделать это.

1 Ответ

1 голос
/ 30 апреля 2010

Я не уверен, что вы подразумеваете под очисткой региона; ты имеешь в виду удаление клипа с картинки или освобождение региона?

Чтобы снять клип, я думаю, вы должны установить область клипа на Нет

Чтобы освободить регион XFixesDestroyRegion ()

Чтобы сделать область пустой, вы, вероятно, можете XFixesSetRegion (dpy, region, NULL, 0), но я не уверен, что изменит клип на картинке, если вы снова не XFixesSetPictureClipRegion.

...