about summary refs log tree commit diff stats
path: root/500fake-screen.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-06-12 21:02:50 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-06-12 21:11:03 -0700
commit82fdf176c1209ccc170fb2c9528cb7254c24bf83 (patch)
tree7be724b0733c9486814b9a87a928315737a869e8 /500fake-screen.mu
parent85bcf050e7cff660f7e3fafbbc2e9a95b78dcc39 (diff)
downloadmu-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.mu30
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