К сожалению, я должен спросить, потому что документация не указывает это очень хорошо.- это ограниченный срок жизни в каире?
Есть ли cairo_t
и cairo_surface_t
срок службы ограничен?
Во многих примерах или образцах, найденных в Интернете, поверхность и контекст почти всегда воссозданы (более подробно контекст) для каждой операции перерисовки.
На самом деле, кажется, работает почти точно, если я только создать поверхность и контекст один раз, лениво, как здесь, когда x11 окна изменяется:
void updateWindowSize()
{
if(!display || !_win)
return;
int w = cast(uint) lround(width);
int h = cast(uint) lround(height);
if (!_osSetSizePos)
XResizeWindow(display, _win, w, h);
if (!cairoSurface)
cairoSurface = cairo_xlib_surface_create(display, _win, _visual, w, h);
cairo_xlib_surface_set_size(cairoSurface, w, h);
if (!_cr) _cr = cairo_create(cairoSurface);
_cv.setContext(_cr); // _cv = canvas
}
Однако контекст должен быть принят каждый раз, на холст _cv.setContext(_cr);
в противном случае настройки никогда не применяются (цвет, ширина пера, ...), что является сумасшедшим, поскольку сам контекст никогда не изменяется.
Это полностью противоречит тому, что я видел раньше., Включая ответы на вопросы this Q.
Основная проблема заключается в том, что, если контекст воссоздан для каждого перерисовки то операции, такие как cairo_set_source_rgba
, cairo_set_source
, cairo_set_line_width
и т.д., должны быть сделаны для каждой перерисовки слишком, которую можно увидеть, как проблемы с производительностью.
Вы говорите, что такие операции, как 'cairo_set_source_rgba()' и т. Д., Являются проблемой производительности. Почему ты так думаешь? Вы просто делаете это или это действительно проблема с производительностью? Зачем? Как вы знаете/измеряете? –
На самом деле мое замечание о перфомансе не было уместным, так как во время одной операции рисования каждый раз, когда someting должен быть заполнен собственным шаблоном, шаблон должен быть переопределен. –