from Renderer.hpp:34
class Renderer
{
public:
Renderer()
{
}
Renderer(RenderingBuffer& renderingBuffer, AbstractPainter& painter)
: renderingBuffer(&renderingBuffer), painter(&painter)
{
}
void setRenderingBuffer(RenderingBuffer& renderingBuffer)
{
this->renderingBuffer = &renderingBuffer;
}
void render(const Scanline& scanline)
{
if (scanline.getY() < 0 || scanline.getY() >= int(renderingBuffer->getHeight()))
{
return;
}
unsigned numSpans = scanline.getNumSpans();
int baseX = 0;
int y = scanline.getY();
unsigned char* row = renderingBuffer->row(y);
Scanline::iterator spanIterator(scanline);
uint8_t xAdjust = renderingBuffer->getXAdjust();
do
{
int x = spanIterator.next() + baseX;
const uint8_t* covers = spanIterator.getCovers();
int numPix = spanIterator.getNumPix();
if (x < 0)
{
numPix += x;
if (numPix <= 0)
{
continue;
}
covers -= x;
x = 0;
}
if (x + numPix >= int(renderingBuffer->getWidth()))
{
numPix = renderingBuffer->getWidth() - x;
if (numPix <= 0)
{
continue;
}
}
painter->render(row, x, xAdjust, y, numPix, covers);
}
while (--numSpans);
}
RenderingBuffer& getRenderingBuffer()
{
return *renderingBuffer;
}
private:
RenderingBuffer* renderingBuffer;
AbstractPainter* painter;
};