From: Maxim S. <mc...@an...> - 2005-09-15 23:38:09
|
> I am experimenting with 2.4 release and modified SpanGenerator design. The > new functions are a bit easier to use and the concept of a 'renderer' now > seems to be redundant. Interesting! What are the changes? > I encountered a problem with 'sbool_combine_shapes_aa' function which > still > accepts the 'Renderer' as the last parameter: > > agg::sbool_combine_shapes_aa(agg::sbool_and, sh, ras, sl1, sl, result, > ren); > > Shouldn't the last parameter be 'render_base' in the new design? First of all, I'd like to keep the renderer concept. It's convenient when you use a function template like that: template<class Ren> void render(Ren& ren) { . . . } Here "ren" can be solid, gradient, etc. That is, I'd like to preserve compile time polymorphism. This is why "sbool_combine_shapes_aa" requires it. It can't take renderer_base, because it doesn't have to draw anything. It can be a just a next step in boolean operations. You can use "scanline_storage_aa" as "ren" to accumulate the new set of scanlines. Maybe it's just not the best name, but a scanline renderer is an abstract that takes a scanline and does what it wants. I used the renderer interface for the scanline boolean because it perfectly fitted all needs. So, it can draw directly, it also can accumulate scanlines in a separate storage for future use. So that, I'd like to keep the concept of the scanline renderer as a class (along with functions "render_*"). McSeem |