| 151 | template<class Scanline, class BaseRenderer, |
| 152 | class SpanAllocator, class SpanGenerator> |
| 153 | void render_scanline_aa(const Scanline& sl, BaseRenderer& ren, |
| 154 | SpanAllocator& alloc, SpanGenerator& span_gen) |
| 155 | { |
| 156 | int y = sl.y(); |
| 157 | |
| 158 | unsigned num_spans = sl.num_spans(); |
| 159 | typename Scanline::const_iterator span = sl.begin(); |
| 160 | for(;;) |
| 161 | { |
| 162 | int x = span->x; |
| 163 | int len = span->len; |
| 164 | const typename Scanline::cover_type* covers = span->covers; |
| 165 | |
| 166 | if(len < 0) len = -len; |
| 167 | typename BaseRenderer::color_type* colors = alloc.allocate(len); |
| 168 | span_gen.generate(colors, x, y, len); |
| 169 | ren.blend_color_hspan(x, y, len, colors, |
| 170 | (span->len < 0) ? 0 : covers, *covers); |
| 171 | |
| 172 | if(--num_spans == 0) break; |
| 173 | ++span; |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | //=====================================================render_scanlines_aa |
| 178 | template<class Rasterizer, class Scanline, class BaseRenderer, |