
//----------------------------------------------------------------------------
// Anti-Grain Geometry - Version 2.3
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
//
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
//
//----------------------------------------------------------------------------
// Contact: mcseem@antigrain.com
//          mcseemagg@yahoo.com
//          http://www.antigrain.com
//----------------------------------------------------------------------------
#ifndef AGG_RENDER_SCANLINES_INCLUDED
#define AGG_RENDER_SCANLINES_INCLUDED
#include "agg_basics.h"
namespace agg
{
template<class Rasterizer, class Scanline, class Renderer>
void render_scanlines(Rasterizer& ras, Scanline& sl, Renderer& ren, bool no_smooth)
{
    if(ras.rewind_scanlines()) {
        sl.reset(ras.min_x(), ras.max_x());
        ren.prepare(unsigned(ras.max_x() - ras.min_x() + 2));
        while(ras.sweep_scanline(sl, no_smooth)) {
            ren.render(sl);
        }
    }
}
template<class Rasterizer, class Scanline, class Renderer,
         class VertexSource, class ColorStorage, class PathId>
void render_all_paths(Rasterizer& ras,
                      Scanline& sl,
                      Renderer& r,
                      VertexSource& vs,
                      const ColorStorage& as,
                      const PathId& path_id,
                      unsigned num_paths)
{
    for(unsigned i = 0; i < num_paths; i++) {
        ras.reset();
        ras.add_path(vs, path_id[i]);
        r.color(as[i]);
        render_scanlines(ras, sl, r);
    }
}
}
#endif
