I'm writing my software renderer, and I'm trying to optimize bit blitting.
So I did write the blitter, but have hard understanding of how to do transparency. I know the usual way is to check if the pixel is black for example, is to skip that pixel.. but what about if I'm doing the blitting line by line ? What should I do in that case?
void Rasterizer::DrawSprite(sprite_ptr sprite)
{
int numPixelsOnLine = sprite->width;
int bytesToMove = numPixelsOnLine * 1;
const uint8_t* src = sprite->frames[sprite->curr_frame];
for (int y = 0; y<sprite->height; y++)
{
uint8_t* destP =&m_FrameBuffer[(sprite->y + y)*320 + sprite->x];
const uint8_t* srcP = &src[y * sprite->width];
if (destP < m_FrameBuffer || destP > m_FrameBuffer + 240 * 320 || *srcP == 0x00)
{
continue;
}
memcpy(destP, srcP, bytesToMove);
destP += bytesToMove;
}
}