/* * gfx_sprite_ysort — включить/выключить сортировку блит-прохода * sprite_update (painter's algorithm) и выбрать компоненты порядка: * mode = YSORT_Y | YSORT_LAYER (см. sprite.h). Дефолт 0 (выкл): * z-order = индекс массива. * * Компоненты управляются МАСКАМИ ключа (_spr_ysort_kmask): выключенный * компонент затирается в 0 при построении ключа — в сортировщике нет * ни одного ветвления по режиму. * * Включение — подключением указателя _spr_ysort_fn (паттерн funcptr-DCE * как у тикера): только этот модуль ссылается на код сортировщика — * программа без вызова gfx_sprite_ysort() не линкует ни его, ни таблицу. */ #include "../_bgi.h" #include /* YSORT_* */ void gfx_sprite_ysort(uint8_t mode) { if (mode) { _spr_ysort_kmask[0] = (mode & YSORT_Y) ? 0xFF : 0x00; _spr_ysort_kmask[1] = (mode & YSORT_LAYER) ? 0xFF : 0x00; _spr_ysort_fn = _spr_ysort; _spr_ysort_last = 0; /* форс rebuild: пока было выключено / * при смене режима порядок мог уехать */ } else _spr_ysort_fn = 0; }