void scene_renderer_t::render_and_filter_shape( const shape_t& s, int bbox_index) { RAMEN_ASSERT( bbox_index >= 0 && bbox_index <= filtered_bboxes_.size()); boost::gil::fill_pixels( boost::gil::view( buf_), image::gray_pixel_t( 0)); boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0)); ren_base_type ren_base; agg::scanline_u8 sl; agg::rasterizer_scanline_aa<> ras; renderer_type ren; ren_base.set_view( boost::gil::view( buf_)); ren.attach( ren_base); ras.gamma( agg::gamma_none()); convert_to_path( s, path_, filtered_bboxes_[bbox_index].min, subsample_); agg::conv_curve<agg::path_storage> cpath( path_); ras.add_path( cpath); ras.filling_rule( agg::fill_non_zero); ren.color( color_type( 1.0f, 1.0f)); agg::render_scanlines( ras, sl, ren); image::gray_image_view_t buf_view( boost::gil::view( buf_)); float g = s.grow(); if( g != 0.0f) { /* image::gray_image_view_t subbuf_view( boost::gil::subimage_view( buf_view, bboxes_[bbox_index].min.x - filtered_bboxes_[bbox_index].min.x, bboxes_[bbox_index].min.y - filtered_bboxes_[bbox_index].min.y, bboxes_[bbox_index].size().x + 1, bboxes_[bbox_index].size().y + 1)); image::dilate( subbuf_view, boost::gil::view( tmp_), subbuf_view, g / aspect_ / subsample_, g / subsample_); */ boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0)); image::dilate( buf_view, boost::gil::view( tmp_), buf_view, g / aspect_ / subsample_, g / subsample_); } Imath::V2f blur = s.blur(); if( blur.x != 0.0f || blur.y != 0.0f) { boost::gil::fill_pixels( boost::gil::view( tmp_), image::gray_pixel_t( 0)); image::box_blur_gray( buf_view, boost::gil::view( tmp_), buf_view, blur.x / aspect_ / subsample_, blur.y / subsample_, 1); } Imath::Box2i common_area = ImathExt::intersect( area_, filtered_bboxes_[bbox_index]); if( !common_area.isEmpty()) { image::gray_image_view_t bg_view( boost::gil::subimage_view( boost::gil::view( pixels_), common_area.min.x - area_.min.x, common_area.min.y - area_.min.y, common_area.size().x, common_area.size().y)); boost::gil::tbb_transform2_pixels( boost::gil::subimage_view( buf_view, common_area.min.x - filtered_bboxes_[bbox_index].min.x, common_area.min.y - filtered_bboxes_[bbox_index].min.y, common_area.size().x, common_area.size().y), bg_view, bg_view, composite_layer( s.color(), s.opacity())); } }