diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-06-12 21:02:50 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-06-12 21:11:03 -0700 |
commit | 82fdf176c1209ccc170fb2c9528cb7254c24bf83 (patch) | |
tree | 7be724b0733c9486814b9a87a928315737a869e8 /500fake-screen.mu | |
parent | 85bcf050e7cff660f7e3fafbbc2e9a95b78dcc39 (diff) | |
download | mu-82fdf176c1209ccc170fb2c9528cb7254c24bf83.tar.gz |
snapshot
Looks like what's slowing down screen rendering is in fact _font_ rendering.
Diffstat (limited to '500fake-screen.mu')
-rw-r--r-- | 500fake-screen.mu | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/500fake-screen.mu b/500fake-screen.mu index 641a8d4b..88c5399a 100644 --- a/500fake-screen.mu +++ b/500fake-screen.mu @@ -545,8 +545,36 @@ fn pixel-index _screen: (addr screen), x: int, y: int -> _/ecx: int { # double-buffering primitive # 'screen' must be a fake screen. 'target-screen' is usually real. # Both screens must have the same size. -fn copy-pixels _screen: (addr screen), target-screen: (addr screen) { +fn copy-screen _screen: (addr screen), target-screen: (addr screen) { var screen/esi: (addr screen) <- copy _screen + # copy graphemes + var width-a/edi: (addr int) <- get screen, width + var height-a/ebx: (addr int) <- get screen, height + var y/edx: int <- copy 0 + { + compare y, *height-a + break-if->= + var x/ecx: int <- copy 0 + { + compare x, *width-a + break-if->= + var g: grapheme + var tmp/eax: grapheme <- screen-grapheme-at screen, x, y + copy-to g, tmp + var fg: int + var tmp/eax: int <- screen-color-at screen, x, y + copy-to fg, tmp + var bg: int + tmp <- screen-background-color-at screen, x, y + copy-to bg, tmp + draw-grapheme target-screen, g, x, y, fg, bg + x <- increment + loop + } + y <- increment + loop + } + # copy pixels var pixels-ah/eax: (addr handle array byte) <- get screen, pixels var _pixels/eax: (addr array byte) <- lookup *pixels-ah var pixels/edi: (addr array byte) <- copy _pixels |