diff --git a/uppsrc/Painter/Fillers.cpp b/uppsrc/Painter/Fillers.cpp index 3b42a9206..7a252cc1b 100644 --- a/uppsrc/Painter/Fillers.cpp +++ b/uppsrc/Painter/Fillers.cpp @@ -77,6 +77,7 @@ void SubpixelFiller::Start(int minx, int maxx) sbuffer[0] = sbuffer[1] = sbuffer[2] = sbuffer[3] = sbuffer[4] = sbuffer[5] = sbuffer[6] = sbuffer[7] = 0; v = sbuffer + 3 + minx % 3; + end = v + maxx + 1; if(ss) { int xx = maxx / 3; ss->Get(buffer, x, y, xx - x + 2); @@ -134,8 +135,11 @@ void SubpixelFiller::Render(int val, int len) void SubpixelFiller::End() { - int n = (3333333 - (v - begin)) % 3; - while(n--) +// int n = (3333333 - (v - begin)) % 3; +// while(n--) + if(v < end) + Render(0); + if(v < end) Render(0); int16 *q = begin; while(q < v) { diff --git a/uppsrc/Painter/Fillers.h b/uppsrc/Painter/Fillers.h index f44b759b2..c5268b3b6 100644 --- a/uppsrc/Painter/Fillers.h +++ b/uppsrc/Painter/Fillers.h @@ -24,7 +24,7 @@ struct SpanFiller : Rasterizer::Filler { struct SubpixelFiller : Rasterizer::Filler { int16 *sbuffer; - int16 *begin; + int16 *begin, *end; RGBA *t; int16 *v; RGBA *s; diff --git a/uppsrc/Painter/Mask.cpp b/uppsrc/Painter/Mask.cpp index b18eee9bb..610dfd035 100644 --- a/uppsrc/Painter/Mask.cpp +++ b/uppsrc/Painter/Mask.cpp @@ -30,7 +30,7 @@ static inline byte *sSpan(byte *t, int c, int& len) void BufferPainter::FinishMask() { - Buffer wb(2 * ib.GetWidth()); + Buffer wb(quality == QUALITY_SUBPIXEL ? 6 * ib.GetWidth() : 2 * ib.GetWidth()); bool creating = false; if(!attr.hasclip) { clip.Add().Alloc(ib.GetHeight()); @@ -53,18 +53,26 @@ void BufferPainter::FinishMask() if(val == 0) { if(c256) t = sSpan(t, 128, c256); c0++; + if(quality == QUALITY_SUBPIXEL) + c0 += 2; full = false; } else if(val == 256) { if(c0) t = sSpan(t, 0, c0); c256++; + if(quality == QUALITY_SUBPIXEL) + c256 += 2; empty = false; } else { if(c256) t = sSpan(t, 128, c256); if(c0) t = sSpan(t, 0, c0); *t++ = val; + if(quality == QUALITY_SUBPIXEL) { + *t++ = val; + *t++ = val; + } full = empty = false; } s++;