libbgi: vflip-блиты для row-major картинок (шаг I.2 плана L9-INVERT)
gfx_blit_noclip_vflip / gfx_blit_part_noclip_vflip / gfx_blit_part_vflip. Ассемблера не потребовалось: у row-major вертикальное зеркало — это порядок строк, а он задаётся ЗНАКОМ src-страйда, который _bgi_blit_rows_raw и так принимает знаковым и патчит SMC. Даём адрес последней строки и -stride. Клип у part_vflip свой: обрезка сверху экрана съедает НИЖНИЕ строки источника, и первая строка обязана считаться от высоты ДО клипа (поймано тестом — сначала формула брала уже укороченную). tests/pageflip расширен до 8 проверок, все PASS в MAME. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,21 @@ void gfx_blit_noclip(int x, int y, const void *img);
|
||||
* 16-бит, а не на пиксели: замер — 11 658 тактов на heal 22×22). */
|
||||
void gfx_heal_noclip(int x, int y, uint8_t w, uint8_t h);
|
||||
|
||||
/* ЗЕРКАЛО ПО ВЕРТИКАЛИ (row-major картинки): последняя строка источника
|
||||
* ложится в верхнюю строку прямоугольника. (x,y) — по-прежнему левый
|
||||
* ВЕРХНИЙ угол результата, поэтому вызывающему не надо менять арифметику
|
||||
* позиции — только выбрать другую функцию. Стоят ровно столько же, сколько
|
||||
* не-зеркальные двойники: у row-major вертикальное зеркало это порядок
|
||||
* строк, а он задаётся знаком src-страйда (accel копирует строку вперёд).
|
||||
* Для column-major (gfx_blit_cols*) такого варианта НЕТ и быть не может —
|
||||
* там пришлось бы реверсить внутри колонки; бесплатное зеркало у них
|
||||
* горизонтальное (флаг flip). */
|
||||
void gfx_blit_noclip_vflip(int x, int y, const void *img);
|
||||
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);
|
||||
void gfx_blit_part_vflip(int x, int y, const void *img,
|
||||
int sx, int sy, int w, int h);
|
||||
|
||||
/* Блит под-прямоугольника (sx,sy,w,h) картинки (атлас кадров:
|
||||
* кадр N ленты — sx = N*FRAME_W). Под-прямоугольник обязан лежать
|
||||
* внутри img; по экрану — клиппится. */
|
||||
|
||||
Reference in New Issue
Block a user