#include "SpriteRasterizer.h" #include "FrameBuffer.h" #include "../RenderData/Image.h" #include "../RenderData/Sprite.h" namespace Rasterizer { void SpriteRasterizer::DrawImage(const RenderData::Image& image, int32_t x, int32_t y) { DrawSprite(RenderData::Sprite(&image), x, y); } void SpriteRasterizer::DrawSprite(const RenderData::Sprite& sprite, int32_t x, int32_t y) { if (frameBuffer == nullptr || !sprite.is_valid()) { return; } const int32_t minX = x < 0 ? -x : 0; const int32_t minY = y < 0 ? -y : 0; const int32_t maxX = x + sprite.width > frameBuffer->get_width() ? frameBuffer->get_width() - x : sprite.width; const int32_t maxY = y + sprite.height > frameBuffer->get_height() ? frameBuffer->get_height() - y : sprite.height; if (minX >= maxX || minY >= maxY) { return; } for (int32_t sy = minY; sy < maxY; ++sy) { for (int32_t sx = minX; sx < maxX; ++sx) { const uint32_t color = sprite.get_pixel_fast(sx, sy); const uint8_t alpha = static_cast(color & 0xFF); if (alpha == 0) { continue; } frameBuffer->set_pixel(x + sx, y + sy, color); } } } }