J'écris du code de bas niveau pour la plate-forme X11. Pour obtenir les meilleures performances de copie de données, j'utilise les extensions XFixes/XDamage.comment effacer les régions XFixes
Comment effacer le contenu de la région XFixes après un cycle de rafraîchissement? Ou se nettoient-ils après avoir utilisé XFixesSetPictureClipRegion?
Mon code est quelque chose comme ça:
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
*/
...
}
Actuellement, j'effacer la région en supprimant et en recréant, mais je suppose que ce n'est pas la meilleure façon de le faire.