как очистить регионы XFixes - c++


0

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

    ...
    }

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

Источник
  •  26
  •  1
  • 18 апр 2020 2020-04-18 03:42:47

1 ответ

1

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

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

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

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

  • 18 апр 2020 2020-04-18 03:42:48