#include "ScanLine.h" struct RecScan : Rasterizer::Target { ScanLine sl; byte *t; int x; virtual void Render(int val); virtual void Render(int val, int len); virtual void Start(int x, int len); void Finish(); }; void RecScan::Start(int xmin, int xmax) { sl.data.Alloc((xmax - xmin + 1) * 2); t = ~sl.data; sl.xmin = 0; } void RecScan::Render(int val) { if(val == 0) { *t++ = 0; *t++ = 0; } else if(val == 256) { *t++ = 0; *t++ = 0; } else *t++ = val; x++; } void RecScan::Render(int val, int len) { x += len; if(val == 256) { while(len > 0) { int n = min(len, 128); *t++ = 0; *t++ = 128 + n - 1; len -= n; } return; } if(val == 0) { while(len > 0) { int n = min(len, 128); *t++ = 0; *t++ = n - 1; len -= n; } return; } while(len--) *t++ = val; } /* void RecScan::Finish(int cx) { cx = cx - x; while(cx > 0) { int n = min(cx, 128); *t++ = 0; *t++ = n - 1; cx -= n; } sl.datalen = t - ~sl.data; } void RecScan::Shrink() { if(sl.datalen + 30 < } */