/* * gfx_blit_noclip — блит ЦЕЛОЙ картинки getimage-формата БЕЗ клипа, в * ТЕКУЩЕМ банке (gfx_set_bank). Быстрый вариант gfx_blit для тайловых * движков: вызывающий гарантирует, что картинка целиком на экране. * * Зачем отдельная функция: gfx_blit идёт через общее ядро _gfx_blit_full * (16-битная арифметика, клип, пересчёт src, нарезка полос >256) — замер * в MAME (PoP roomtest, 2026-07-27): 13 288 тактов на блит спрайта 32×3, * т.е. цена почти не зависит от размера, платим за проход по цепочке. * Линейное спрайтовое ядро на том же спрайте — 4 617 тактов (в 2.9 раза * быстрее): 8-битные w/h, без split, без клип-кода. * * От putsprite отличается тем, что НЕ навязывает GFX_BANK_SPRITE: фон * рисуется в GFX_BANK_TRANSPARENT (0xFF не пишется, но ОЗУ-копия * обновляется — иначе gfx_heal сотрёт нарисованное). * * W3-скобка ставится ЗДЕСЬ (код libbgi живёт в W1): вызывать её из * приложения, собранного с --w3, нельзя — после _bgi_begin окно W3 * занято видеобанком и код вызывающего исчезает из адресного * пространства (проверено: белый экран). * * Ограничения: w,h ≤ 255; картинка целиком в пределах экрана. Не * подходит — зовите gfx_blit/gfx_blit_part. */ #include "../_bgi.h" void gfx_blit_noclip(int x, int y, const void *img) { const uint8_t *p = (const uint8_t *)img; _bgi_begin(); _gfx_blit_sprite_noclip(x, y, p + 4, (uint16_t)(p[0] | (p[1] << 8)), p[0], p[2]); _bgi_end(); }