/* * gfx_fill_rect256 — залитый прямоугольник w×h от (x,y) (mode 0x81). */ #include "_gfx.h" void gfx_fill_rect256(int x, int y, int w, int h, uint8_t color) { if (w <= 0 || h <= 0) return; /* Ориентация с меньшим числом accel-burst'ов. Один burst красит * до 256 смежных байт (горизонталь) или до 256 пикселей колонки. * построчно (hlines): h × ceil(w/256) burst'ов * поколоночно (vlines): w × ceil(h/256) — при h ≤ 256 это w * Вертикаль выигрывает на высоких узких, горизонталь — на низких * широких. */ int h_bursts = h * ((w + 255) >> 8); int v_bursts = w * ((h + 255) >> 8); _gfx_w3_video_begin(); if (h_bursts <= v_bursts) { for (int yy = 0; yy < h; yy++) _gfx_hline256_raw(x, y + yy, w, color); } else { for (int xx = 0; xx < w; xx++) _gfx_vline256_raw(x + xx, y, h, color); } _gfx_w3_video_end(); }