starkernel: item 4.4f -- fix vertically-flipped glyph rendering on the framebuffer
font_8x16_data stores each glyph's 16 scanline bytes bottom-to-top, not top-to-bottom -- confirmed by hand-decoding 'A' (0x41) and 'T' (0x54): both only produce their correct letterform when the row order is reversed. fb_draw_glyph() mapped glyph row 0 to the cell's top pixel row, which was wrong for this table. Flip the row-to-pixel mapping instead of touching the 4096-byte font data; every glyph now renders right-side up. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
099605d399
commit
da88a9a546
@@ -189,7 +189,10 @@ void fb_draw_glyph(uint32_t px, uint32_t py, uint8_t ch,
|
||||
uint32_t on = (bits >> (7u - col)) & 1u;
|
||||
uint32_t packed = on ? pfg : pbg;
|
||||
uint32_t base_x = px + col * g_fb.scale;
|
||||
uint32_t base_y = py + row * g_fb.scale;
|
||||
/* font_8x16_data stores each glyph's scanlines bottom-to-top
|
||||
* (FABRIC.md item 4.4f) -- row 0 is the glyph's bottom row, so
|
||||
* it maps to the cell's last pixel row, not its first. */
|
||||
uint32_t base_y = py + (15u - row) * g_fb.scale;
|
||||
|
||||
/* pixel block for scale > 1 */
|
||||
for (sr = 0; sr < g_fb.scale; sr++) {
|
||||
|
||||
Reference in New Issue
Block a user