/* * gfx_blit_part_noclip_vflip — под-прямоугольник картинки БЕЗ клипа, * ЗЕРКАЛЬНО ПО ВЕРТИКАЛИ. Пара к gfx_blit_part_noclip; про механику * зеркала (знак src-страйда) — см. gfx_blit_noclip_vflip. * * (sx,sy,w,h) задают кусок ИСТОЧНИКА в обычной системе координат, как у * не-зеркального двойника: sy — верхняя строка куска. На экран этот кусок * ложится перевёрнутым, (x,y) — левый верхний угол результата. Значит * первой рисуется строка sy+h-1 источника. * * Тайловому слою это позволяет не трогать выбор куска атласа вообще: * меняется только вызываемая функция и экранный y (его считает * вызывающий — у него поле, у библиотеки экран). */ #include "../_bgi.h" void gfx_blit_part_noclip_vflip(int x, int y, const void *img, uint8_t sx, uint8_t sy, uint8_t w, uint8_t h) { const uint8_t *p = (const uint8_t *)img; uint16_t stride = (uint16_t)(p[0] | (p[1] << 8)); const uint8_t *src; if (!stride || !w || !h) return; /* Стартуем с ПОСЛЕДНЕЙ строки куска и идём вверх. */ src = p + 4 + (uint16_t)(sy + h - 1) * stride + sx; _bgi_begin(); _bgi_blit_rows_raw(src, (uint8_t *)(_gfx_addr_base + x), w, h, -(int)stride, (uint8_t)y); _bgi_end(); }