Здравствуйте.
Судя по описанию возможностей AGG, в нём реализована возможность отсечения полигонов, не попадающих в clipping box. Самостоятельно не смог ни разобраться, ни нагуглить.
К примеру, в нижеприведённом коде строчка
path.move_to( 10000, 10000 ); path.line_to( 10000, 100001 );
замедляет выполнение более чем в 10 раз. Видимо, из-за того, что рендерер обрабатывает каждый пиксель этой мегалинии, вместо того, чтобы сразу отсечь её, как заведомо не попадающую в растр. Как это сделать средствами AGG?
void drawPolyLine( unsigned char* pixels, unsigned int width, unsigned int height, list<Point>& points )
{
rendering_buffer rbuf( pixels, width, height, width * 3 );
pixfmt_rgb24 pixf( rbuf );
renderer_base<pixfmt_rgb24> renderer( pixf );
rasterizer_scanline_aa<> ras;
scanline_p8 sl;
path_storage path;
list<Point>::iterator p = points.begin();
path.move_to( p->x, p->y );
for( ++p; p != points.end(); ++p )
{
path.line_to( p->x, p->y );
}
path.move_to( 10000, 10000 ); path.line_to( 10000, 100001 );
conv_stroke<path_storage> stroke( path );
stroke.line_join( round_join );
stroke.line_cap( round_cap );
stroke.width( 5 );
ras.add_path( stroke );
render_scanlines_aa_solid( ras, sl, renderer, rgba(1,0.5,0.5) );
}